mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
Изменения для компиляции под linux.
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62542 954022d7-b5bf-4e40-9824-e11837661b57
This commit is contained in:
committed by
Alexander Trofimov
parent
833ead66ec
commit
765e1fd8ae
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
#include "Utils.h"
|
||||
@ -7,7 +7,7 @@ namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>. Annex C Table C-2)
|
||||
// Данный массив содержит все возможные состояния (см. Annex C Table C-2)
|
||||
static MQCoderState aoMQCoderStates[47 * 2] =
|
||||
{
|
||||
{ 0x5601, 0, &aoMQCoderStates[2], &aoMQCoderStates[3] },
|
||||
@ -107,7 +107,7 @@ namespace Jpeg2000
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
static void MQC_ByteOut(MQCoder *pMQCoder)
|
||||
{
|
||||
@ -305,7 +305,7 @@ namespace Jpeg2000
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
MQCoder* MQC_Create()
|
||||
{
|
||||
@ -383,7 +383,7 @@ namespace Jpeg2000
|
||||
}
|
||||
void MQC_BypassInitEncoder(MQCoder *pMQCoder)
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Данная функция не польностью протестирована
|
||||
pMQCoder->nCregister = 0;
|
||||
pMQCoder->nCt = 8;
|
||||
|
||||
@ -394,7 +394,7 @@ namespace Jpeg2000
|
||||
}
|
||||
void MQC_BypassEncoder(MQCoder *pMQCoder, int nValue)
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Данная функция не польностью протестирована
|
||||
pMQCoder->nCt--;
|
||||
pMQCoder->nCregister = pMQCoder->nCregister + (nValue << pMQCoder->nCt);
|
||||
|
||||
@ -414,7 +414,7 @@ namespace Jpeg2000
|
||||
|
||||
int MQC_BypassFlushEncoder(MQCoder *pMQCoder)
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Данная функция не польностью протестирована
|
||||
unsigned char nBitPadding = 0;
|
||||
|
||||
if (pMQCoder->nCt != 0)
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
#include "Utils.h"
|
||||
@ -17,7 +17,7 @@ namespace Jpeg2000
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5-3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Таблицы норм для обратимого 5-3 веэвлет-преобразования
|
||||
static const double c_aDWT_NormsRev[4][10] =
|
||||
{
|
||||
{ 1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3 },
|
||||
@ -26,7 +26,7 @@ namespace Jpeg2000
|
||||
{ .7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93 }
|
||||
};
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9-7 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Таблицы норм для необратимого 9-7 веэвлет-преобразования
|
||||
static const double c_aDWT_NormsIrr[4][10] =
|
||||
{
|
||||
{ 1.000, 1.965, 4.177, 8.403, 16.90, 33.84, 67.69, 135.3, 270.6, 540.9 },
|
||||
@ -36,7 +36,7 @@ namespace Jpeg2000
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
static void DWT_DeinterleaveHor(int *pA, int *pB, int nDn, int nSn, int nCase)
|
||||
@ -236,7 +236,7 @@ namespace Jpeg2000
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
void DWT_EncodeRev(TileComp *pTileComponent)
|
||||
{
|
||||
@ -249,10 +249,10 @@ namespace Jpeg2000
|
||||
|
||||
for (int nIndex = 0; nIndex < nLevel; nIndex++)
|
||||
{
|
||||
int nResW; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResH; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResW1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResH1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResW; // Ширина для данного уровня разрешения
|
||||
int nResH; // Высота для данного уровня разрешения
|
||||
int nResW1; // Ширина для уровня разрешения на 1 меньше, чем данный
|
||||
int nResH1; // Высота для уровня разрешения на 1 меньше, чем данный
|
||||
int nCaseCol; // 0 = non inversion on horizontal filtering, 1 = inversion between low-pass and high-pass filtering
|
||||
int nCaseRow; // 0 = non inversion on vertical filtering, 1 = inversion between low-pass and high-pass filtering
|
||||
|
||||
@ -315,10 +315,10 @@ namespace Jpeg2000
|
||||
|
||||
for (int nIndex = nLevel - 1; nIndex >= nStop; nIndex--)
|
||||
{
|
||||
int nResW; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResH; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResW1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResH1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResW; // Ширина для данного уровня разрешения
|
||||
int nResH; // Высота для данного уровня разрешения
|
||||
int nResW1; // Ширина для уровня разрешения на 1 меньше, чем данный
|
||||
int nResH1; // Высота для уровня разрешения на 1 меньше, чем данный
|
||||
int nCaseCol; // 0 = non inversion on horizontal filtering, 1 = inversion between low-pass and high-pass filtering
|
||||
int nCaseRow; // 0 = non inversion on vertical filtering, 1 = inversion between low-pass and high-pass filtering
|
||||
|
||||
@ -395,10 +395,10 @@ namespace Jpeg2000
|
||||
|
||||
for (int nIndex = 0; nIndex < nLevel; nIndex++)
|
||||
{
|
||||
int nResW; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResH; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResW1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResH1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResW; // Ширина для данного уровня разрешения
|
||||
int nResH; // Высота для данного уровня разрешения
|
||||
int nResW1; // Ширина для уровня разрешения на 1 меньше, чем данный
|
||||
int nResH1; // Высота для уровня разрешения на 1 меньше, чем данный
|
||||
int nCaseCol; // 0 = non inversion on horizontal filtering, 1 = inversion between low-pass and high-pass filtering
|
||||
int nCaseRow; // 0 = non inversion on vertical filtering, 1 = inversion between low-pass and high-pass filtering
|
||||
|
||||
@ -461,10 +461,10 @@ namespace Jpeg2000
|
||||
|
||||
for (int nIndex = nLevel - 1; nIndex >= nStop; nIndex--)
|
||||
{
|
||||
int nResW; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResH; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResW1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResH1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResW; // Ширина для данного уровня разрешения
|
||||
int nResH; // Высота для данного уровня разрешения
|
||||
int nResW1; // Ширина для уровня разрешения на 1 меньше, чем данный
|
||||
int nResH1; // Высота для уровня разрешения на 1 меньше, чем данный
|
||||
int nCaseCol; // 0 = non inversion on horizontal filtering, 1 = inversion between low-pass and high-pass filtering
|
||||
int nCaseRow; // 0 = non inversion on vertical filtering, 1 = inversion between low-pass and high-pass filtering
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
#include "Utils.h"
|
||||
@ -42,7 +42,7 @@ namespace Jpeg2000
|
||||
pImage->eColorSpace = eColorSpace;
|
||||
pImage->nCsiz = nComponentsCount;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Выделяем память под компоненты
|
||||
pImage->pComponents = (ImageComponent*)Malloc(pImage->nCsiz * sizeof(ImageComponent));
|
||||
|
||||
if (!pImage->pComponents)
|
||||
@ -75,7 +75,7 @@ namespace Jpeg2000
|
||||
}
|
||||
else
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Выдать сообщение об ошибке
|
||||
}
|
||||
|
||||
return pImage;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#pragma once
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JPEG2000-codestream: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#pragma once
|
||||
// Функции в данном файле предназначены для чтения/записи различных частей JPEG2000-codestream: маркеры и данные
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "math.h"
|
||||
@ -98,7 +98,7 @@ namespace Jpeg2000
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
static void J2k_WriteSOC(J2kCodestream *pJ2k)
|
||||
{
|
||||
@ -188,7 +188,7 @@ namespace Jpeg2000
|
||||
pImage->pComponents[nIndex].nFactorDiv2 = 0;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20> Y
|
||||
// Считаем количество тайлов по Х и Y
|
||||
pCodingParams->nXTilesCount = CeilDiv(pImage->nXsiz - pCodingParams->nXTOsiz, pCodingParams->nXTsiz);
|
||||
pCodingParams->nYTilesCount = CeilDiv(pImage->nYsiz - pCodingParams->nYTOsiz, pCodingParams->nYTsiz);
|
||||
|
||||
@ -218,7 +218,7 @@ namespace Jpeg2000
|
||||
pCodingParams->pTCP[nIndex].nFirst = 1;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> PPM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Обнуляем данные для PPM маркера
|
||||
pCodingParams->nPPM = 0;
|
||||
pCodingParams->pPPMData = NULL;
|
||||
pCodingParams->pPPMDataFirst = NULL;
|
||||
@ -315,7 +315,7 @@ namespace Jpeg2000
|
||||
|
||||
int nLen = pStream->Read(2);
|
||||
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Сделать нормальное чтение
|
||||
pStream->Skip(nLen - 2);
|
||||
}
|
||||
|
||||
@ -665,7 +665,7 @@ namespace Jpeg2000
|
||||
pTCCP->aoStepSizes[nCurBand].nMantissa = nMantissa;
|
||||
}
|
||||
|
||||
// Add : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ScalarImplicit, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Subbands
|
||||
// Add : Если тип квантования ScalarImplicit, тогда вычислим коэффициенты квантования для остальных Subbands
|
||||
if (pTCCP->nQuantStyle == J2K_CCP_QNTSTY_SIQNT)
|
||||
{
|
||||
for (int nCurBand = 1; nCurBand < J2K_MAXBANDS; nCurBand++)
|
||||
@ -853,7 +853,7 @@ namespace Jpeg2000
|
||||
nPacketLen = (nPacketLen << 7) + nAdd; // Iplm_ij
|
||||
if ((nAdd & 0x80) == 0)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> packet
|
||||
// новый packet
|
||||
nPacketLen = 0;
|
||||
}
|
||||
if (nLen <= 0)
|
||||
@ -877,7 +877,7 @@ namespace Jpeg2000
|
||||
nPacketLen = (nPacketLen << 7) + nAdd; // Iplt_i
|
||||
if ((nAdd & 0x80) == 0)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> packet
|
||||
// новый packet
|
||||
nPacketLen = 0;
|
||||
}
|
||||
}
|
||||
@ -909,7 +909,7 @@ namespace Jpeg2000
|
||||
}
|
||||
|
||||
int nStore = pCodingParams->nPPMStore;
|
||||
if (nZppm == 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (nZppm == 0) // Первый PPM маркер
|
||||
{
|
||||
pCodingParams->pPPMData = (unsigned char *)Malloc(nNppm * sizeof(unsigned char));
|
||||
if (!pCodingParams->pPPMData)
|
||||
@ -920,7 +920,7 @@ namespace Jpeg2000
|
||||
pCodingParams->pPPMDataFirst = pCodingParams->pPPMData;
|
||||
pCodingParams->nPPMLength = nNppm;
|
||||
}
|
||||
else // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else // Не первый PPM маркер
|
||||
{
|
||||
BYTE *pPPMData_new = (BYTE *)Malloc((nNppm + pCodingParams->nPPMStore) * sizeof(unsigned char));
|
||||
if (!pPPMData_new)
|
||||
@ -936,14 +936,14 @@ namespace Jpeg2000
|
||||
pCodingParams->nPPMLength = nNppm + pCodingParams->nPPMStore;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Считываем остальные данные
|
||||
int nIndex;
|
||||
for (nIndex = nNppm; nIndex > 0; nIndex--)
|
||||
{
|
||||
pCodingParams->pPPMData[nStore] = pStream->Read(1);
|
||||
nStore++;
|
||||
nLen--;
|
||||
if (nLen == 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> packet header <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (nLen == 0) // Случай, когда packet header не закончился в текущем маркере, но закончится в следующем
|
||||
break;
|
||||
}
|
||||
pCodingParams->nPPMPrevious = nIndex - 1;
|
||||
@ -961,7 +961,7 @@ namespace Jpeg2000
|
||||
int nZppt = pStream->Read(1); // Zppt
|
||||
pTCP->nPPT = 1;
|
||||
|
||||
if (nZppt == 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (nZppt == 0) // Первый PPT маркер
|
||||
{
|
||||
pTCP->pPPTData = (unsigned char *)Malloc((nLen - 3) * sizeof(unsigned char));
|
||||
if (!pTCP->pPPTData)
|
||||
@ -973,7 +973,7 @@ namespace Jpeg2000
|
||||
pTCP->nPPTStore = 0;
|
||||
pTCP->nPPTLength = nLen - 3;
|
||||
}
|
||||
else // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else // Не первый PPT маркер
|
||||
{
|
||||
BYTE *pPPTData_new = (unsigned char *)Malloc((nLen - 3 + pTCP->nPPTStore) * sizeof(unsigned char));
|
||||
if (!pPPTData_new)
|
||||
@ -1010,7 +1010,7 @@ namespace Jpeg2000
|
||||
pStream->Skip(2);
|
||||
|
||||
pStream->Write(pJ2k->nCurTileIndex, 2); // Isot
|
||||
pStream->Skip(4); // Psot (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> J2k_WriteSOD)
|
||||
pStream->Skip(4); // Psot (пока оставляем место, сюда пишем в функции J2k_WriteSOD)
|
||||
pStream->Write(0, 1); // TPsot
|
||||
pStream->Write(1, 1); // TNsot
|
||||
|
||||
@ -1066,7 +1066,7 @@ namespace Jpeg2000
|
||||
|
||||
TileCodingParams *pTCP = &pCodingParams->pTCP[pJ2k->nCurTileIndex];
|
||||
|
||||
if (pTCP->nFirst == 1) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPT
|
||||
if (pTCP->nFirst == 1) // Инициализируем PPT
|
||||
{
|
||||
TileCompCodingParams *pTemp = pTCP->pTCCP;
|
||||
memcpy(pTCP, pJ2k->pDefaultTCP, sizeof(TileCodingParams));
|
||||
@ -1116,7 +1116,7 @@ namespace Jpeg2000
|
||||
|
||||
int nTileDataLen = TCD_EncodeTile(pTCD, pJ2k->nCurTileIndex, (BYTE*)pStream->GetOwner() + pStream->Tell(), pStream->GetLeftSize() - 2, pImageInfo);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Psot <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SOT
|
||||
// Записываем поле Psot в маркере SOT
|
||||
int nTotalLen = pStream->Tell() + nTileDataLen - pJ2k->nSOTStartPos;
|
||||
pStream->Seek(pJ2k->nSOTStartPos + 6);
|
||||
pStream->Write(nTotalLen, 4); // Psot
|
||||
@ -1134,7 +1134,7 @@ namespace Jpeg2000
|
||||
|
||||
if (nLen == pStream->GetLeftSize() + 1)
|
||||
{
|
||||
nTruncate = 1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> codestream
|
||||
nTruncate = 1; // Обрезанный codestream
|
||||
}
|
||||
|
||||
unsigned char *pData = (unsigned char *)Malloc((pJ2k->pTileLen[nCurTileIndex] + nLen) * sizeof(unsigned char));
|
||||
@ -1152,7 +1152,7 @@ namespace Jpeg2000
|
||||
unsigned char *pDataPointer = pData + pJ2k->pTileLen[nCurTileIndex];
|
||||
//for ( int nIndex = 0; nIndex < nLen; nIndex++ )
|
||||
//{
|
||||
// pDataPointer[nIndex] = pStream->Read( 1 ); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// pDataPointer[nIndex] = pStream->Read( 1 ); // Считываем закодированные данные текущего тайла
|
||||
//}
|
||||
|
||||
pStream->Read(pDataPointer, nLen);
|
||||
@ -1197,7 +1197,7 @@ namespace Jpeg2000
|
||||
int nLen = pStream->Read(2); // Lrgn
|
||||
int nCurComponent = pStream->Read(nComponentsCount <= 256 ? 1 : 2); // Crgn
|
||||
int nROIStyle = pStream->Read(1); // Srgn
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nROIStyle == 0
|
||||
// TO DO: Вставить проверку nROIStyle == 0
|
||||
pTCP->pTCCP[nCurComponent].nROIShift = pStream->Read(1); // SPrgn
|
||||
}
|
||||
|
||||
@ -1247,8 +1247,8 @@ namespace Jpeg2000
|
||||
}
|
||||
static void J2k_ReadUNK(J2kCodestream *pJ2k)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
// <EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// Предполагаем, что неизвестный маркер не пустой, а, значит,
|
||||
// у него следующие два байта - длина маркера.
|
||||
CReader *pStream = pJ2k->pStreamIO;
|
||||
int nLen = pStream->Read(2);
|
||||
|
||||
@ -1262,12 +1262,12 @@ namespace Jpeg2000
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Таблица связывающая прочтенный маркер - состояние декодера - действие(функция) декодера при прочтении данного маркера
|
||||
typedef struct TDecoderMSTableEntry
|
||||
{
|
||||
int nID; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nStates; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void(*pHandler) (J2kCodestream *pJ2k); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nID; // Значение маркера
|
||||
int nStates; // Состояние декодера, когда появляется данный маркер
|
||||
void(*pHandler) (J2kCodestream *pJ2k); // Действие связанное с данным маркером
|
||||
} DecoderMSTableEntry;
|
||||
|
||||
DecoderMSTableEntry c_aoJ2k_DecoderMSTable[] =
|
||||
@ -1317,7 +1317,7 @@ namespace Jpeg2000
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> J2K / JPT
|
||||
// Декодирование потоков J2K / JPT
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
J2kCodestream* J2k_CreateDecompress(PCommon pCodecInfo)
|
||||
@ -1381,7 +1381,7 @@ namespace Jpeg2000
|
||||
{
|
||||
if (pJ2k && pParameters)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodingParams
|
||||
// Создаем и инициализируем структуру CodingParams
|
||||
CodingParams *pCodingParams = (CodingParams*)Malloc(sizeof(CodingParams));
|
||||
if (!pCodingParams)
|
||||
{
|
||||
@ -1401,7 +1401,7 @@ namespace Jpeg2000
|
||||
|
||||
pJ2k->pStreamIO = pStream;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Создаем пустую картинку
|
||||
Image *pImage = Image_CreateEmpty();
|
||||
if (!pImage)
|
||||
{
|
||||
@ -1433,7 +1433,7 @@ namespace Jpeg2000
|
||||
return 0;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Проверяем ограничение на декодирование
|
||||
if (pEntry->nID == J2K_MS_SOT && pJ2k->pCodingParams->eLimitDecoding == declimLimitToMainHeader)
|
||||
{
|
||||
Event_Message(EVT_INFO, "Main Header decoded.\n");
|
||||
@ -1461,7 +1461,7 @@ namespace Jpeg2000
|
||||
pCodecInfo->nErrorCode = JP2_ERROR_NO_ERROR;
|
||||
break;
|
||||
}
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Проверяем не появилась ли ошибка
|
||||
if (JP2_ERROR_NO_ERROR != pCodecInfo->nErrorCode)
|
||||
{
|
||||
Image_Destroy(pImage);
|
||||
@ -1489,7 +1489,7 @@ namespace Jpeg2000
|
||||
|
||||
pJ2k->pStreamIO = pStream;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Создем пустую картинку
|
||||
Image *pImage = Image_CreateEmpty();
|
||||
if (!pImage)
|
||||
{
|
||||
@ -1499,10 +1499,10 @@ namespace Jpeg2000
|
||||
|
||||
pJ2k->nState = j2kstateMHSOC;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Инициализируем заголовок
|
||||
JPTMessageHeader oHeader;
|
||||
JPT_InitMessageHeader(&oHeader);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Читаем первый заголовок сообщения
|
||||
JPT_ReadMessageHeader(pCodecInfo, pStream, &oHeader);
|
||||
|
||||
int nPosition = pStream->Tell();
|
||||
@ -1574,7 +1574,7 @@ namespace Jpeg2000
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> J2K
|
||||
// Кодирование в поток J2K
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
J2kCodestream* J2k_CreateCompress(PCommon pCodecInfo)
|
||||
@ -1637,7 +1637,7 @@ namespace Jpeg2000
|
||||
return;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Coding parameters
|
||||
// Создаем и инициализируем структуру Coding parameters
|
||||
CodingParams *pCodingParams = (CodingParams*)Malloc(sizeof(CodingParams));
|
||||
if (!pCodingParams)
|
||||
{
|
||||
@ -1649,7 +1649,7 @@ namespace Jpeg2000
|
||||
pCodingParams->nXTilesCount = 1;
|
||||
pCodingParams->nYTilesCount = 1;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Копируем заданные параметры
|
||||
|
||||
pCodingParams->nDistoAlloc = pParameters->nDistoAlloc;
|
||||
pCodingParams->nFixedAlloc = pParameters->nFixedAlloc;
|
||||
@ -1669,7 +1669,7 @@ namespace Jpeg2000
|
||||
memcpy(pCodingParams->pMatrix, pParameters->pMatrix, array_size);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
// Создаем ли файл индексации?
|
||||
pCodingParams->nIndexOn = pParameters->nIndexOn;
|
||||
if (pCodingParams->nIndexOn)
|
||||
{
|
||||
@ -1702,7 +1702,7 @@ namespace Jpeg2000
|
||||
}
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вычисляем другие параметры кодирования
|
||||
|
||||
if (pParameters->bTileSizeOn)
|
||||
{
|
||||
@ -1790,7 +1790,7 @@ namespace Jpeg2000
|
||||
for (int nComponentIndex = 0; nComponentIndex < pImage->nCsiz; nComponentIndex++)
|
||||
{
|
||||
TileCompCodingParams *pTCCP = &pTCP->pTCCP[nComponentIndex];
|
||||
pTCCP->nCodingStyle = pParameters->nCodingStyle & 0x01; // 0 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> || 1 => <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pTCCP->nCodingStyle = pParameters->nCodingStyle & 0x01; // 0 => одна область || 1 => призвольное количество областей
|
||||
pTCCP->nResolutionsCount = pParameters->nResolutionsCount;
|
||||
pTCCP->nCodeBlockWidth = FloorLog2(pParameters->nCodeBlockWidthInit);
|
||||
pTCCP->nCodeBlockHeight = FloorLog2(pParameters->nCodeBlockHeightInit);
|
||||
@ -1959,7 +1959,7 @@ namespace Jpeg2000
|
||||
{
|
||||
for (int nResolutionIndex = 0; nResolutionIndex < pImageInfo->nDecompCount + 1; nResolutionIndex++)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XRsiz, YRsiz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Предполагаем, что значения XRsiz, YRsiz одинаковые для всех компонент
|
||||
int nX0 = pImageInfo->nXTOsiz + nTileIndex - (int)floor((float)nTileIndex / (float)pImageInfo->nXTilesCount) * pImageInfo->nXTilesCount * pImageInfo->nXTsiz;
|
||||
int nY0 = pImageInfo->nXTOsiz + (int)floor((float)nTileIndex / (float)pImageInfo->nXTilesCount) * pImageInfo->nYTsiz;
|
||||
int nX1 = nX0 + pImageInfo->nXTsiz;
|
||||
@ -2001,7 +2001,7 @@ namespace Jpeg2000
|
||||
}
|
||||
else if (pImageInfo->eProgOrder == poPCRL)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XRsiz, YRsiz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Предполагаем, что значения XRsiz, YRsiz одинаковые для всех компонент
|
||||
int nX0 = pImageInfo->nXTOsiz + nTileIndex - (int)floor((float)nTileIndex / (float)pImageInfo->nXTilesCount) * pImageInfo->nXTilesCount * pImageInfo->nXTsiz;
|
||||
int nY0 = pImageInfo->nXTOsiz + (int)floor((float)nTileIndex / (float)pImageInfo->nXTilesCount) * pImageInfo->nYTsiz;
|
||||
int nX1 = nX0 + pImageInfo->nXTsiz;
|
||||
@ -2047,7 +2047,7 @@ namespace Jpeg2000
|
||||
{
|
||||
for (int nComponentIndex = 0; nComponentIndex < pImageInfo->nCompCount; nComponentIndex++)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XRsiz, YRsiz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Предполагаем, что значения XRsiz, YRsiz одинаковые для всех компонент
|
||||
int nX0 = pImageInfo->nXTOsiz + nTileIndex - (int)floor((float)nTileIndex / (float)pImageInfo->nXTilesCount) * pImageInfo->nXTilesCount * pImageInfo->nXTsiz;
|
||||
int nY0 = pImageInfo->nXTOsiz + (int)floor((float)nTileIndex / (float)pImageInfo->nXTilesCount) * pImageInfo->nYTsiz;
|
||||
int nX1 = nX0 + pImageInfo->nXTsiz;
|
||||
@ -2113,7 +2113,7 @@ namespace Jpeg2000
|
||||
}
|
||||
#endif
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Индексация
|
||||
ImageInfo *pImageInfo = pJ2k->pImageInfo;
|
||||
if (pImageInfo && pCodingParams->nIndexOn)
|
||||
{
|
||||
@ -2151,24 +2151,24 @@ namespace Jpeg2000
|
||||
J2k_WriteCOM(pJ2k);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Индексация
|
||||
if (pImageInfo && pImageInfo->nIndexOn)
|
||||
{
|
||||
pImageInfo->nMainHeadEnd = pStream->Tell() - 1;
|
||||
}
|
||||
//-------------
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Создаем струкртуру для кодирования тайлов
|
||||
TCD *pTCD = TCD_Create(pJ2k->pCodecInfo);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// Кодируем каждый тайл
|
||||
for (int nTileIndex = 0; nTileIndex < pCodingParams->nXTilesCount * pCodingParams->nYTilesCount; nTileIndex++)
|
||||
{
|
||||
Event_Message(EVT_INFO, "tile number %d / %d\n", nTileIndex + 1, pCodingParams->nXTilesCount * pCodingParams->nYTilesCount);
|
||||
|
||||
pJ2k->nCurTileIndex = nTileIndex;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Инициализируем перед кодированием
|
||||
if (0 == nTileIndex)
|
||||
{
|
||||
TCD_MallocEncode(pTCD, pImage, pCodingParams, pJ2k->nCurTileIndex);
|
||||
@ -2177,14 +2177,14 @@ namespace Jpeg2000
|
||||
{
|
||||
TCD_InitEncode(pTCD, pImage, pCodingParams, pJ2k->nCurTileIndex);
|
||||
}
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Проверяем ошибку
|
||||
if (JP2_ERROR_NO_ERROR != pTCD->pCodecInfo->nErrorCode)
|
||||
{
|
||||
TCD_Destroy(pTCD);
|
||||
return false;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Индексация
|
||||
if (pImageInfo && pImageInfo->nIndexOn)
|
||||
{
|
||||
pImageInfo->pTile[pJ2k->nCurTileIndex].nTileCount = pJ2k->nCurTileIndex;
|
||||
@ -2206,7 +2206,7 @@ namespace Jpeg2000
|
||||
|
||||
J2k_WriteSOD(pJ2k, pTCD);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Индексация
|
||||
if (pImageInfo && pImageInfo->nIndexOn)
|
||||
{
|
||||
pImageInfo->pTile[pJ2k->nCurTileIndex].nEndPos = pStream->Tell() + pJ2k->nPosCorrection - 1;
|
||||
@ -2215,13 +2215,13 @@ namespace Jpeg2000
|
||||
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Удаляем структуру кодирующую тайлы
|
||||
TCD_FreeEncode(pTCD);
|
||||
TCD_Destroy(pTCD);
|
||||
|
||||
J2k_WriteEOC(pJ2k);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Создаем файл с индексацией
|
||||
if (pImageInfo && pImageInfo->nIndexOn)
|
||||
{
|
||||
if (!J2k_CreateIndex(pJ2k, pStream, pImageInfo, sIndex))
|
||||
|
||||
@ -1,18 +1,18 @@
|
||||
#include "J2kFile.h"
|
||||
#include "J2kFile.h"
|
||||
#include "J2kIncludes.h"
|
||||
#include "Utils.h"
|
||||
|
||||
namespace Jpeg2000
|
||||
{
|
||||
extern Image* Jp2ToImage(const std::wstring& wsFileName, DecoderParams* pDecoderParams);
|
||||
extern Image* J2kToImage(const std::wstring& wsFileName, DecoderParams* pDecoderParams);
|
||||
extern Image* JptToImage(const std::wstring& wsFileName, DecoderParams* pDecoderParams);
|
||||
extern Image* Mj2ToImage(const std::wstring& wsFileName, DecoderParams* pDecoderParams);
|
||||
extern bool ImageToJ2k(Image *pImage, const std::wstring& wsFilePath, EncoderParams* pEncoderParams);
|
||||
extern bool ImageToJ2p(Image *pImage, const std::wstring& wsFilePath, EncoderParams* pEncoderParams);
|
||||
//extern Image* Jp2ToImage(const std::wstring& wsFileName, DecoderParams* pDecoderParams);
|
||||
//extern Image* J2kToImage(const std::wstring& wsFileName, DecoderParams* pDecoderParams);
|
||||
//extern Image* JptToImage(const std::wstring& wsFileName, DecoderParams* pDecoderParams);
|
||||
//extern Image* Mj2ToImage(const std::wstring& wsFileName, DecoderParams* pDecoderParams);
|
||||
//extern bool ImageToJ2k(Image *pImage, const std::wstring& wsFilePath, EncoderParams* pEncoderParams);
|
||||
//extern bool ImageToJ2p(Image *pImage, const std::wstring& wsFilePath, EncoderParams* pEncoderParams);
|
||||
|
||||
extern void Image_Destroy(Image *pImage);
|
||||
extern Image* Image_Create(int nComponentsCount, ImageComponentParams *pCompParams, ColorSpace eColorSpace);
|
||||
//extern void Image_Destroy(Image *pImage);
|
||||
//extern Image* Image_Create(int nComponentsCount, ImageComponentParams *pCompParams, ColorSpace eColorSpace);
|
||||
|
||||
void* Malloc(size_t nSize)
|
||||
{
|
||||
@ -90,7 +90,7 @@ namespace Jpeg2000
|
||||
|
||||
DecoderParams oParameters;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Установим стандартные значения параметров
|
||||
ApplyDecoderOptions(&oParameters, wsXmlOptions);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
@ -149,7 +149,7 @@ namespace Jpeg2000
|
||||
unsigned char* pBufferPtr = (unsigned char*)pData;
|
||||
long nCreatedBufferSize = nBufferSize;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> pBufferPtr
|
||||
// Пишем данные в pBufferPtr
|
||||
if (pImage->nCsiz == 3 && pImage->pComponents[0].nXRsiz == pImage->pComponents[1].nXRsiz && pImage->pComponents[1].nXRsiz == pImage->pComponents[2].nXRsiz
|
||||
&& pImage->pComponents[0].nYRsiz == pImage->pComponents[1].nYRsiz && pImage->pComponents[1].nYRsiz == pImage->pComponents[2].nYRsiz
|
||||
&& pImage->pComponents[0].nPrecision == pImage->pComponents[1].nPrecision && pImage->pComponents[1].nPrecision == pImage->pComponents[2].nPrecision)
|
||||
@ -216,7 +216,7 @@ namespace Jpeg2000
|
||||
}
|
||||
bool CJ2kFile::Save(CBgraFrame* pFrame, const std::wstring& wsDstPath, const std::wstring& wsXmlOptions)
|
||||
{
|
||||
// TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// TODO: Запись не реализована, надо доделать.
|
||||
return false;
|
||||
|
||||
if (!pFrame)
|
||||
@ -227,12 +227,12 @@ namespace Jpeg2000
|
||||
BYTE* pSourceBuffer = pFrame->get_Data();
|
||||
LONG lBufferSize = 4 * lWidth * lHeight;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Xml <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Далее обрабатываем Xml с параметрами компрессии
|
||||
EncoderParams oParameters;
|
||||
int nFormat = ApplyEncoderOptions(&oParameters, wsXmlOptions);
|
||||
|
||||
// TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ImageComponentParams aComponentParams[3]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (RGB)
|
||||
// TODO: Добавить возможность записи альфа-канала
|
||||
ImageComponentParams aComponentParams[3]; // Пока пусть будет максимально три компоненты (RGB)
|
||||
Image *pImage = NULL;
|
||||
int nComponentsCount = oParameters.nComponentsCount;
|
||||
|
||||
@ -248,7 +248,7 @@ namespace Jpeg2000
|
||||
aComponentParams[nIndex].nHeight = (int)lHeight;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Image
|
||||
// Создаем структуру Image
|
||||
pImage = Image_Create(nComponentsCount, &aComponentParams[0], csRGB);
|
||||
if (!pImage)
|
||||
return false;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// J2kFile.h : Declaration of the CJ2kFile
|
||||
// J2kFile.h : Declaration of the CJ2kFile
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -23,7 +23,7 @@ namespace Jpeg2000
|
||||
pParameters->nReduce = 0;
|
||||
pParameters->nLayer = 0;
|
||||
|
||||
// TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TODO: Сделать чтение параметров декодирования
|
||||
//if (sXml.GetLength() > 0)
|
||||
//{
|
||||
// XmlUtils::CXmlNode oMainNode;
|
||||
@ -64,20 +64,20 @@ namespace Jpeg2000
|
||||
long ApplyEncoderOptions(EncoderParams *pParameters, const std::wstring& sXml)
|
||||
{
|
||||
int nFormat = 0; // J2k
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Сначала выставляем стандартные значения параметров
|
||||
memset(pParameters, 0, sizeof(EncoderParams));
|
||||
pParameters->nComponentsCount = 3;
|
||||
pParameters->nResolutionsCount = 6;
|
||||
pParameters->nCodeBlockHeightInit = 64;
|
||||
pParameters->nCodeBlockWidthInit = 64;
|
||||
pParameters->eProgOrder = poLRCP;
|
||||
pParameters->nROIComponentIndex = -1; // <EFBFBD><EFBFBD><EFBFBD> ROI
|
||||
pParameters->nROIComponentIndex = -1; // Нет ROI
|
||||
pParameters->nSubSamplingDx = 1;
|
||||
pParameters->nSubSamplingDy = 1;
|
||||
pParameters->bTileSizeOn = false;
|
||||
pParameters->sComment = "Manufactured by Online Media Technologies Ltd.";
|
||||
|
||||
// TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TODO: Сделать чтение параметров кодирования
|
||||
//if (sXml.GetLength() > 0)
|
||||
//{
|
||||
// XmlUtils::CXmlNode oMainNode;
|
||||
@ -187,7 +187,7 @@ namespace Jpeg2000
|
||||
// // SOPmarker
|
||||
// if (oSaveNode.GetNode(_T("SOPmarker"), oCurNode))
|
||||
// {
|
||||
// // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ImageInfo
|
||||
// // Пока отключим, потом надо будет добавить - для этого нужно выделять память для стрктуры ImageInfo
|
||||
// //pParameters->nCodingStyle |= 0x02;
|
||||
// }
|
||||
|
||||
@ -211,7 +211,7 @@ namespace Jpeg2000
|
||||
// if (oSaveNode.GetNode(_T("Comment"), oCurNode))
|
||||
// {
|
||||
// sValue = oCurNode.GetAttribute(_T("value"));
|
||||
// // TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// // TO DO: Неправильное копирование строки
|
||||
// USES_CONVERSION;
|
||||
// pParameters->sComment = W2A(sValue.GetBuffer());
|
||||
// }
|
||||
@ -320,13 +320,13 @@ namespace Jpeg2000
|
||||
//}
|
||||
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Проверим кооректность введенных параметров
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nDistoAlloc, nFixedQuality, nFixedAlloc <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Параметры nDistoAlloc, nFixedQuality, nFixedAlloc нельзя использовать вместе
|
||||
if ((pParameters->nDistoAlloc || pParameters->nFixedAlloc || pParameters->nFixedQuality) && (!(pParameters->nDistoAlloc ^ pParameters->nFixedAlloc ^ pParameters->nFixedQuality)))
|
||||
return -1;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Если параметры не заданы, тогда по умолчанию ставим компрессию без потерь
|
||||
if (0 == pParameters->nLayersCount)
|
||||
{
|
||||
pParameters->afRates[0] = 0;
|
||||
@ -340,7 +340,7 @@ namespace Jpeg2000
|
||||
{
|
||||
if (-1 == pParameters->aoPOC[nIndex].ePpoc)
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Выдать ошибку, что порядок не задан
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
#include "ArithmeticCoder.h"
|
||||
@ -59,7 +59,7 @@ namespace Jpeg2000
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Image *pImage = Jp2_Decode((Jp2Stream*)pDInfo->pJp2, pStream); // <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pImage = NULL
|
||||
Image *pImage = Jp2_Decode((Jp2Stream*)pDInfo->pJp2, pStream); // в случае ошибки pImage = NULL
|
||||
delete (pStream);
|
||||
Jp2_DestroyDecompress((Jp2Stream*)pDInfo->pJp2);
|
||||
|
||||
@ -100,7 +100,7 @@ namespace Jpeg2000
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Image *pImage = J2k_Decode((J2kCodestream*)pDInfo->pJ2k, pStream); // <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pImage = NULL
|
||||
Image *pImage = J2k_Decode((J2kCodestream*)pDInfo->pJ2k, pStream); // в случае ошибки pImage = NULL
|
||||
delete (pStream);
|
||||
J2k_DestroyDecompress((J2kCodestream*)pDInfo->pJ2k);
|
||||
|
||||
@ -141,7 +141,7 @@ namespace Jpeg2000
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Image *pImage = J2k_DecodeJptStream((J2kCodestream*)pDInfo->pJ2k, pStream); // <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pImage = NULL
|
||||
Image *pImage = J2k_DecodeJptStream((J2kCodestream*)pDInfo->pJ2k, pStream); // в случае ошибки pImage = NULL
|
||||
delete (pStream);
|
||||
J2k_DestroyDecompress((J2kCodestream*)pDInfo->pJ2k);
|
||||
|
||||
@ -181,7 +181,7 @@ namespace Jpeg2000
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Image *pImage = Mj2_Decode((Mj2_Movie*)pDInfo->pMj2, pStream); // <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pImage = NULL
|
||||
Image *pImage = Mj2_Decode((Mj2_Movie*)pDInfo->pMj2, pStream); // в случае ошибки pImage = NULL
|
||||
delete (pStream);
|
||||
Mj2_DestroyDecompress((Mj2_Movie*)pDInfo->pMj2);
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "Types.h"
|
||||
@ -8,7 +8,7 @@
|
||||
namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
static bool Jp2_ReadBoxHeader(PCommon pCodecInfo, CReader *pStream, Jp2Box *pBox)
|
||||
{
|
||||
@ -111,7 +111,7 @@ namespace Jpeg2000
|
||||
pStream->Write(pJp2->nWidth, 4); // WIDTH
|
||||
pStream->Write(pJp2->nComponentsCount, 2); // NC
|
||||
pStream->Write(pJp2->nBPC, 1); // BPC
|
||||
pStream->Write(pJp2->nCompressionType, 1); // C ( <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 7 )
|
||||
pStream->Write(pJp2->nCompressionType, 1); // C ( это значение всегда равно 7 )
|
||||
pStream->Write(pJp2->nColorSpaceUnk, 1); // UnkC, colorspace unknown
|
||||
pStream->Write(pJp2->nIPR, 1); // IPR
|
||||
|
||||
@ -228,12 +228,13 @@ namespace Jpeg2000
|
||||
{
|
||||
pJp2->nEnumCS = pStream->Read(4); // EnumCS
|
||||
|
||||
pJp2->oColor.has_colr = TRUE;
|
||||
pJp2->oColor.has_colr = true;
|
||||
}
|
||||
else if (pJp2->nMethod == 2) {
|
||||
else if (pJp2->nMethod == 2)
|
||||
{
|
||||
/* ICC profile */
|
||||
__int32 it_icc_value = 0;
|
||||
__int32 icc_len = oBox.nLength - 3;
|
||||
int it_icc_value = 0;
|
||||
int icc_len = oBox.nLength - 3;
|
||||
|
||||
pJp2->oColor.icc_profile_len = icc_len;
|
||||
pJp2->oColor.icc_profile_buf = (BYTE*)Malloc(icc_len);
|
||||
@ -249,14 +250,14 @@ namespace Jpeg2000
|
||||
pJp2->oColor.icc_profile_buf[it_icc_value] = (BYTE)pStream->Read(1); /* icc values */
|
||||
}
|
||||
|
||||
pJp2->oColor.has_colr = TRUE;
|
||||
pJp2->oColor.has_colr = true;
|
||||
}
|
||||
else// if (jp2->meth > 2)
|
||||
{
|
||||
/* ISO/IEC 15444-1:2004 (E), Table I.9 <EFBFBD> Legal METH values:
|
||||
/* ISO/IEC 15444-1:2004 (E), Table I.9 Legal METH values:
|
||||
conforming JP2 reader shall ignore the entire Colour Specification box.*/
|
||||
//"COLR BOX meth value is not a regular value (%d), so we will ignore the entire Colour Specification box. \n", jp2->meth);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PROFILE
|
||||
// Пропускаем PROFILE
|
||||
int nSkipLen = oBox.nInitPos + oBox.nLength - pStream->Tell();
|
||||
if (nSkipLen < 0)
|
||||
{
|
||||
@ -363,8 +364,8 @@ namespace Jpeg2000
|
||||
{
|
||||
// return false;
|
||||
|
||||
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Box <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// По спецификации данный Box является необходимым, но мы все-таки
|
||||
// попробуем прочитать изображение со стандартными параметрами.
|
||||
|
||||
pStream->Seek(nCurPos);
|
||||
pJp2->nApprox = 0;
|
||||
@ -546,7 +547,7 @@ namespace Jpeg2000
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Jp2
|
||||
// Декодирование потока Jp2
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
void Jp2_DestroyDecompress(Jp2Stream *pJp2)
|
||||
{
|
||||
@ -596,27 +597,27 @@ namespace Jpeg2000
|
||||
|
||||
PCommon pCodecInfo = pJp2->pCodecInfo;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JP2
|
||||
// Декодируем JP2
|
||||
if (!Jp2_ReadStruct(pJp2, pStream))
|
||||
{
|
||||
Event_Message(EVT_ERROR, "Failed to decode jp2 structure\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> J2K
|
||||
// Декодируем J2K
|
||||
Image *pImage = J2k_Decode(pJp2->pJ2k, pStream);
|
||||
if (!pImage)
|
||||
{
|
||||
Event_Message(EVT_ERROR, "Failed to decode J2K image\n");
|
||||
}
|
||||
|
||||
////<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>..????
|
||||
////приведение цветовой схемы..????
|
||||
|
||||
return pImage;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> Jp2
|
||||
// Кодирование в поток Jp2
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
void Jp2_DestroyCompress(Jp2Stream *pJp2)
|
||||
{
|
||||
@ -700,7 +701,7 @@ namespace Jpeg2000
|
||||
if (nDepth0 != depth)
|
||||
pJp2->nBPC = 255;
|
||||
}
|
||||
pJp2->nCompressionType = 7; // C (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7)
|
||||
pJp2->nCompressionType = 7; // C (всегда 7)
|
||||
pJp2->nColorSpaceUnk = 0; // UnkC
|
||||
pJp2->nIPR = 0; // IRP
|
||||
|
||||
@ -722,7 +723,7 @@ namespace Jpeg2000
|
||||
if (pJp2->nMethod == 1)
|
||||
{
|
||||
if (pImage->eColorSpace == 1)
|
||||
pJp2->nEnumCS = 16; // sRGB ( 61966<EFBFBD>2<EFBFBD>1 )
|
||||
pJp2->nEnumCS = 16; // sRGB ( 61966–2–1 )
|
||||
else if (pImage->eColorSpace == 2)
|
||||
pJp2->nEnumCS = 17; // Greyscale
|
||||
else if (pImage->eColorSpace == 3)
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
|
||||
@ -12,15 +12,6 @@ namespace Jpeg2000
|
||||
{
|
||||
if (sFormatString != NULL)
|
||||
{
|
||||
char sMessage[MSG_SIZE]={};
|
||||
va_list sArg;
|
||||
|
||||
memset(sMessage, 0, MSG_SIZE);
|
||||
va_start(sArg, sFormatString);
|
||||
int nLength = (strlen(sFormatString) > MSG_SIZE) ? MSG_SIZE : strlen(sFormatString);
|
||||
vsprintf(sMessage, sFormatString, sArg);
|
||||
va_end(sArg);
|
||||
|
||||
// TODO: print sMessage/*, pCodecInfo->pClientData*/
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
#include "Reader.h"
|
||||
@ -6,7 +6,7 @@
|
||||
namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
static unsigned int JPT_ReadVBASInfo(CReader *pStream, unsigned int nValue)
|
||||
{
|
||||
@ -34,7 +34,7 @@ namespace Jpeg2000
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
void JPT_InitMessageHeader(JPTMessageHeader *pHeader)
|
||||
{
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
|
||||
namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Motion JPEG 2000 (MJ2)
|
||||
// Данные функции предназначены для чтения Motion JPEG 2000 (MJ2)
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
static bool Mj2_ReadBoxHeader(Mj2_Box* pBox, CReader * pStream)
|
||||
@ -104,7 +104,7 @@ namespace Jpeg2000
|
||||
|
||||
//>>>>
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MDAT
|
||||
// Достаем первую картинку в потоке MDAT
|
||||
Jp2Box oTempBox;
|
||||
Jp2_ReadBoxHeader(pMovie->pCodecInfo, pStream, &oTempBox);
|
||||
do
|
||||
@ -124,7 +124,7 @@ namespace Jpeg2000
|
||||
int nJ2kCodestreamOffset = pStream->Tell();
|
||||
int nJ2kCodestreamLength = oTempBox.nLength - 8;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> J2K
|
||||
// Декодируем J2K
|
||||
*ppImage = J2k_Decode(pMovie->pJ2k, pStream);
|
||||
if (!*ppImage)
|
||||
{
|
||||
@ -159,8 +159,8 @@ namespace Jpeg2000
|
||||
Event_Message(EVT_ERROR, "Error: Only Version 0 handled in MVHD box\n");
|
||||
}
|
||||
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD>. fcd15444-3.pdf <EFBFBD><EFBFBD><EFBFBD>.15
|
||||
// TO DO: Здесь в зависимости от версии разное число байт должно читаться
|
||||
// см. fcd15444-3.pdf стр.15
|
||||
|
||||
pMovie->unCreationTime = pStream->Read(4); // Creation Time
|
||||
pMovie->unModificationTime = pStream->Read(4); // Modification Time
|
||||
@ -206,8 +206,8 @@ namespace Jpeg2000
|
||||
return false;
|
||||
}
|
||||
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD>. fcd15444-3.pdf <EFBFBD><EFBFBD><EFBFBD>.16
|
||||
// TO DO: Здесь в зависимости от версии разное число байт должно читаться
|
||||
// см. fcd15444-3.pdf стр.16
|
||||
|
||||
if (0 != pStream->Read(1)) // Version = 0
|
||||
{
|
||||
@ -217,7 +217,7 @@ namespace Jpeg2000
|
||||
|
||||
int nFlag = pStream->Read(3);
|
||||
|
||||
if (!(1 == nFlag || 2 == nFlag || 3 == nFlag || 4 == nFlag)) // nFlags = 1, 2, 3 <EFBFBD><EFBFBD><EFBFBD> 4
|
||||
if (!(1 == nFlag || 2 == nFlag || 3 == nFlag || 4 == nFlag)) // nFlags = 1, 2, 3 или 4
|
||||
{
|
||||
Event_Message(EVT_ERROR, "Error with flag in TKHD box: Expected flag 1,2,3 or 4\n");
|
||||
return false;
|
||||
@ -268,7 +268,7 @@ namespace Jpeg2000
|
||||
return 1;
|
||||
}
|
||||
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Version = 1
|
||||
// TO DO: Сделать поодержку Version = 1
|
||||
if (0 != pStream->Read(1)) // Version = 0
|
||||
{
|
||||
Event_Message(EVT_ERROR, "Error: Only Version 0 handled in MDHD box\n");
|
||||
@ -486,9 +486,9 @@ namespace Jpeg2000
|
||||
return false;
|
||||
}
|
||||
|
||||
if (1 != pStream->Read(3)) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> flags = 1, <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (1 != pStream->Read(3)) // Если flags = 1, то медиа данные в файле
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Сделать нормальное чтение строк
|
||||
pTrack->pUrl[nUrlNum].anLocation[0] = pStream->Read(4);
|
||||
pTrack->pUrl[nUrlNum].anLocation[1] = pStream->Read(4);
|
||||
pTrack->pUrl[nUrlNum].anLocation[2] = pStream->Read(4);
|
||||
@ -525,9 +525,9 @@ namespace Jpeg2000
|
||||
return false;
|
||||
}
|
||||
|
||||
if (1 != pStream->Read(3)) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> flags = 1, <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (1 != pStream->Read(3)) // Если flags = 1, то медиа данные в файле
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Сделать нормальное чтение строк
|
||||
pTrack->pUrn[nUrnNum].anName[0] = pStream->Read(4);
|
||||
pTrack->pUrn[nUrnNum].anName[1] = pStream->Read(4);
|
||||
pTrack->pUrn[nUrnNum].anName[2] = pStream->Read(4);
|
||||
@ -778,7 +778,7 @@ namespace Jpeg2000
|
||||
|
||||
int nSampleSize = pStream->Read(4); // SampleSize
|
||||
|
||||
if (0 != nSampleSize) // <EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (0 != nSampleSize) // У всех самплов одинаковый размер
|
||||
{
|
||||
pTrack->unSameSampleSize = 1;
|
||||
|
||||
@ -857,7 +857,7 @@ namespace Jpeg2000
|
||||
|
||||
static bool Mj2_ReadSTCO(Mj2_TrackParams* pTrack, CReader * pStream)
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 'co64'
|
||||
// TO DO: Сделать чтение 'co64'
|
||||
Mj2_Box oBox;
|
||||
Mj2_ReadBoxHeader(&oBox, pStream);
|
||||
if (MJ2_STCO != oBox.nType)
|
||||
@ -1185,13 +1185,13 @@ namespace Jpeg2000
|
||||
}
|
||||
else if (1 == pTrack->nTrackType)
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Релизовать
|
||||
int nSkipLen = pStream->Read(4);
|
||||
pStream->Skip(nSkipLen - 4);
|
||||
}
|
||||
else if (2 == pTrack->nTrackType)
|
||||
{
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// TO DO: Реализовать
|
||||
int nSkipLen = pStream->Read(4);
|
||||
pStream->Skip(nSkipLen - 4);
|
||||
}
|
||||
@ -1403,7 +1403,7 @@ namespace Jpeg2000
|
||||
{
|
||||
case MJ2_MDAT:
|
||||
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> MDAT <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MOOV
|
||||
// TO DO: Связать данные в MDAT с данными MOOV
|
||||
if (!Mj2_ReadMDAT(pMovie, pStream, ppImage, oBox))
|
||||
return false;
|
||||
|
||||
@ -1440,7 +1440,7 @@ namespace Jpeg2000
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Mj2
|
||||
// Декодирование потока Mj2
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
void Mj2_DestroyDecompress(Mj2_Movie* pMovie)
|
||||
{
|
||||
@ -1531,7 +1531,7 @@ namespace Jpeg2000
|
||||
PCommon pCodecInfo = pMovie->pCodecInfo;
|
||||
|
||||
Image *pImage = NULL;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JP2
|
||||
// Декодируем JP2
|
||||
if (!Mj2_ReadStruct(pMovie, pStream, &pImage))
|
||||
{
|
||||
Event_Message(EVT_ERROR, "Failed to decode jp2 structure\n");
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
#include "Utils.h"
|
||||
@ -6,7 +6,7 @@
|
||||
namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
static bool PI_NextLRCP(PacketIterator *pPI)
|
||||
{
|
||||
@ -53,7 +53,6 @@ namespace Jpeg2000
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool PI_NextRLCP(PacketIterator *pPI)
|
||||
{
|
||||
PacketComponent *pComponent = NULL;
|
||||
@ -99,12 +98,12 @@ namespace Jpeg2000
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool PI_NextRPCL(PacketIterator *pPI)
|
||||
{
|
||||
PacketComponent *pComponent = NULL;
|
||||
PacketResolution *pResolution = NULL;
|
||||
long nIndex = 0;
|
||||
int nLevel, nTileResX0, nTileResY0, nTileResX1, nTileResY1, nResPX, nResPY, nPCR_i, nPCR_j;
|
||||
|
||||
if (!pPI->nFirst)
|
||||
{
|
||||
@ -144,21 +143,21 @@ namespace Jpeg2000
|
||||
continue;
|
||||
}
|
||||
pResolution = &pComponent->pResolutions[pPI->nIndexResolution];
|
||||
int nLevel = pComponent->nResolutionsCount - 1 - pPI->nIndexResolution;
|
||||
nLevel = pComponent->nResolutionsCount - 1 - pPI->nIndexResolution;
|
||||
|
||||
int nTileResX0 = CeilDiv(pPI->nTileX0, pComponent->nDx << nLevel);
|
||||
int nTileResY0 = CeilDiv(pPI->nTileY0, pComponent->nDy << nLevel);
|
||||
int nTileResX1 = CeilDiv(pPI->nTileX1, pComponent->nDx << nLevel);
|
||||
int nTileResY1 = CeilDiv(pPI->nTileY1, pComponent->nDy << nLevel);
|
||||
nTileResX0 = CeilDiv(pPI->nTileX0, pComponent->nDx << nLevel);
|
||||
nTileResY0 = CeilDiv(pPI->nTileY0, pComponent->nDy << nLevel);
|
||||
nTileResX1 = CeilDiv(pPI->nTileX1, pComponent->nDx << nLevel);
|
||||
nTileResY1 = CeilDiv(pPI->nTileY1, pComponent->nDy << nLevel);
|
||||
|
||||
int nResPX = pResolution->nDx + nLevel;
|
||||
int nResPY = pResolution->nDy + nLevel;
|
||||
nResPX = pResolution->nDx + nLevel;
|
||||
nResPY = pResolution->nDy + nLevel;
|
||||
|
||||
if ((!(pPI->nX % (pComponent->nDx << nResPX) == 0) || (pPI->nX == pPI->nTileX0 && (nTileResX0 << nLevel) % (1 << nResPX))))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (1 << nResPX)
|
||||
// TO DO: Проверить здесь последнее деление на (1 << nResPX)
|
||||
if ((!(pPI->nY % (pComponent->nDy << nResPY) == 0) || (pPI->nY == pPI->nTileY0 && (nTileResY0 << nLevel) % (1 << nResPX))))
|
||||
{
|
||||
continue;
|
||||
@ -171,8 +170,8 @@ namespace Jpeg2000
|
||||
if ((nTileResX0 == nTileResX1) || (nTileResY0 == nTileResY1))
|
||||
continue;
|
||||
|
||||
int nPCR_i = FloorDivPow2(CeilDiv(pPI->nX, pComponent->nDx << nLevel), pResolution->nDx) - FloorDivPow2(nTileResX0, pResolution->nDx);
|
||||
int nPCR_j = FloorDivPow2(CeilDiv(pPI->nY, pComponent->nDy << nLevel), pResolution->nDy) - FloorDivPow2(nTileResY0, pResolution->nDy);
|
||||
nPCR_i = FloorDivPow2(CeilDiv(pPI->nX, pComponent->nDx << nLevel), pResolution->nDx) - FloorDivPow2(nTileResX0, pResolution->nDx);
|
||||
nPCR_j = FloorDivPow2(CeilDiv(pPI->nY, pComponent->nDy << nLevel), pResolution->nDy) - FloorDivPow2(nTileResY0, pResolution->nDy);
|
||||
pPI->nIndexPrecinct = nPCR_i + nPCR_j * pResolution->nWidth;
|
||||
|
||||
for (pPI->nIndexLayer = 0; pPI->nIndexLayer < pPI->oPOC.nLYEpoc; pPI->nIndexLayer++)
|
||||
@ -192,12 +191,12 @@ namespace Jpeg2000
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool PI_NextPCRL(PacketIterator *pPI)
|
||||
{
|
||||
PacketComponent *pComponent = NULL;
|
||||
PacketResolution *pResolution = NULL;
|
||||
long nIndex = 0;
|
||||
int nLevel, nTileResX0, nTileResY0, nTileResX1, nTileResY1, nResPX, nResPY, nPRC_i, nPRC_j;
|
||||
|
||||
if (!pPI->nFirst)
|
||||
{
|
||||
@ -234,21 +233,21 @@ namespace Jpeg2000
|
||||
for (pPI->nIndexResolution = pPI->oPOC.nRSpoc; pPI->nIndexResolution < min(pPI->oPOC.nREpoc, pComponent->nResolutionsCount); pPI->nIndexResolution++)
|
||||
{
|
||||
pResolution = &pComponent->pResolutions[pPI->nIndexResolution];
|
||||
int nLevel = pComponent->nResolutionsCount - 1 - pPI->nIndexResolution;
|
||||
nLevel = pComponent->nResolutionsCount - 1 - pPI->nIndexResolution;
|
||||
|
||||
int nTileResX0 = CeilDiv(pPI->nTileX0, pComponent->nDx << nLevel);
|
||||
int nTileResY0 = CeilDiv(pPI->nTileY0, pComponent->nDy << nLevel);
|
||||
int nTileResX1 = CeilDiv(pPI->nTileX1, pComponent->nDx << nLevel);
|
||||
int nTileResY1 = CeilDiv(pPI->nTileY1, pComponent->nDy << nLevel);
|
||||
nTileResX0 = CeilDiv(pPI->nTileX0, pComponent->nDx << nLevel);
|
||||
nTileResY0 = CeilDiv(pPI->nTileY0, pComponent->nDy << nLevel);
|
||||
nTileResX1 = CeilDiv(pPI->nTileX1, pComponent->nDx << nLevel);
|
||||
nTileResY1 = CeilDiv(pPI->nTileY1, pComponent->nDy << nLevel);
|
||||
|
||||
int nResPX = pResolution->nDx + nLevel;
|
||||
int nResPY = pResolution->nDy + nLevel;
|
||||
nResPX = pResolution->nDx + nLevel;
|
||||
nResPY = pResolution->nDy + nLevel;
|
||||
|
||||
if ((!(pPI->nX % (pComponent->nDx << nResPX) == 0) || (pPI->nX == pPI->nTileX0 && (nTileResX0 << nLevel) % (1 << nResPX))))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (1 << nResPX)
|
||||
// TO DO: Проверить здесь последнее деление на (1 << nResPX)
|
||||
if ((!(pPI->nY % (pComponent->nDy << nResPY) == 0) || (pPI->nY == pPI->nTileY0 && (nTileResY0 << nLevel) % (1 << nResPX))))
|
||||
{
|
||||
continue;
|
||||
@ -261,8 +260,8 @@ namespace Jpeg2000
|
||||
if ((nTileResX0 == nTileResX1) || (nTileResY0 == nTileResY1))
|
||||
continue;
|
||||
|
||||
int nPRC_i = FloorDivPow2(CeilDiv(pPI->nX, pComponent->nDx << nLevel), pResolution->nDx) - FloorDivPow2(nTileResX0, pResolution->nDx);
|
||||
int nPRC_j = FloorDivPow2(CeilDiv(pPI->nY, pComponent->nDy << nLevel), pResolution->nDy) - FloorDivPow2(nTileResY0, pResolution->nDy);
|
||||
nPRC_i = FloorDivPow2(CeilDiv(pPI->nX, pComponent->nDx << nLevel), pResolution->nDx) - FloorDivPow2(nTileResX0, pResolution->nDx);
|
||||
nPRC_j = FloorDivPow2(CeilDiv(pPI->nY, pComponent->nDy << nLevel), pResolution->nDy) - FloorDivPow2(nTileResY0, pResolution->nDy);
|
||||
pPI->nIndexPrecinct = nPRC_i + nPRC_j * pResolution->nWidth;
|
||||
|
||||
for (pPI->nIndexLayer = 0; pPI->nIndexLayer < pPI->oPOC.nLYEpoc; pPI->nIndexLayer++)
|
||||
@ -282,12 +281,12 @@ namespace Jpeg2000
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool PI_NextCPRL(PacketIterator *pPI)
|
||||
{
|
||||
PacketComponent *pComponent = NULL;
|
||||
PacketResolution *pResolution = NULL;
|
||||
long nIndex = 0;
|
||||
int nLevel, nTileResX0, nTileResY0, nTileResX1, nTileResY1, nResPX, nResPY, nPRC_i, nPRC_j;
|
||||
|
||||
if (!pPI->nFirst)
|
||||
{
|
||||
@ -320,20 +319,20 @@ namespace Jpeg2000
|
||||
for (pPI->nIndexResolution = pPI->oPOC.nRSpoc; pPI->nIndexResolution < min(pPI->oPOC.nREpoc, pComponent->nResolutionsCount); pPI->nIndexResolution++)
|
||||
{
|
||||
pResolution = &pComponent->pResolutions[pPI->nIndexResolution];
|
||||
int nLevel = pComponent->nResolutionsCount - 1 - pPI->nIndexResolution;
|
||||
nLevel = pComponent->nResolutionsCount - 1 - pPI->nIndexResolution;
|
||||
|
||||
int nTileResX0 = CeilDiv(pPI->nTileX0, pComponent->nDx << nLevel);
|
||||
int nTileResY0 = CeilDiv(pPI->nTileY0, pComponent->nDy << nLevel);
|
||||
int nTileResX1 = CeilDiv(pPI->nTileX1, pComponent->nDx << nLevel);
|
||||
int nTileResY1 = CeilDiv(pPI->nTileY1, pComponent->nDy << nLevel);
|
||||
int nResPX = pResolution->nDx + nLevel;
|
||||
int nResPY = pResolution->nDy + nLevel;
|
||||
nTileResX0 = CeilDiv(pPI->nTileX0, pComponent->nDx << nLevel);
|
||||
nTileResY0 = CeilDiv(pPI->nTileY0, pComponent->nDy << nLevel);
|
||||
nTileResX1 = CeilDiv(pPI->nTileX1, pComponent->nDx << nLevel);
|
||||
nTileResY1 = CeilDiv(pPI->nTileY1, pComponent->nDy << nLevel);
|
||||
nResPX = pResolution->nDx + nLevel;
|
||||
nResPY = pResolution->nDy + nLevel;
|
||||
|
||||
if ((!(pPI->nX % (pComponent->nDx << nResPX) == 0) || (pPI->nX == pPI->nTileX0 && (nTileResX0 << nLevel) % (1 << nResPX))))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (1 << nResPX)
|
||||
// TO DO: Проверить здесь последнее деление на (1 << nResPX)
|
||||
if ((!(pPI->nY % (pComponent->nDy << nResPY) == 0) || (pPI->nY == pPI->nTileY0 && (nTileResY0 << nLevel) % (1 << nResPX))))
|
||||
{
|
||||
continue;
|
||||
@ -346,8 +345,8 @@ namespace Jpeg2000
|
||||
if ((nTileResX0 == nTileResX1) || (nTileResY0 == nTileResY1))
|
||||
continue;
|
||||
|
||||
int nPRC_i = FloorDivPow2(CeilDiv(pPI->nX, pComponent->nDx << nLevel), pResolution->nDx) - FloorDivPow2(nTileResX0, pResolution->nDx);
|
||||
int nPRC_j = FloorDivPow2(CeilDiv(pPI->nY, pComponent->nDy << nLevel), pResolution->nDy) - FloorDivPow2(nTileResY0, pResolution->nDy);
|
||||
nPRC_i = FloorDivPow2(CeilDiv(pPI->nX, pComponent->nDx << nLevel), pResolution->nDx) - FloorDivPow2(nTileResX0, pResolution->nDx);
|
||||
nPRC_j = FloorDivPow2(CeilDiv(pPI->nY, pComponent->nDy << nLevel), pResolution->nDy) - FloorDivPow2(nTileResY0, pResolution->nDy);
|
||||
pPI->nIndexPrecinct = nPRC_i + nPRC_j * pResolution->nWidth;
|
||||
|
||||
for (pPI->nIndexLayer = 0; pPI->nIndexLayer < pPI->oPOC.nLYEpoc; pPI->nIndexLayer++)
|
||||
@ -367,9 +366,8 @@ namespace Jpeg2000
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
void PI_Destroy(PacketIterator *pPI, CodingParams *pCodingParams, int nTileIndex)
|
||||
{
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
#include "Utils.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "Types.h"
|
||||
#include "Types.h"
|
||||
#include "Reader.h"
|
||||
|
||||
namespace Jpeg2000
|
||||
@ -42,7 +42,7 @@ namespace Jpeg2000
|
||||
return *pStream->pCurPos++;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
ByteIO* ByteIO_Open(PCommon pInfo, unsigned char *pBuffer, int nLength)
|
||||
{
|
||||
@ -62,7 +62,7 @@ namespace Jpeg2000
|
||||
}
|
||||
else if (!pBuffer && !nLength && pInfo)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Выделяем память для закодировнного изображения
|
||||
pStream->nMode = STREAM_WRITE;
|
||||
switch (pInfo->eCodecFormat)
|
||||
{
|
||||
@ -90,7 +90,7 @@ namespace Jpeg2000
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Инициализируем поток
|
||||
pStream->pStart = pStream->pBuffer;
|
||||
pStream->pEnd = pStream->pBuffer + pStream->nLength;
|
||||
pStream->pCurPos = pStream->pBuffer;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "../../common/File.h"
|
||||
|
||||
@ -8,18 +8,18 @@ namespace Jpeg2000
|
||||
// Byte input-output (Stream IO)
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define STREAM_READ 0x0001 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define STREAM_WRITE 0x0002 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define STREAM_READ 0x0001 // Поток открыт для чтения
|
||||
#define STREAM_WRITE 0x0002 // Поток открыт для записи
|
||||
|
||||
typedef struct TByteIO
|
||||
{
|
||||
int nMode; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( STREAM_READ <EFBFBD><EFBFBD><EFBFBD> OPJ_STREAM_WRITE )
|
||||
unsigned char *pBuffer; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nLength; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nMode; // Чтение или запись ( STREAM_READ или OPJ_STREAM_WRITE )
|
||||
unsigned char *pBuffer; // Указатель на начало буфера
|
||||
int nLength; // Размер буфера в байтах
|
||||
|
||||
unsigned char *pStart; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pEnd; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pCurPos; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pStart; // Указатель на начало потока
|
||||
unsigned char *pEnd; // Указатель на конец потока
|
||||
unsigned char *pCurPos; // Указатель не текущую позицию в потоке
|
||||
} ByteIO;
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Types.h"
|
||||
#include "JpgEvent.h"
|
||||
@ -11,7 +11,7 @@ namespace Jpeg2000
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
static int BitIO_ByteOut(BitIO *pBIO)
|
||||
{
|
||||
@ -61,7 +61,7 @@ namespace Jpeg2000
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
BitIO* BitIO_Create()
|
||||
{
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Stream.h"
|
||||
|
||||
@ -39,7 +39,7 @@ namespace Jpeg2000
|
||||
anVer[nLevelsCount + 1] = (anVer[nLevelsCount] + 1) / 2;
|
||||
pTree->nNodesCount += nCurLevelCount;
|
||||
++nLevelsCount;
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( nLevelsCount + 1 < 32 )
|
||||
// TO DO: ѕоставить дополнительную проверку ( nLevelsCount + 1 < 32 )
|
||||
} while (nCurLevelCount > 1);
|
||||
|
||||
// ADD
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "DWT.h"
|
||||
#include "ArithmeticCoder.h"
|
||||
@ -7,7 +7,7 @@
|
||||
namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
static int Tier1_GetContextIndexZC(Tier1 *pTier1, int nF, int nOrient)
|
||||
@ -273,6 +273,7 @@ namespace Jpeg2000
|
||||
{
|
||||
MQCoder *pMQCoder = pTier1->pMQCoder;
|
||||
int nFlag = nVSC ? ((*pFlags) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*pFlags);
|
||||
int nValue = 0;
|
||||
if (nPartial)
|
||||
{
|
||||
goto LABEL_PARTIAL;
|
||||
@ -280,7 +281,7 @@ namespace Jpeg2000
|
||||
if (!(*pFlags & (T1_SIG | T1_VISIT)))
|
||||
{
|
||||
MQC_SetCurContext(pMQCoder, Tier1_GetContextIndexZC(pTier1, nFlag, nOrient));
|
||||
int nValue = abs(*pData) & nOne ? 1 : 0;
|
||||
nValue = abs(*pData) & nOne ? 1 : 0;
|
||||
MQC_Encode(pMQCoder, nValue);
|
||||
if (nValue)
|
||||
{
|
||||
@ -295,11 +296,11 @@ namespace Jpeg2000
|
||||
}
|
||||
*pFlags &= ~T1_VISIT;
|
||||
}
|
||||
|
||||
static void Tier1_DecoderClnPassStep(Tier1 *pTier1, int *pFlags, int *pData, int nOrient, int nOnePlusHalf, int nPartial, int nVSC)
|
||||
{
|
||||
MQCoder *pMQCoder = pTier1->pMQCoder;
|
||||
int nFlag = nVSC ? ((*pFlags) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*pFlags);
|
||||
int nValue = 0;
|
||||
if (nPartial)
|
||||
{
|
||||
goto LABEL_PARTIAL;
|
||||
@ -311,7 +312,7 @@ namespace Jpeg2000
|
||||
{
|
||||
LABEL_PARTIAL:
|
||||
MQC_SetCurContext(pMQCoder, Tier1_GetContextIndexSC(pTier1, nFlag));
|
||||
int nValue = MQC_Decode(pMQCoder) ^ Tier1_GetSPB(pTier1, nFlag);
|
||||
nValue = MQC_Decode(pMQCoder) ^ Tier1_GetSPB(pTier1, nFlag);
|
||||
*pData = nValue ? -nOnePlusHalf : nOnePlusHalf;
|
||||
Tier1_UpdateFlags(pFlags, nValue);
|
||||
*pFlags |= T1_SIG;
|
||||
@ -903,7 +904,7 @@ namespace Jpeg2000
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
Tier1* Tier1_Create(PCommon pCodecInfo)
|
||||
{
|
||||
@ -932,7 +933,7 @@ namespace Jpeg2000
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Инициализируем таблицы
|
||||
Tier1_InitLuts(pTier1);
|
||||
}
|
||||
return pTier1;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "Reader.h"
|
||||
#include "PacketIterator.h"
|
||||
@ -8,7 +8,7 @@
|
||||
namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Вспомогательные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
static void Tier2_PutCommaCode(BitIO *pBIO, int nLen)
|
||||
{
|
||||
@ -83,7 +83,7 @@ namespace Jpeg2000
|
||||
unsigned char *pSOP = (unsigned char *)Malloc(6 * sizeof(unsigned char));
|
||||
pSOP[0] = 255; // ff
|
||||
pSOP[1] = 145; // 91
|
||||
pSOP[2] = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4 <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
pSOP[2] = 0; // Длина всегда 4 байта
|
||||
pSOP[3] = 4; //
|
||||
pSOP[4] = (pImageInfo->nPacketCount % 65536) / 256;
|
||||
pSOP[5] = (pImageInfo->nPacketCount % 65536) % 256;
|
||||
@ -148,13 +148,13 @@ namespace Jpeg2000
|
||||
BitIO_Write(pBitStream, pLayer->nPassesCount != 0, 1);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock
|
||||
// Если CodeBlock не включен, тогда переходми к следующему CodeBlock
|
||||
if (!pLayer->nPassesCount)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock --> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Zero bit-planes
|
||||
// Если это первое появление CodeBlock --> тогда обрабытываем информацию о Zero bit-planes
|
||||
if (!pCodeBlock->nPassesCount)
|
||||
{
|
||||
pCodeBlock->nLenBitsCount = 3;
|
||||
@ -319,7 +319,7 @@ namespace Jpeg2000
|
||||
}
|
||||
}
|
||||
|
||||
// SOP <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// SOP маркер
|
||||
if (pTCP->nCodingStyle & J2K_CP_CSTY_SOP)
|
||||
{
|
||||
if ((*pSrcPointer) != 0xff || (*(pSrcPointer + 1) != 0x91))
|
||||
@ -331,10 +331,10 @@ namespace Jpeg2000
|
||||
pSrcPointer += 6;
|
||||
}
|
||||
|
||||
// TO DO : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Nsop
|
||||
// TO DO : Добавить проверку значения Nsop
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPT/PPM, Packet header <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPT/PPM.
|
||||
// Когда используются пакеты PPT/PPM, Packet header хранится в маркерах PPT/PPM.
|
||||
|
||||
BitIO *pBitStream = BitIO_Create();
|
||||
if (!pBitStream)
|
||||
@ -350,7 +350,7 @@ namespace Jpeg2000
|
||||
pBuffer = pTCP->pPPTData;
|
||||
BitIO_InitDecoder(pBitStream, pBuffer, pTCP->nPPTLength);
|
||||
}
|
||||
else // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else // Обычный случай
|
||||
{
|
||||
pBuffer = pSrcPointer;
|
||||
BitIO_InitDecoder(pBitStream, pBuffer, pSrc + nLen - pBuffer);
|
||||
@ -364,7 +364,7 @@ namespace Jpeg2000
|
||||
pBuffer += BitIO_WrittenBytesCount(pBitStream);
|
||||
BitIO_Destroy(pBitStream);
|
||||
|
||||
// EPH <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// EPH маркер
|
||||
if (pTCP->nCodingStyle & J2K_CP_CSTY_EPH)
|
||||
{
|
||||
if ((*pBuffer) != 0xff || (*(pBuffer + 1) != 0x92))
|
||||
@ -407,7 +407,7 @@ namespace Jpeg2000
|
||||
CodeBlock *pCodeBlock = &pPrecinct->pCodeBlocks[nCodeBlockIndex];
|
||||
TCDSegment *pSegment = NULL;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock <EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> --> TagTree
|
||||
// Если CodeBlock не был включен ранее --> TagTree
|
||||
if (!pCodeBlock->nSegmentsCount)
|
||||
{
|
||||
nIncluded = TGT_Decode(pBitStream, pPrecinct->pInclTree, nCodeBlockIndex, nLayerIndex + 1);
|
||||
@ -423,7 +423,7 @@ namespace Jpeg2000
|
||||
continue;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock <EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> --> zero-bitplane tagtree
|
||||
// Если CodeBlock не был включен ранее --> zero-bitplane tagtree
|
||||
if (!pCodeBlock->nSegmentsCount)
|
||||
{
|
||||
int nIndex;
|
||||
@ -475,7 +475,7 @@ namespace Jpeg2000
|
||||
pBuffer += BitIO_WrittenBytesCount(pBitStream);
|
||||
BitIO_Destroy(pBitStream);
|
||||
|
||||
// EPH <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// EPH маркер
|
||||
if (pTCP->nCodingStyle & J2K_CP_CSTY_EPH)
|
||||
{
|
||||
if ((*pBuffer) != 0xff || (*(pBuffer + 1) != 0x92))
|
||||
@ -568,7 +568,7 @@ namespace Jpeg2000
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
int Tier2_EncodePackets(Tier2 *pTier2, int nTileIndex, Tile *pTile, int nMaxLayers, unsigned char *pDst, int nLen, ImageInfo *pImageInfo)
|
||||
{
|
||||
@ -605,7 +605,7 @@ namespace Jpeg2000
|
||||
pDstPointer += nShift;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Индексация
|
||||
if (pImageInfo && pImageInfo->nIndexOn)
|
||||
{
|
||||
if (pImageInfo->nIndexWrite)
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "DWT.h"
|
||||
#include "Tier1.h"
|
||||
@ -8,7 +8,7 @@
|
||||
namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Основные функции
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
void TCD_Dump(FILE *pFile, TCD *pTCD, TCDImage *pTCDImage)
|
||||
@ -157,13 +157,13 @@ namespace Jpeg2000
|
||||
{
|
||||
TileCodingParams *pTCP = &pCodingParams->pTCP[nCurTileIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD> 59 ISO/IEC FDIS15444-1
|
||||
// См. стр 59 ISO/IEC FDIS15444-1
|
||||
int nP = nCurTileIndex % pCodingParams->nXTilesCount;
|
||||
int nQ = nCurTileIndex / pCodingParams->nXTilesCount;
|
||||
|
||||
Tile *pTile = pTCD->pTCDImage->pTiles;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы тайла (маштабированные относительно размеров изображения, если необходимо)
|
||||
pTile->nX0 = max(pCodingParams->nXTOsiz + nP * pCodingParams->nXTsiz, pImage->nXOsiz);
|
||||
pTile->nY0 = max(pCodingParams->nYTOsiz + nQ * pCodingParams->nYTsiz, pImage->nYOsiz);
|
||||
pTile->nX1 = min(pCodingParams->nXTOsiz + (nP + 1) * pCodingParams->nXTsiz, pImage->nXsiz);
|
||||
@ -203,7 +203,7 @@ namespace Jpeg2000
|
||||
TileCompCodingParams *pTCCP = &pTCP->pTCCP[nComponentIndex];
|
||||
TileComp *pTileComp = &pTile->pComponents[nComponentIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы каждой тайл-компоненты (глобальные)
|
||||
pTileComp->nX0 = CeilDiv(pTile->nX0, pImage->pComponents[nComponentIndex].nXRsiz);
|
||||
pTileComp->nY0 = CeilDiv(pTile->nY0, pImage->pComponents[nComponentIndex].nYRsiz);
|
||||
pTileComp->nX1 = CeilDiv(pTile->nX1, pImage->pComponents[nComponentIndex].nXRsiz);
|
||||
@ -232,7 +232,7 @@ namespace Jpeg2000
|
||||
|
||||
Resolution *pResolution = &pTileComp->pResolutions[nResolutionIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы для каждого уровня (глобальные)
|
||||
pResolution->nX0 = CeilDivPow2(pTileComp->nX0, nLevel);
|
||||
pResolution->nY0 = CeilDivPow2(pTileComp->nY0, nLevel);
|
||||
pResolution->nX1 = CeilDivPow2(pTileComp->nX1, nLevel);
|
||||
@ -240,7 +240,7 @@ namespace Jpeg2000
|
||||
|
||||
pResolution->nBandsCount = (nResolutionIndex == 0 ? 1 : 3);
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD>. 35, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> A-23 ISO/IEC FDIS154444-1
|
||||
// См. стр. 35, таблица A-23 ISO/IEC FDIS154444-1
|
||||
int nPPx, nPPy;
|
||||
if (pTCCP->nCodingStyle & J2K_CCP_CSTY_PRT)
|
||||
{
|
||||
@ -253,7 +253,7 @@ namespace Jpeg2000
|
||||
nPPy = 15;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD>. 64, Annex-B.6, ISO/IEC FDIS15444-1
|
||||
// См. стр. 64, Annex-B.6, ISO/IEC FDIS15444-1
|
||||
int nFloorTRX0 = FloorDivPow2(pResolution->nX0, nPPx) << nPPx;
|
||||
int nFloorTRY0 = FloorDivPow2(pResolution->nY0, nPPy) << nPPy;
|
||||
int nCeilTRX1 = CeilDivPow2(pResolution->nX1, nPPx) << nPPx;
|
||||
@ -340,7 +340,7 @@ namespace Jpeg2000
|
||||
|
||||
Precinct *pPrecinct = &pBand->pPrecincts[nPrecinctIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Precinct)
|
||||
// Размеры области (Precinct)
|
||||
pPrecinct->nX0 = max(nGlobalCodeBlockStartX, pBand->nX0);
|
||||
pPrecinct->nY0 = max(nGlobalCodeBlockStartY, pBand->nY0);
|
||||
pPrecinct->nX1 = min(nGlobalCodeBlockEndX, pBand->nX1);
|
||||
@ -373,7 +373,7 @@ namespace Jpeg2000
|
||||
|
||||
CodeBlock *pCodeBlock = &pPrecinct->pCodeBlocks[nCodeBlockIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы CodeBlock (глобальные)
|
||||
pCodeBlock->nX0 = max(nCodeBlockStartX, pPrecinct->nX0);
|
||||
pCodeBlock->nY0 = max(nCodeBlockStartY, pPrecinct->nY0);
|
||||
pCodeBlock->nX1 = min(nCodeBlockEndX, pPrecinct->nX1);
|
||||
@ -401,13 +401,13 @@ namespace Jpeg2000
|
||||
{
|
||||
TileCodingParams *pTCP = &pCodingParams->pTCP[nCurTileIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD> 59 ISO/IEC FDIS15444-1
|
||||
// См. стр 59 ISO/IEC FDIS15444-1
|
||||
int nP = nCurTileIndex % pCodingParams->nXTilesCount;
|
||||
int nQ = nCurTileIndex / pCodingParams->nXTilesCount;
|
||||
|
||||
Tile *pTile = pTCD->pTCDImage->pTiles;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы тайла (маштабированные относительно размеров изображения, если необходимо)
|
||||
pTile->nX0 = max(pCodingParams->nXTOsiz + nP * pCodingParams->nXTsiz, pImage->nXOsiz);
|
||||
pTile->nY0 = max(pCodingParams->nYTOsiz + nQ * pCodingParams->nYTsiz, pImage->nYOsiz);
|
||||
pTile->nX1 = min(pCodingParams->nXTOsiz + (nP + 1) * pCodingParams->nXTsiz, pImage->nXsiz);
|
||||
@ -440,7 +440,7 @@ namespace Jpeg2000
|
||||
TileCompCodingParams *pTCCP = &pTCP->pTCCP[nComponentIndex];
|
||||
TileComp *pTileComp = &pTile->pComponents[nComponentIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы каждой тайл-компоненты (глобальные)
|
||||
pTileComp->nX0 = CeilDiv(pTile->nX0, pImage->pComponents[nComponentIndex].nXRsiz);
|
||||
pTileComp->nY0 = CeilDiv(pTile->nY0, pImage->pComponents[nComponentIndex].nYRsiz);
|
||||
pTileComp->nX1 = CeilDiv(pTile->nX1, pImage->pComponents[nComponentIndex].nXRsiz);
|
||||
@ -462,14 +462,14 @@ namespace Jpeg2000
|
||||
|
||||
Resolution *pResolution = &pTileComp->pResolutions[nResolutionIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы для каждого уровня (глобальные)
|
||||
pResolution->nX0 = CeilDivPow2(pTileComp->nX0, nLevel);
|
||||
pResolution->nY0 = CeilDivPow2(pTileComp->nY0, nLevel);
|
||||
pResolution->nX1 = CeilDivPow2(pTileComp->nX1, nLevel);
|
||||
pResolution->nY1 = CeilDivPow2(pTileComp->nY1, nLevel);
|
||||
pResolution->nBandsCount = (nResolutionIndex == 0 ? 1 : 3);
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD>. 35, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> A-23 ISO/IEC FDIS154444-1
|
||||
// См. стр. 35, таблица A-23 ISO/IEC FDIS154444-1
|
||||
int nPPx, nPPy;
|
||||
if (pTCCP->nCodingStyle & J2K_CCP_CSTY_PRT)
|
||||
{
|
||||
@ -482,7 +482,7 @@ namespace Jpeg2000
|
||||
nPPy = 15;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD>. 64, Annex-B.6, ISO/IEC FDIS15444-1
|
||||
// См. стр. 64, Annex-B.6, ISO/IEC FDIS15444-1
|
||||
int nFloorTRX0 = FloorDivPow2(pResolution->nX0, nPPx) << nPPx;
|
||||
int nFloorTRY0 = FloorDivPow2(pResolution->nY0, nPPy) << nPPy;
|
||||
int nCeilTRX1 = CeilDivPow2(pResolution->nX1, nPPx) << nPPx;
|
||||
@ -556,7 +556,7 @@ namespace Jpeg2000
|
||||
|
||||
Precinct *pPrecinct = &pBand->pPrecincts[nPrecinctIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Precinct)
|
||||
// Размеры области (Precinct)
|
||||
pPrecinct->nX0 = max(nGlobalCodeBlockStartX, pBand->nX0);
|
||||
pPrecinct->nY0 = max(nGlobalCodeBlockStartY, pBand->nY0);
|
||||
pPrecinct->nX1 = min(nGlobalCodeBlockEndX, pBand->nX1);
|
||||
@ -599,7 +599,7 @@ namespace Jpeg2000
|
||||
|
||||
CodeBlock *pCodeBlock = &pPrecinct->pCodeBlocks[nCodeBlockIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы CodeBlock (глобальные)
|
||||
pCodeBlock->nX0 = max(nCodeBlockStartX, pPrecinct->nX0);
|
||||
pCodeBlock->nY0 = max(nCodeBlockStartY, pPrecinct->nY0);
|
||||
pCodeBlock->nX1 = min(nCodeBlockEndX, pPrecinct->nX1);
|
||||
@ -699,12 +699,12 @@ namespace Jpeg2000
|
||||
TileCodingParams *pTCP = &(pCodingParams->pTCP[pCodingParams->pTileIndex[nIndex]]);
|
||||
Tile *pTile = &(pTCD->pTCDImage->pTiles[pCodingParams->pTileIndex[nIndex]]);
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD> 59 ISO/IEC FDIS15444-1
|
||||
// См. стр 59 ISO/IEC FDIS15444-1
|
||||
int nTileIndex = pCodingParams->pTileIndex[nIndex];
|
||||
int nP = nTileIndex % pCodingParams->nXTilesCount;
|
||||
int nQ = nTileIndex / pCodingParams->nXTilesCount;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы тайла (маштабированные относительно размеров изображения, если необходимо)
|
||||
pTile->nX0 = max(pCodingParams->nXTOsiz + nP * pCodingParams->nXTsiz, pImage->nXOsiz);
|
||||
pTile->nY0 = max(pCodingParams->nYTOsiz + nQ * pCodingParams->nYTsiz, pImage->nYOsiz);
|
||||
pTile->nX1 = min(pCodingParams->nXTOsiz + (nP + 1) * pCodingParams->nXTsiz, pImage->nXsiz);
|
||||
@ -724,7 +724,7 @@ namespace Jpeg2000
|
||||
TileCompCodingParams *pTCCP = &pTCP->pTCCP[nComponentIndex];
|
||||
TileComp *pTileComp = &pTile->pComponents[nComponentIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы каждой тайл-компоненты (глобальные)
|
||||
pTileComp->nX0 = CeilDiv(pTile->nX0, pImage->pComponents[nComponentIndex].nXRsiz);
|
||||
pTileComp->nY0 = CeilDiv(pTile->nY0, pImage->pComponents[nComponentIndex].nYRsiz);
|
||||
pTileComp->nX1 = CeilDiv(pTile->nX1, pImage->pComponents[nComponentIndex].nXRsiz);
|
||||
@ -753,14 +753,14 @@ namespace Jpeg2000
|
||||
|
||||
Resolution *pResolution = &pTileComp->pResolutions[nResolutionIndex];
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы для каждого уровня (глобальные)
|
||||
pResolution->nX0 = CeilDivPow2(pTileComp->nX0, nLevel);
|
||||
pResolution->nY0 = CeilDivPow2(pTileComp->nY0, nLevel);
|
||||
pResolution->nX1 = CeilDivPow2(pTileComp->nX1, nLevel);
|
||||
pResolution->nY1 = CeilDivPow2(pTileComp->nY1, nLevel);
|
||||
pResolution->nBandsCount = (nResolutionIndex == 0 ? 1 : 3);
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD>. 35, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> A-23 ISO/IEC FDIS154444-1
|
||||
// См. стр. 35, таблица A-23 ISO/IEC FDIS154444-1
|
||||
int nPPx, nPPy;
|
||||
if (pTCCP->nCodingStyle & J2K_CCP_CSTY_PRT)
|
||||
{
|
||||
@ -773,7 +773,7 @@ namespace Jpeg2000
|
||||
nPPy = 15;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>. <20><><EFBFBD>. 64, Annex-B.6, ISO/IEC FDIS15444-1
|
||||
// См. стр. 64, Annex-B.6, ISO/IEC FDIS15444-1
|
||||
int nFlootTRX0 = FloorDivPow2(pResolution->nX0, nPPx) << nPPx;
|
||||
int nFloorTRY0 = FloorDivPow2(pResolution->nY0, nPPy) << nPPy;
|
||||
int nCeilTRX1 = CeilDivPow2(pResolution->nX1, nPPx) << nPPx;
|
||||
@ -853,7 +853,7 @@ namespace Jpeg2000
|
||||
int nGlobalCodeBlockEndY = nGlobalCodeBlockStartY + (1 << nCBHeightExpn);
|
||||
|
||||
Precinct *pPrecinct = &pBand->pPrecincts[nPrecinctIndex];
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Precinct)
|
||||
// Размеры области (Precinct)
|
||||
pPrecinct->nX0 = max(nGlobalCodeBlockStartX, pBand->nX0);
|
||||
pPrecinct->nY0 = max(nGlobalCodeBlockStartY, pBand->nY0);
|
||||
pPrecinct->nX1 = min(nGlobalCodeBlockEndX, pBand->nX1);
|
||||
@ -884,7 +884,7 @@ namespace Jpeg2000
|
||||
int nCodeBlockEndX = nCodeBlockStartX + (1 << nXCBa);
|
||||
int nCodeBlockEndY = nCodeBlockStartY + (1 << nYCBa);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Границы CodeBlock (глобальные)
|
||||
CodeBlock *pCodeBlock = &pPrecinct->pCodeBlocks[nCodeBlockIndex];
|
||||
pCodeBlock->nX0 = max(nCodeBlockStartX, pPrecinct->nX0);
|
||||
pCodeBlock->nY0 = max(nCodeBlockStartY, pPrecinct->nY0);
|
||||
@ -907,7 +907,7 @@ namespace Jpeg2000
|
||||
// }
|
||||
//#endif
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ).
|
||||
// Выделяем место для хранения закодированных данных ( = окончательное изображение ).
|
||||
|
||||
unsigned int nX0 = 0, nY0 = 0, nX1 = 0, nY1 = 0, nWidth, nHeight;
|
||||
|
||||
@ -981,7 +981,7 @@ namespace Jpeg2000
|
||||
CodeBlock *pCodeBlock = &pPrecinct->pCodeBlocks[nCodeBlockIndex];
|
||||
Layer *pLayer = &pCodeBlock->aLayers[nLayerIndex];
|
||||
|
||||
int nIMSB = pTCD->pImage->pComponents[nComponentIndex].nPrecision - pCodeBlock->nBPSCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bit-plan <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
||||
int nIMSB = pTCD->pImage->pComponents[nComponentIndex].nPrecision - pCodeBlock->nBPSCount; // Количество bit-plan равных 0
|
||||
|
||||
if (0 == nLayerIndex)
|
||||
{
|
||||
@ -1245,7 +1245,7 @@ namespace Jpeg2000
|
||||
|
||||
int nSuccess = 0;
|
||||
|
||||
// TO DO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nMaxLen
|
||||
// TO DO: Убрать nMaxLen
|
||||
int nMaxLen = pTCP->afRates[nLayerIndex] ? min(((int)ceil(pTCP->afRates[nLayerIndex])), nLen) : nLen;
|
||||
double dGoodThreshold = 0;
|
||||
double dDistoTarget = pTile->dDistoTile - ((c_dK * dMaxSE) / pow((float)10, pTCP->afDistoRatio[nLayerIndex] / 10));
|
||||
@ -1347,7 +1347,7 @@ namespace Jpeg2000
|
||||
// << INDEX
|
||||
|
||||
//---------------TILE-DATA--------------
|
||||
double dEncodingTime = Clock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dEncodingTime = Clock(); // Засекаем сколько потребовалось времени для кодирования тайла
|
||||
|
||||
for (int nComponentIndex = 0; nComponentIndex < pTile->nComponentsCount; nComponentIndex++)
|
||||
{
|
||||
@ -1359,15 +1359,15 @@ namespace Jpeg2000
|
||||
int nTileWidth = pTileComp->nX1 - pTileComp->nX0;
|
||||
int nWidth = CeilDiv(pImage->nXsiz - pImage->nXOsiz, pImage->pComponents[nComponentIndex].nXRsiz);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Извлекаем данные тайла
|
||||
|
||||
if (pTCD_TCP->pTCCP[nComponentIndex].nTransformID == 1)
|
||||
{
|
||||
for (int nY = pTileComp->nY0; nY < pTileComp->nY1; nY++)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Иходные данные
|
||||
int *pData = &pImage->pComponents[nComponentIndex].pData[(pTileComp->nX0 - nOffsetX) + (nY - nOffsety) * nWidth];
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Результат
|
||||
int *pTileData = &pTileComp->pData[(nY - pTileComp->nY0) * nTileWidth];
|
||||
for (int nX = pTileComp->nX0; nX < pTileComp->nX1; nX++)
|
||||
{
|
||||
@ -1379,9 +1379,9 @@ namespace Jpeg2000
|
||||
{
|
||||
for (int nY = pTileComp->nY0; nY < pTileComp->nY1; nY++)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Иходные данные
|
||||
int *pData = &pImage->pComponents[nComponentIndex].pData[(pTileComp->nX0 - nOffsetX) + (nY - nOffsety) * nWidth];
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Результат
|
||||
int *pTileData = &pTileComp->pData[(nY - pTileComp->nY0) * nTileWidth];
|
||||
for (int nX = pTileComp->nX0; nX < pTileComp->nX1; nX++)
|
||||
{
|
||||
@ -1460,7 +1460,7 @@ namespace Jpeg2000
|
||||
|
||||
Event_Message(EVT_INFO, "- tile encoded in %f s\n", dEncodingTime);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Освобождаем память
|
||||
for (int nComponentIndex = 0; nComponentIndex < pTile->nComponentsCount; nComponentIndex++)
|
||||
{
|
||||
TileComp *pTileComp = &pTile->pComponents[nComponentIndex];
|
||||
@ -1479,7 +1479,7 @@ namespace Jpeg2000
|
||||
pTCD->pTCP = &(pTCD->pCodingParams->pTCP[nTileIndex]);
|
||||
Tile *pTile = pTCD->pTCDTile;
|
||||
|
||||
double dDecodeTime = Clock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dDecodeTime = Clock(); // Время, затраченное на декодирование тайла
|
||||
Event_Message(EVT_INFO, "tile %d of %d\n", nTileIndex + 1, pTCD->pCodingParams->nXTilesCount * pTCD->pCodingParams->nYTilesCount);
|
||||
|
||||
//--------------TIER2---------------------
|
||||
|
||||
@ -1,19 +1,27 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
#include "Reader.h"
|
||||
#include "../../graphics/Defines.h"
|
||||
|
||||
#ifndef max
|
||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#ifndef min
|
||||
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
namespace Jpeg2000
|
||||
{
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// Constant definitions
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define MAX_PATH_LEN 4096 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define MAX_PATH_LEN 4096 // Максимальная длина для имен файлов
|
||||
|
||||
#define J2K_MAXRLVLS 33 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define J2K_MAXBANDS (3 * J2K_MAXRLVLS - 2) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define J2K_MAXRLVLS 33 // Максимальное число уровней разложения
|
||||
#define J2K_MAXBANDS (3 * J2K_MAXRLVLS - 2) // Максимальное число обастей, связанных с уровнями разложения
|
||||
|
||||
#define J2K_MAXSSFTR 2 // Max SubSampling Factor (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
#define J2K_MAXSSFTR 2 // Max SubSampling Factor (Значения больше 2 могут привести к ошибке)
|
||||
|
||||
void* Malloc(size_t nSize);
|
||||
void Free(void* pMem);
|
||||
@ -24,7 +32,7 @@ namespace Jpeg2000
|
||||
// Progression order
|
||||
typedef enum EProgressionOrder
|
||||
{
|
||||
poUnknown = -1, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
poUnknown = -1, // Неизвестный порядок
|
||||
poLRCP = 0, // layer-resolution-component-precinct
|
||||
poRLCP = 1, // resolution-layer-component-precinct
|
||||
poRPCL = 2, // resolution-precinct-component-layer
|
||||
@ -32,48 +40,48 @@ namespace Jpeg2000
|
||||
poCPRL = 4 // component-precinct-resolution-layer
|
||||
} ProgressionOrder;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Поддерживаемые цветовые пространства
|
||||
typedef enum EColorSpace
|
||||
{
|
||||
csUnknown = -1, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
csUnknown = -1, // цветовое пространство неопределенно
|
||||
csRGB = 1, // sRGB
|
||||
csGray = 2, // Grayscale
|
||||
csYUV = 3 // YUV
|
||||
} ColorSpace;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Поддерживаемые форматы
|
||||
typedef enum ECodecFormat
|
||||
{
|
||||
codecUnknown = -1, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
codecJ2K = 0, // JPEG-2000 codestream : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
codecJPT = 1, // JPT-stream (JPEG 2000, JPIP) : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
codecJP2 = 2, // JPEG-2000 file format (Jp2-wrapper) : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
codecUnknown = -1, // неизвестный кодек
|
||||
codecJ2K = 0, // JPEG-2000 codestream : чтение/запись
|
||||
codecJPT = 1, // JPT-stream (JPEG 2000, JPIP) : только чтение
|
||||
codecJP2 = 2, // JPEG-2000 file format (Jp2-wrapper) : чтение/запись
|
||||
codecMj2 = 3, // Motion JPEG-2000
|
||||
} CodecFormat;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Jpeg2000-Codestream
|
||||
// Ограничения по декодированию Jpeg2000-Codestream
|
||||
typedef enum ELimitDecoding
|
||||
{
|
||||
declimNoLimitation = 0, // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Jpeg2000-codestream <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
declimLimitToMainHeader = 1 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Main Header
|
||||
declimNoLimitation = 0, // Нет ограничений при декодировании. Декодируем Jpeg2000-codestream полностью
|
||||
declimLimitToMainHeader = 1 // Декодируем только Main Header
|
||||
} LimitDecoding;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// Event (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Event (Обработка сообщений)
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define EVT_ERROR 1 // Error
|
||||
#define EVT_WARNING 2 // Warning
|
||||
#define EVT_INFO 4 // Debug event
|
||||
|
||||
#define MSG_SIZE 512 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define MSG_SIZE 512 // Максимальный размер сообщения
|
||||
|
||||
#define JP2_ERROR_NO_ERROR 0x0000
|
||||
#define JP2_ERROR_NOT_ENOUGH_MEMORY 0x0001
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Параметры кодека (компрессии/декомпрессии)
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// Progression order changes (POC) (Annex A.6.6 Table A-32)
|
||||
@ -89,10 +97,10 @@ namespace Jpeg2000
|
||||
char sProgOrder[4];
|
||||
} POC;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Параметры компрессии
|
||||
typedef struct TEncoderParams
|
||||
{
|
||||
bool bTileSizeOn; // False: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, true: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool bTileSizeOn; // False: размеры тайлов не указаны, true: размеры тайлов указаны
|
||||
int nXTOsiz; // XTOsiz
|
||||
int nYTOsiz; // YTOsiz
|
||||
int nXTsiz; // XTsiz
|
||||
@ -101,64 +109,64 @@ namespace Jpeg2000
|
||||
int nFixedAlloc; // allocation by fixed layer
|
||||
int nFixedQuality; // fixed_quality
|
||||
int *pMatrix; // fixed layer
|
||||
char *sComment; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char *sComment; // Комментарий
|
||||
int nCodingStyle; // CodingStyle
|
||||
ProgressionOrder eProgOrder; // Progression order (default LRCP)
|
||||
POC aoPOC[32]; // Progression order changes
|
||||
int nPOCsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> progression order changes (POC), default to 0
|
||||
int nLayersCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float afRates[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
float afDistoratio[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResolutionsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
int nCodeBlockWidthInit; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 64)
|
||||
int nCodeBlockHeightInit; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 64)
|
||||
int nPOCsCount; // Количество progression order changes (POC), default to 0
|
||||
int nLayersCount; // Количество лэйеров
|
||||
float afRates[100]; // Массив норм
|
||||
float afDistoratio[100]; // Массив искажений
|
||||
int nResolutionsCount; // Число разрешений(уровней разложения)
|
||||
int nCodeBlockWidthInit; // Исходная ширина блока (по стандарту 64)
|
||||
int nCodeBlockHeightInit; // Исходная высота блока (по стандарту 64)
|
||||
int nCodeBlockStyle; // CodeBlockStyle
|
||||
int nTransformId; // 1: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( Irreversible DTW ), 0: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
int nROIComponentIndex; // Region of interest: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [0..3], -1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> ROI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nTransformId; // 1: необратимое вэйвлет преобразование ( Irreversible DTW ), 0: компрессия без потерь (по стандарту)
|
||||
int nROIComponentIndex; // Region of interest: затрагиваемые компоненты [0..3], -1 означает, что ROI отсутствует
|
||||
int nROIShift; // Region of interest: shift
|
||||
int nPrecinctCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int anPrecinctWidthInit[J2K_MAXRLVLS]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int anPrecinctHeightInit[J2K_MAXRLVLS]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPrecinctCount; // Количество областей
|
||||
int anPrecinctWidthInit[J2K_MAXRLVLS]; // Исходные ширины областей
|
||||
int anPrecinctHeightInit[J2K_MAXRLVLS]; // Исходные высоты областей
|
||||
|
||||
int nComponentsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
char sInFile[MAX_PATH_LEN]; // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
char sOutfile[MAX_PATH_LEN]; // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nIndexOn; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0)
|
||||
char sIndex[MAX_PATH_LEN]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nImageOffsetX0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>
|
||||
int nImageOffsetY0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Y
|
||||
int nComponentsCount; // Количество компонент в исходном файле
|
||||
char sInFile[MAX_PATH_LEN]; // Имя исходного файла
|
||||
char sOutfile[MAX_PATH_LEN]; // Имя результируещего файла
|
||||
int nIndexOn; // Создаем ли файл с индексайией (по стандарту 0)
|
||||
char sIndex[MAX_PATH_LEN]; // Файл индексации
|
||||
int nImageOffsetX0; // Сдиг исходной картинки по Х
|
||||
int nImageOffsetY0; // Сдиг исходной картинки по Y
|
||||
int nSubSamplingDx; // SubSampling X
|
||||
int nSubSamplingDy; // SubSampling Y
|
||||
int nDecoderFormat; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. 0: PGX, 1: PxM, 2: BMP
|
||||
int nEncoderFormat; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. 0: J2K, 1: JP2, 2: JPT
|
||||
int nDecoderFormat; // Формат исходного файла. 0: PGX, 1: PxM, 2: BMP
|
||||
int nEncoderFormat; // Формат выходного файла. 0: J2K, 1: JP2, 2: JPT
|
||||
} EncoderParams;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Параметры декомпрессии
|
||||
typedef struct TDecoderParams
|
||||
{
|
||||
int nReduce; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> != 0, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2^(nReduce). <EFBFBD><EFBFBD><EFBFBD><EFBFBD> == 0, <EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
int nLayer; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
LimitDecoding eLimitDecoding; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
int nReduce; // Если != 0, тогда разрешение исходного изображения делится на 2^(nReduce). Если == 0, или не используется, тогда изображение декодируется с полным разрешением.
|
||||
int nLayer; // Устанавливаем максимальное число лэеров, которые мы будем декодировать.
|
||||
LimitDecoding eLimitDecoding; // Будем декодировать полностью файл, или только заголовок.
|
||||
|
||||
char sInFile[MAX_PATH_LEN]; // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
char sOutfile[MAX_PATH_LEN]; // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nDecoderFormat; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. 0: J2k, 1: Jp2, 2: Jpt
|
||||
int nEncoderFormat; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. 0: PGX, 1: PxM, 2: BMP
|
||||
char sInFile[MAX_PATH_LEN]; // Имя исходного файла
|
||||
char sOutfile[MAX_PATH_LEN]; // Имя результируещего файла
|
||||
int nDecoderFormat; // Формат исходного файла. 0: J2k, 1: Jp2, 2: Jpt
|
||||
int nEncoderFormat; // Формат выходного файла. 0: PGX, 1: PxM, 2: BMP
|
||||
} DecoderParams;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> JPEG-2000 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//EventManager *pEventManager; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (events) */\
|
||||
// Общие поля для JPEG-2000 компрессии и декомпресии
|
||||
//EventManager *pEventManager; /* Указатель на обработчик сообщений (events) */\
|
||||
//void *pClientData; /* */\
|
||||
|
||||
#define CommonFields \
|
||||
bool bIsDecompressor; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */\
|
||||
ECodecFormat eCodecFormat; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */\
|
||||
void *pJ2k; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> J2K <20><><EFBFBD><EFBFBD><EFBFBD> */\
|
||||
void *pJp2; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> JP2 <20><><EFBFBD><EFBFBD><EFBFBD> */\
|
||||
void *pMj2; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> JP2 <20><><EFBFBD><EFBFBD><EFBFBD> */\
|
||||
int nErrorCode /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
bool bIsDecompressor; /* Чтобы узнать компрессия или декомпрессия */\
|
||||
ECodecFormat eCodecFormat; /* Выбранный кодек */\
|
||||
void *pJ2k; /* Указатель на J2K кодек */\
|
||||
void *pJp2; /* Указатель на JP2 кодек */\
|
||||
void *pMj2; /* Указатель на JP2 кодек */\
|
||||
int nErrorCode /* Номер ошибки */
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Поля, которые исользуются как для чтения, так и для записи
|
||||
typedef struct TCommonStruct
|
||||
{
|
||||
CommonFields;
|
||||
@ -166,18 +174,18 @@ namespace Jpeg2000
|
||||
|
||||
typedef CommonStruct* PCommon;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Параметры компрессии
|
||||
typedef struct TCInfo
|
||||
{
|
||||
CommonFields; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CommonFields; // Общие поля
|
||||
// Поля характерные только для компрессии
|
||||
} CInfo;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Параметры декомпрессии
|
||||
typedef struct TDInfo
|
||||
{
|
||||
CommonFields; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CommonFields; // Общие поля
|
||||
// Поля характерные только для декомпрессии
|
||||
} DInfo;
|
||||
|
||||
|
||||
@ -187,39 +195,39 @@ namespace Jpeg2000
|
||||
|
||||
typedef struct TImageComponent
|
||||
{
|
||||
int nXRsiz; // XRsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> i-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nYRsiz; // YRsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> i-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nWidth; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nHeight; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nXOsiz; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nYOsiz; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nXRsiz; // XRsiz: горизонтальное разделение i-ой компоненты
|
||||
int nYRsiz; // YRsiz: вертикальное разделение i-ой компоненты
|
||||
int nWidth; // Ширина картинки
|
||||
int nHeight; // Высота картинки
|
||||
int nXOsiz; // Сдвиг компоненты по Х по отношению ко всему изображению
|
||||
int nYOsiz; // Сдвиг компоненты по У по отношению ко всему изображению
|
||||
int nPrecision; // Precision
|
||||
int nBPP; // Bits Per Pixel
|
||||
int nSigned; // Signed - 1, unsigned - 0
|
||||
int nDecodedResCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Resolutions <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nFactorDiv2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int *pData; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> i-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nDecodedResCount; // Количество Resolutions в кодированном изображении
|
||||
int nFactorDiv2; // Количество делений на 2 результирующей картинки, по сравнению с размером исходной
|
||||
int *pData; // Данные изображения для i-ой компоненты
|
||||
} ImageComponent;
|
||||
|
||||
typedef struct TImage
|
||||
{
|
||||
int nXOsiz; // XOsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> c<><63><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nYOsiz; // YOsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nXsiz; // Xsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nYsiz; // Ysiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nCsiz; // Csiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ColorSpace eColorSpace; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: sRGB, Greyscale <EFBFBD><EFBFBD><EFBFBD> YUV
|
||||
ImageComponent *pComponents; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nXOsiz; // XOsiz: горизонтальный cдвиг от начальной точки всей сетки к области с реальным изображением
|
||||
int nYOsiz; // YOsiz: вертикальный сдвиг от начальной точки всей сетки к области с реальным изображением
|
||||
int nXsiz; // Xsiz: ширина сетки
|
||||
int nYsiz; // Ysiz: высота сетки
|
||||
int nCsiz; // Csiz: количество компонент в изображении
|
||||
ColorSpace eColorSpace; // Цветовое пространство: sRGB, Greyscale или YUV
|
||||
ImageComponent *pComponents; // Компоненты изображения
|
||||
} Image;
|
||||
|
||||
typedef struct TImageComponentParams
|
||||
{
|
||||
int nXRsiz; // XRsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> i-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nYRsiz; // YRsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> i-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nWidth; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nHeight; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nXoffset; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nYoffset; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nXRsiz; // XRsiz: горизонтальное разделение i-ой компоненты
|
||||
int nYRsiz; // YRsiz: вертикальное разделение i-ой компоненты
|
||||
int nWidth; // Ширина
|
||||
int nHeight; // Высота картинки
|
||||
int nXoffset; // Сдвиг компоненты по Х по отношению ко всему изображению
|
||||
int nYoffset; // Сдвиг компоненты по У по отношению ко всему изображению
|
||||
int nPrecision; // Precision
|
||||
int nBPP; // Bits Per Pixel
|
||||
int nSigned; // Signed - 1, unsigned - 0
|
||||
@ -301,21 +309,21 @@ namespace Jpeg2000
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Main Header)
|
||||
// Значения определяющие статус декодирования(когда декодируется Main Header)
|
||||
typedef enum EJ2kStatus
|
||||
{
|
||||
j2kstateMHSOC = 0x0001, // SOC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
j2kstateMHSIZ = 0x0002, // SIZ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
j2kstateMH = 0x0004, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Main Header
|
||||
j2kstateTPHSOT = 0x0008, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Tile Part Header, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SOT
|
||||
j2kstateTPH = 0x0010, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Tile Part Header
|
||||
j2kstateMT = 0x0020, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EOC
|
||||
j2kstateNEOC = 0x0040 // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EOC, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20>odestream <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
j2kstateMHSOC = 0x0001, // SOC маркер
|
||||
j2kstateMHSIZ = 0x0002, // SIZ маркер
|
||||
j2kstateMH = 0x0004, // Процесс декодирования находится в Main Header
|
||||
j2kstateTPHSOT = 0x0008, // Процесс декодирования находится в Tile Part Header, и сейчас читается маркер SOT
|
||||
j2kstateTPH = 0x0010, // Процесс декодирования находится в Tile Part Header
|
||||
j2kstateMT = 0x0020, // Только что был прочитан маркер EOC
|
||||
j2kstateNEOC = 0x0040 // При декодировании не воспринимаем маркер EOC, потому что Сodestream сокращенный
|
||||
} J2kStatus;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Размер шага квантования
|
||||
typedef struct TQuantStepSize
|
||||
{
|
||||
int nExponent;
|
||||
@ -330,34 +338,34 @@ namespace Jpeg2000
|
||||
int nCodeBlockWidth; // Code-block size width
|
||||
int nCodeBlockHeight; // Code-block size height
|
||||
int nCodeBlockStyle; // Code-block context
|
||||
int nTransformID; // Wavelet-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nQuantStyle; // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
QuantStepSize aoStepSizes[J2K_MAXBANDS]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nTransformID; // Wavelet-преобразвание
|
||||
int nQuantStyle; // Тип квантования
|
||||
QuantStepSize aoStepSizes[J2K_MAXBANDS]; // Размер шага, используемый для квантования
|
||||
int nGuardBitsCount; // Number of guard bits
|
||||
int nROIShift; // SPrgn: Region Of Interest shift (Table A-25)
|
||||
int anPrecinctWidth[J2K_MAXRLVLS]; // Precinct width
|
||||
int anPrecinctHeight[J2K_MAXRLVLS]; // Precinct height
|
||||
} TileCompCodingParams;
|
||||
|
||||
// Tile coding parameters : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(tiles) ( <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> COD, COC <EFBFBD> Main Header )
|
||||
// Tile coding parameters : данная структура используется для хранения параметров кодирования/декодирования одинаковых для всех
|
||||
// ячеек(tiles) ( подобно информации COD, COC в Main Header )
|
||||
typedef struct TTileCodingParams
|
||||
{
|
||||
int nFirst; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> part-tile <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tile
|
||||
int nFirst; // Флаг. 1 : первый part-tile данного tile
|
||||
int nCodingStyle; // Scod: Coding style (Table A-12)
|
||||
ProgressionOrder eProgOrder; // SPcod, Ppod: Progression order
|
||||
int nLayersCount; // SPcod: Number of layers
|
||||
int nMCT; // SPcod: Multiple component transform
|
||||
float afRates[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> layers
|
||||
int nPOCsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> POC ( progression order changes )
|
||||
int nUsePOC; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> POC. 0 - <EFBFBD><EFBFBD><EFBFBD>, 1 - <EFBFBD><EFBFBD>.
|
||||
float afRates[100]; // Размеры layers
|
||||
int nPOCsCount; // Количество POC ( progression order changes )
|
||||
int nUsePOC; // Флаг; используем ли маркер POC. 0 - нет, 1 - да.
|
||||
POC aoPOC[32]; // Progression order changes
|
||||
unsigned char *pPPTData; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Packet header, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> Tire2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pPPTDataFirst; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PacketHeader, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPT <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPPT; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tile <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPT, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 1.
|
||||
int nPPTStore; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPT (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
||||
unsigned char *pPPTData; // Храним указатель на Packet header, чтобы испольщовать его в Tire2 декодировании
|
||||
unsigned char *pPPTDataFirst; // Указатель на начало первого пакета в PacketHeader, если PPT используется
|
||||
int nPPT; // Флаг. Если для текущего Tile нашли маркер PPT, тогда флаг равен 1.
|
||||
int nPPTStore; // Используем, если нашли несколько маркеров PPT (храним их общую длину в байтах здесь)
|
||||
int nPPTLength; // PPM bug 1
|
||||
float afDistoRatio[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Fixed quality
|
||||
float afDistoRatio[100]; // Добавляем Fixed quality
|
||||
TileCompCodingParams *pTCCP; // Tile-component coding parameters
|
||||
} TileCodingParams;
|
||||
|
||||
@ -366,94 +374,94 @@ namespace Jpeg2000
|
||||
{
|
||||
int nDistoAlloc; // allocation by rate/distortion
|
||||
int nFixedAlloc; // allocation by fixed layer
|
||||
int nFixedQuality; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Fixed quality
|
||||
int nReduceFactor; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 0, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> 2^(nReduceFactor); <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 0, <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nLayerFactor; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 0, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "layer"; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 0, <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> "layers"
|
||||
LimitDecoding eLimitDecoding; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
int nIndexOn; // 0 - <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
int nXTOsiz; // XTOsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tile
|
||||
int nYTOsiz; // YTOsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tile
|
||||
int nXTsiz; // XTsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tile <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nYTsiz; // YTsiz: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tile <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
char *sComment; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nXTilesCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tiles <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nYTilesCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tiles <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int *pTileIndex; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tiles <EFBFBD> codestream
|
||||
int nTileIndexSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pTileIndex
|
||||
unsigned char *pPPMData; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Packet header, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> Tire2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pPPMDataFirst; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PacketHeader, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPPM; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tile <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPM, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 1.
|
||||
int nPPMStore; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPM (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
||||
int nPPMPrevious; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPM (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PPM <20><><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
int nFixedQuality; // Добавляем Fixed quality
|
||||
int nReduceFactor; // Если данное значение отлично от 0, тогда исходное разрешение делим на 2^(nReduceFactor); если равно 0, или не используется, декодируем изображение с полным разрешением
|
||||
int nLayerFactor; // Если данное значение отлично от 0, тогда декодируем только первый "layer"; если равно 0, или не используется, декодируем все "layers"
|
||||
LimitDecoding eLimitDecoding; // Ограничения на декодирование.
|
||||
int nIndexOn; // 0 - нет нумерации, 1 - есть.
|
||||
int nXTOsiz; // XTOsiz: свдиг по горизонтали первого Tile
|
||||
int nYTOsiz; // YTOsiz: сдвиг по вертикали первого Tile
|
||||
int nXTsiz; // XTsiz: ширина одного Tile по отношению к общей сетке
|
||||
int nYTsiz; // YTsiz: высота одного Tile по отношению к общей сетке
|
||||
char *sComment; // Комментарий
|
||||
int nXTilesCount; // Количество Tiles по горизонтали
|
||||
int nYTilesCount; // Количество Tiles по вертикали
|
||||
int *pTileIndex; // Порядковые номера Tiles в codestream
|
||||
int nTileIndexSize; // Размер массива pTileIndex
|
||||
unsigned char *pPPMData; // Храним указатель на Packet header, чтобы испольщовать его в Tire2 декодировании
|
||||
unsigned char *pPPMDataFirst; // Указатель на начало первого пакета в PacketHeader, если PPM используется
|
||||
int nPPM; // Флаг. Если для текущего Tile нашли маркер PPM, тогда флаг равен 1.
|
||||
int nPPMStore; // Используем, если нашли несколько маркеров PPM (храним их общую длину в байтах здесь)
|
||||
int nPPMPrevious; // Используем, если нашли несколько маркеров PPM (случай, если предыдущий маркер PPM был еще не закончен)
|
||||
int nPPMLength; // PPM bug 1
|
||||
TileCodingParams *pTCP; // Tile coding parameters
|
||||
int *pMatrix; // Fixed layer
|
||||
} CodingParams;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Tile
|
||||
// Информация относительно пакета в Tile
|
||||
typedef struct TPacketInfo
|
||||
{
|
||||
int nStartPos; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nEndPos; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nStartPos; // Начальная позиция
|
||||
int nEndPos; // Конечная позиция
|
||||
double dDisto;
|
||||
} PacketInfo;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Tiles <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Информация, относящаяся к Tiles внутри изображения
|
||||
typedef struct TTileInfo
|
||||
{
|
||||
double *pdThreshold; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> layer
|
||||
int nTileCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tiles
|
||||
int nStartPos; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nEndHeader; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nEndPos; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int anXPrecinctCount[33]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (precinct) <20><> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (resolution level)
|
||||
int anYPrecinctCount[33]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (precinct) <EFBFBD><EFBFBD> Y <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (resolution level)
|
||||
int anPrecinctWidth[33]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2), <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int anPrecinctHeight[33]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2), <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double *pdThreshold; // Значение порога для каждого layer
|
||||
int nTileCount; // Общее количество Tiles
|
||||
int nStartPos; // Начальная позиция
|
||||
int nEndHeader; // Конечная позиция для заголовка
|
||||
int nEndPos; // Конечная позиция
|
||||
int anXPrecinctCount[33]; // Количество областей (precinct) по Х для каждого уровня разрешения (resolution level)
|
||||
int anYPrecinctCount[33]; // Количество областей (precinct) по Y для каждого уровня разрешения (resolution level)
|
||||
int anPrecinctWidth[33]; // Ширина области (в степени 2), для какждого уровня разрешения
|
||||
int anPrecinctHeight[33]; // Высота области (в степени 2), для какждого уровня разрешения
|
||||
PacketInfo *pPacket; // PacketInfo
|
||||
int nNBPix; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Fixed Quality
|
||||
double dDistoTile; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Fixed Quality
|
||||
int nNBPix; // Добавляем Fixed Quality
|
||||
double dDistoTile; // Добавляем Fixed Quality
|
||||
} TileInfo;
|
||||
|
||||
typedef struct TImageInfo
|
||||
{
|
||||
int nIndexOn; // 0 - <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
double dDistoMax; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPacketCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nIndexOn; // 0 - нет нумерации, 1 - есть.
|
||||
double dDistoMax; // Максимальный уровень сокращения искажений для всего изображения
|
||||
int nPacketCount; // Количество пакетов
|
||||
int nIndexWrite; //
|
||||
int nImageWidth; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nImageHeight; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nImageWidth; // Ширина картинки
|
||||
int nImageHeight; // Высота картинки
|
||||
ProgressionOrder eProgOrder; // Progression Order
|
||||
int nXTsiz; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tile <EFBFBD><EFBFBD> <20>
|
||||
int nYTsiz; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tile <EFBFBD><EFBFBD> Y
|
||||
int nXTOsiz; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20>
|
||||
int nYTOsiz; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> Y
|
||||
int nXTilesCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>
|
||||
int nYTilesCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Y
|
||||
int nCompCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nLayersCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> layers
|
||||
int nDecompCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nMainHeadEnd; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Main Header
|
||||
int nCodestreamSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> codestream
|
||||
int nXTsiz; // Размер tile по Х
|
||||
int nYTsiz; // Размер tile по Y
|
||||
int nXTOsiz; // Сдвиг первого тайла по Х
|
||||
int nYTOsiz; // Сдвиг первого тайла по Y
|
||||
int nXTilesCount; // Количество тайлов по Х
|
||||
int nYTilesCount; // Количество тайлов по Y
|
||||
int nCompCount; // Количество компонент
|
||||
int nLayersCount; // Количество layers
|
||||
int nDecompCount; // Количество уровней разложения
|
||||
int nMainHeadEnd; // Позиция окончания Main Header
|
||||
int nCodestreamSize; // Размер codestream
|
||||
TileInfo *pTile; // TileInfo
|
||||
} ImageInfo;
|
||||
|
||||
// JPEG-2000 codestream reader/writer
|
||||
typedef struct TJ2kCodestream
|
||||
{
|
||||
PCommon pCodecInfo; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nState; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Codestream'a ( Main header, Tile header, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||
int nCurTileIndex; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//unsigned char *pEndOfTile; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> codestream (<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> codestream)
|
||||
PCommon pCodecInfo; // Общая информация для кодирования и декодирования
|
||||
int nState; // Здесь хранам текущую позицию декодера Codestream'a ( Main header, Tile header, конец декодирования )
|
||||
int nCurTileIndex; // Номер текущего тайла (т.е. который в данный момент кодируется/декодируется)
|
||||
//unsigned char *pEndOfTile; // Используется для определения позиции конца тайла в codestream (чтобы определить нормальный ли codestream)
|
||||
int nSizeOfTile;
|
||||
int nSOTStartPos; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SOT, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nSODStartPos; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SOD
|
||||
int nPosCorrection; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> J2k-<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char **ppTileData; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int *pTileLen; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
TileCodingParams *pDefaultTCP; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( COD, COC )
|
||||
Image *pImage; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CodingParams *pCodingParams; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nSOTStartPos; // Сохраняем начальную позицию маркера SOT, чтобы после кодирования текущего тайла мы могли вернуться и записать длину данного маркера
|
||||
int nSODStartPos; // Аналогично, для маркера SOD
|
||||
int nPosCorrection; // Необходимо для корректировки позиции, поскольку J2k-файл пишется в несколько частей, во время кодирования
|
||||
unsigned char **ppTileData; // Массив с данными всех тайлов
|
||||
int *pTileLen; // Массив, хранящий размер данных для каждого тайла
|
||||
TileCodingParams *pDefaultTCP; // Используется только при декомпрессии: храним общую информацию для всех тайлов ( COD, COC )
|
||||
Image *pImage; // Указатель на изображения, которое мы либо кодируем, либо декодируем
|
||||
CodingParams *pCodingParams; // Указатель на структуру, хранящую информацию о кодировании
|
||||
ImageInfo *pImageInfo; //
|
||||
CReader *pStreamIO; // Input / Output stream
|
||||
} J2kCodestream;
|
||||
@ -482,89 +490,89 @@ namespace Jpeg2000
|
||||
|
||||
typedef struct TLayer
|
||||
{
|
||||
int nPassesCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nLen; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dDisto; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pData; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPassesCount; // Количество проходов
|
||||
int nLen; // Длина информации
|
||||
double dDisto; // Отклонение
|
||||
unsigned char *pData; // Данные
|
||||
} Layer;
|
||||
|
||||
typedef struct TCodeBlock
|
||||
{
|
||||
int nX0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock
|
||||
int nY0; // (x0, y0) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX1; // (<EFBFBD>1, <EFBFBD>1) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX0; // Размеры CodeBlock
|
||||
int nY0; // (x0, y0) - левый верхний угол
|
||||
int nX1; // (х1, у1) - правый нижний угол
|
||||
int nY1; //
|
||||
int nBPSCount; //
|
||||
int nLenBitsCount; //
|
||||
int nLen; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPassesCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock
|
||||
int nNewPassesCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock
|
||||
int nSegmentsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TCDSegment aSegments[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char aData[8192]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPassesCountInLayers; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
Layer aLayers[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nTotalPassesCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TCDPass aPasses[100]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nLen; // Длина
|
||||
int nPassesCount; // Количество уже завершенных проходов для данного CodeBlock
|
||||
int nNewPassesCount; // Количество проходов добавленных к данному CodeBlock
|
||||
int nSegmentsCount; // Количество сегментов
|
||||
TCDSegment aSegments[100]; // Сами сегменты
|
||||
unsigned char aData[8192]; // Данные
|
||||
int nPassesCountInLayers; // Количество проходов в лэйре
|
||||
Layer aLayers[100]; // Информация о лэйерах
|
||||
int nTotalPassesCount; // Общее число проходов
|
||||
TCDPass aPasses[100]; // Информация о проходах
|
||||
} CodeBlock;
|
||||
|
||||
typedef struct TPrecinct
|
||||
{
|
||||
int nX0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Precinct
|
||||
int nY0; // (x0, y0) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX1; // (<EFBFBD>1, <EFBFBD>1) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX0; // Размеры Precinct
|
||||
int nY0; // (x0, y0) - левый верхний угол
|
||||
int nX1; // (х1, у1) - правый нижний угол
|
||||
int nY1; //
|
||||
int nCountInWidth; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nCountInHeight; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nCountInWidth; // Количество блоков в ширину
|
||||
int nCountInHeight; // Количество блоков в высоту
|
||||
CodeBlock *pCodeBlocks; // CodeBlocks
|
||||
TagTree *pInclTree; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TagTree *pIMSBTree; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMSB
|
||||
TagTree *pInclTree; // Дерево включения
|
||||
TagTree *pIMSBTree; // Дерево IMSB
|
||||
} Precinct;
|
||||
|
||||
typedef struct TBand
|
||||
{
|
||||
int nX0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Band
|
||||
int nY0; // (x0, y0) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX1; // (<EFBFBD>1, <EFBFBD>1) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX0; // Размеры Band
|
||||
int nY0; // (x0, y0) - левый верхний угол
|
||||
int nX1; // (х1, у1) - правый нижний угол
|
||||
int nY1; //
|
||||
int nBandIndex; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Band
|
||||
Precinct *pPrecincts; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Precinct), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Band
|
||||
int nBandIndex; // Номер текущего Band
|
||||
Precinct *pPrecincts; // Информация о областях(Precinct), входящий в данный Band
|
||||
int nBPSCount; //
|
||||
float fStepSize; //
|
||||
} Band;
|
||||
|
||||
typedef struct TResolution
|
||||
{
|
||||
int nX0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Resolution
|
||||
int nY0; // (x0, y0) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX1; // (<EFBFBD>1, <EFBFBD>1) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX0; // Размеры Resolution
|
||||
int nY0; // (x0, y0) - левый верхний угол
|
||||
int nX1; // (х1, у1) - правый нижний угол
|
||||
int nY1; //
|
||||
int nPrecCountW; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Precinct) <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nPrecCountH; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Precinct) <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nBandsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Sub-band
|
||||
int nPrecCountW; // Количество областей (Precinct) по ширине
|
||||
int nPrecCountH; // Количество областей (Precinct) по высоте
|
||||
int nBandsCount; // Количество Sub-band
|
||||
Band aBands[3]; // Sub-bands
|
||||
} Resolution;
|
||||
|
||||
typedef struct TTileComp
|
||||
{
|
||||
int nX0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TileComp
|
||||
int nY0; // (x0, y0) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX1; // (<EFBFBD>1, <EFBFBD>1) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX0; // Размеры TileComp
|
||||
int nY0; // (x0, y0) - левый верхний угол
|
||||
int nX1; // (х1, у1) - правый нижний угол
|
||||
int nY1; //
|
||||
int nResolutionsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Resolution *pResolutions; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Resolutions)
|
||||
int *pData; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nResolutionsCount; // Число разрешений
|
||||
Resolution *pResolutions; // Разрешения (Resolutions)
|
||||
int *pData; // Данные компоненты
|
||||
int nNBPix; // Fixed_quality
|
||||
} TileComp;
|
||||
|
||||
typedef struct TTile
|
||||
{
|
||||
int nX0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tile
|
||||
int nY0; // (x0, y0) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX1; // (<EFBFBD>1, <EFBFBD>1) - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nX0; // Размеры Tile
|
||||
int nY0; // (x0, y0) - левый верхний угол
|
||||
int nX1; // (х1, у1) - правый нижний угол
|
||||
int nY1; //
|
||||
int nComponentsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TileComp *pComponents; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nComponentsCount; // Количество компонент
|
||||
TileComp *pComponents; // Компоненты
|
||||
int nNBPix; // Fixed_quality
|
||||
double dDistoTile; // Fixed_quality
|
||||
double adDistoLayer[100]; // Fixed_quality
|
||||
@ -572,20 +580,20 @@ namespace Jpeg2000
|
||||
|
||||
typedef struct TTCDImage
|
||||
{
|
||||
int nTilesCountW; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nTilesCountH; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Tile *pTiles; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nTilesCountW; // Количество тайлов по ширине
|
||||
int nTilesCountH; // Количество тайлов по высоте
|
||||
Tile *pTiles; // Тайлы
|
||||
} TCDImage;
|
||||
|
||||
typedef struct TTCD
|
||||
{
|
||||
PCommon pCodecInfo; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
TCDImage *pTCDImage; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Image *pImage; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CodingParams *pCodingParams; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Tile *pTCDTile; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
TileCodingParams *pTCP; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nTCDTileIndex; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
PCommon pCodecInfo; // Информация о кодеке
|
||||
TCDImage *pTCDImage; // Кодированное Изображение
|
||||
Image *pImage; // Изображение
|
||||
CodingParams *pCodingParams; // Параметры
|
||||
Tile *pTCDTile; // Указатель на текущий кодируемый/декодируемый тайл
|
||||
TileCodingParams *pTCP; // Параметры кодирования/декодирования для всех тайлов
|
||||
int nTCDTileIndex; // Номер текущего кодируемого/декодируемого тайла
|
||||
} TCD;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
@ -626,18 +634,18 @@ namespace Jpeg2000
|
||||
//opj_jp2_cdef_t *jp2_cdef;
|
||||
//opj_jp2_pclr_t *jp2_pclr;
|
||||
|
||||
BOOL has_colr;
|
||||
bool has_colr;
|
||||
} Jp2Color;
|
||||
|
||||
// Jp2 file format reader/writer
|
||||
typedef struct TJp2Stream
|
||||
{
|
||||
PCommon pCodecInfo; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
J2kCodestream *pJ2k; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JPEG2000 Codestream
|
||||
PCommon pCodecInfo; // Общая информация для кодирования и декодирования
|
||||
J2kCodestream *pJ2k; // Указатель на структуру для чтения/записи JPEG2000 Codestream
|
||||
|
||||
unsigned int nWidth; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int nHeight; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int nComponentsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int nWidth; // Ширина изображения
|
||||
unsigned int nHeight; // Высота изображения
|
||||
unsigned int nComponentsCount; // Число компонент
|
||||
unsigned int nBPC; // Bits per component
|
||||
unsigned int nCompressionType; // CompressionType
|
||||
unsigned int nColorSpaceUnk; // Colourspace Unknown
|
||||
@ -650,7 +658,7 @@ namespace Jpeg2000
|
||||
|
||||
unsigned int nBrand; // Brand
|
||||
unsigned int nMinVersion; // MinVersion
|
||||
unsigned int nCompListLength; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Compatibility list
|
||||
unsigned int nCompListLength; // Длина списка Compatibility list
|
||||
unsigned int *pCompList; // Compatibility list
|
||||
|
||||
Jp2Component *pComponents;
|
||||
@ -672,16 +680,16 @@ namespace Jpeg2000
|
||||
// MQ-coder (ArithmeticCoder.h)
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// <EFBFBD><EFBFBD>. Annex C. fcd15444-1.pdf ( MQ-coder Encoder/Decoder )
|
||||
// См. Annex C. fcd15444-1.pdf ( MQ-coder Encoder/Decoder )
|
||||
|
||||
#define MQC_NUMCTXS 32
|
||||
|
||||
typedef struct TMQCoderState
|
||||
{
|
||||
unsigned int nLPSValue; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Least Probable Symbol) (0.75->0x8000, 1.5->0xffff)
|
||||
int nMPS; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( 0 <EFBFBD><EFBFBD><EFBFBD> 1 ) (Most Probable Symbol)
|
||||
struct TMQCoderState *pNextMPS; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MPS
|
||||
struct TMQCoderState *pNextLPS; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LPS
|
||||
unsigned int nLPSValue; // вероятность для наименьшего вероятностного символа (Least Probable Symbol) (0.75->0x8000, 1.5->0xffff)
|
||||
int nMPS; // наибольший вероятностный символ ( 0 или 1 ) (Most Probable Symbol)
|
||||
struct TMQCoderState *pNextMPS; // Указатель на следующее состояние, если следующий закодированный символ MPS
|
||||
struct TMQCoderState *pNextLPS; // Указатель на следующее состояние, если следующий закодированный символ LPS
|
||||
} MQCoderState;
|
||||
|
||||
// MQ-coder
|
||||
@ -704,13 +712,13 @@ namespace Jpeg2000
|
||||
|
||||
typedef struct TRaw
|
||||
{
|
||||
unsigned char nBuffer; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int nFreeBitsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int nMaxLen; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int nLen; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pBufferPointer; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pBufferStart; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pBufferEnd; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char nBuffer; // Временный буфер, в котором происходит побитовое кодирование/декодирование
|
||||
unsigned int nFreeBitsCount; // Количество бит, свободных для чтения или записи
|
||||
unsigned int nMaxLen; // Максимальная длина для декодирования
|
||||
unsigned int nLen; // Длина декодированной информации
|
||||
unsigned char *pBufferPointer; // Указатель на текущую позицию в буфере
|
||||
unsigned char *pBufferStart; // Указатель на начало буфера
|
||||
unsigned char *pBufferEnd; // Указатель на конец буфера
|
||||
} Raw;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
@ -751,24 +759,24 @@ namespace Jpeg2000
|
||||
|
||||
typedef struct TPacketIterator
|
||||
{
|
||||
short int *pInclude; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> POC)
|
||||
int nStepLayer; // LayerStep <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> pInclude
|
||||
int nStepResolution; // ResoultionStep <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> pInclude
|
||||
int nStepComponent; // ComponentStep <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> pInclude
|
||||
int nStepPrecinct; // PrecinctStep <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> pInclude
|
||||
short int *pInclude; // Флаг, сигнализирующий использовался ли данный пакет (используется в POC)
|
||||
int nStepLayer; // LayerStep используется для локализации пакета в pInclude
|
||||
int nStepResolution; // ResoultionStep используется для локализации пакета в pInclude
|
||||
int nStepComponent; // ComponentStep используется для локализации пакета в pInclude
|
||||
int nStepPrecinct; // PrecinctStep используется для локализации пакета в pInclude
|
||||
|
||||
int nIndexComponent; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nIndexResolution; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nIndexPrecinct; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nIndexLayer; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nIndexComponent; // Номер компоненты для определения пакета
|
||||
int nIndexResolution; // Номер уровня детализации для определения пакета
|
||||
int nIndexPrecinct; // Номер области для определения пакета
|
||||
int nIndexLayer; // Номер лэйера для определения пакета
|
||||
|
||||
int nFirst; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nFirst; // Флаг, определяющий первый ли это пакет
|
||||
POC oPOC; // Progression Order Change
|
||||
int nComponentsCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nComponentsCount; // Число компонент
|
||||
|
||||
PacketComponent *pComponents;
|
||||
int nTileX0; //
|
||||
int nTileY0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nTileY0; // Границы текущего тайла
|
||||
int nTileX1; //
|
||||
int nTileY1; //
|
||||
int nX;
|
||||
@ -778,22 +786,22 @@ namespace Jpeg2000
|
||||
} PacketIterator;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
// Tier-1 coding (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// Tier-1 coding (кодирование коэффициентов)
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define T1_NMSEDEC_BITS 7
|
||||
|
||||
#define T1_MAXCBLKW 1024 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock (<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
#define T1_MAXCBLKH 1024 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeBlock (<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
#define T1_MAXCBLKW 1024 // Максимальный размер CodeBlock (по ширине)
|
||||
#define T1_MAXCBLKH 1024 // Максимальный размер CodeBlock (по высоте)
|
||||
|
||||
#define T1_SIG_NE 0x0001 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define T1_SIG_SE 0x0002 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define T1_SIG_SW 0x0004 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define T1_SIG_NW 0x0008 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define T1_SIG_N 0x0010 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define T1_SIG_E 0x0020 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define T1_SIG_S 0x0040 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define T1_SIG_W 0x0080 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define T1_SIG_NE 0x0001 // Ориентация контекста : Северо-восточное направление
|
||||
#define T1_SIG_SE 0x0002 // Ориентация контекста : юго-восточное направление
|
||||
#define T1_SIG_SW 0x0004 // Ориентация контекста : юго-западное направление
|
||||
#define T1_SIG_NW 0x0008 // Ориентация контекста : северо-западное направление
|
||||
#define T1_SIG_N 0x0010 // Ориентация контекста : северное направление
|
||||
#define T1_SIG_E 0x0020 // Ориентация контекста : восточное направление
|
||||
#define T1_SIG_S 0x0040 // Ориентация контекста : южное направление
|
||||
#define T1_SIG_W 0x0080 // Ориентация контекста : западное направление
|
||||
#define T1_SIG_OTH (T1_SIG_N|T1_SIG_NE|T1_SIG_E|T1_SIG_SE|T1_SIG_S|T1_SIG_SW|T1_SIG_W|T1_SIG_NW)
|
||||
#define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W)
|
||||
|
||||
@ -822,16 +830,16 @@ namespace Jpeg2000
|
||||
|
||||
#define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS - 1)
|
||||
|
||||
#define T1_TYPE_MQ 0 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Arithmetic entropy coding (Annex C)
|
||||
#define T1_TYPE_RAW 1 // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Codestream <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
#define T1_TYPE_MQ 0 // Нормальное кодирование, с использованием Arithmetic entropy coding (Annex C)
|
||||
#define T1_TYPE_RAW 1 // Нет никакого кодирования, информация в Codestream содержится в сыром виде
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
typedef struct TTier1
|
||||
{
|
||||
PCommon pCodecInfo; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MQCoder *pMQCoder; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MQ-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Raw *pRaw; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PCommon pCodecInfo; // Информация о кодеке
|
||||
MQCoder *pMQCoder; // Указатель на структуру для чтения/записи MQ-кодированных данных
|
||||
Raw *pRaw; // Указатель на структуру для чтения/записи некодированных данных
|
||||
|
||||
int lut_ctxno_zc[1024];
|
||||
int lut_ctxno_sc[256];
|
||||
@ -842,8 +850,8 @@ namespace Jpeg2000
|
||||
int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS];
|
||||
int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS];
|
||||
|
||||
int aData[T1_MAXCBLKH][T1_MAXCBLKW]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> codeblock
|
||||
int aFlags[T1_MAXCBLKH + 2][T1_MAXCBLKH + 2]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int aData[T1_MAXCBLKH][T1_MAXCBLKW]; // Данные codeblock
|
||||
int aFlags[T1_MAXCBLKH + 2][T1_MAXCBLKH + 2]; // Флаги
|
||||
|
||||
} Tier1;
|
||||
|
||||
@ -854,7 +862,7 @@ namespace Jpeg2000
|
||||
typedef struct TTier2
|
||||
{
|
||||
PCommon pCodecInfo;
|
||||
Image *pImage; // Encoding: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Decoding: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
Image *pImage; // Encoding: указатель на исходную картинку. Decoding: указатель на результирующую картинку.
|
||||
CodingParams *pCodingParams;
|
||||
} Tier2;
|
||||
|
||||
@ -1075,11 +1083,11 @@ namespace Jpeg2000
|
||||
|
||||
typedef struct TBitIO
|
||||
{
|
||||
unsigned char *pStart; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pEnd; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pCurPos; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned int nBuffer; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nValidBitsCount; // Coder : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Decoder : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
unsigned char *pStart; // Указатель на начало буфера
|
||||
unsigned char *pEnd; // Указатель на конец буфера
|
||||
unsigned char *pCurPos; // Указатель на текущую позицию в буфере
|
||||
unsigned int nBuffer; // Буфер
|
||||
int nValidBitsCount; // Coder : число свободных бит для записи
|
||||
// Decoder : число доступных бит для чтения
|
||||
} BitIO;
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
namespace Jpeg2000
|
||||
{
|
||||
@ -7,9 +7,9 @@ namespace Jpeg2000
|
||||
return 0;
|
||||
// LARGE_INTEGER oFreq, oTime;
|
||||
|
||||
//// oFreq - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> CPU
|
||||
//// oFreq - скорость часов у CPU
|
||||
// QueryPerformanceFrequency( &oFreq );
|
||||
// // oTime - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>(<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> oFreq)
|
||||
// // oTime - текущее время(в смысле oFreq)
|
||||
// QueryPerformanceCounter ( &oTime ) ;
|
||||
// return ( oTime.QuadPart /(double) oFreq.QuadPart ) ;
|
||||
}
|
||||
@ -30,25 +30,25 @@ namespace Jpeg2000
|
||||
return nValue;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nA <EFBFBD><EFBFBD> nB <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Делим nA на nB и округляем в большую сторону
|
||||
static __inline int CeilDiv(int nA, int nB)
|
||||
{
|
||||
return (nA + nB - 1) / nB;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nA <EFBFBD><EFBFBD> 2^nB <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Делим nA на 2^nB и округляем в большую сторону
|
||||
static __inline int CeilDivPow2(int nA, int nB)
|
||||
{
|
||||
return (nA + (1 << nB) - 1) >> nB;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nA <EFBFBD><EFBFBD> 2^nB <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Делим nA на 2^nB и округляем в меньшую сторону
|
||||
static __inline int FloorDivPow2(int nA, int nB)
|
||||
{
|
||||
return nA >> nB;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><> <20><><EFBFBD><EFBFBD><EFBFBD> nA <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Берем логарифм по основанию 2 от числа nA и округляем в меньшую сторону
|
||||
static __inline int FloorLog2(int nA)
|
||||
{
|
||||
int nL;
|
||||
@ -67,7 +67,7 @@ namespace Jpeg2000
|
||||
static const double c_adNormRCT[3] ={ 1.732, .8292, .8292 };
|
||||
static const double c_adNormICT[3] ={ 1.732, 1.805, 1.573 };
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Annex G.2.1)
|
||||
// Применяем обратимое много-компонентное преобразование к изображению (Annex G.2.1)
|
||||
static void ForwardRCT(int *pRed, int *pGreen, int *pBlue, int nSamplesCount)
|
||||
{
|
||||
for (int nIndex = 0; nIndex < nSamplesCount; nIndex++)
|
||||
@ -85,7 +85,7 @@ namespace Jpeg2000
|
||||
}
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Annex G.2.2)
|
||||
// Применяем обратимое много-компонентное обратное преобазование к изображению (Annex G.2.2)
|
||||
static void InverseRCT(int *pRed, int *pGreen, int *pBlue, int nSamplesCount)
|
||||
{
|
||||
for (int nIndex = 0; nIndex < nSamplesCount; nIndex++)
|
||||
@ -109,7 +109,7 @@ namespace Jpeg2000
|
||||
return c_adNormRCT[nComponentIndex];
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Annex G.3.1)
|
||||
// Применяем необратимое много-компонентное преобразование к изображению (Annex G.3.1)
|
||||
static void ForwardICT(int *pRed, int *pGreen, int *pBlue, int nSamplesCount)
|
||||
{
|
||||
for (int nIndex = 0; nIndex < nSamplesCount; nIndex++)
|
||||
@ -127,7 +127,7 @@ namespace Jpeg2000
|
||||
}
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Annex G.3.2)
|
||||
// Применяем необратимое много-компонентное обратное преобазование к изображению (Annex G.3.2)
|
||||
static void InverseICT(int *pRed, int *pGreen, int *pBlue, int nSamplesCount)
|
||||
{
|
||||
for (int nIndex = 0; nIndex < nSamplesCount; nIndex++)
|
||||
|
||||
Reference in New Issue
Block a user