| Index: core/src/fxcodec/jbig2/JBig2_Context.cpp
|
| diff --git a/core/src/fxcodec/jbig2/JBig2_Context.cpp b/core/src/fxcodec/jbig2/JBig2_Context.cpp
|
| index c66c2ebaea739b9a3059f0e8d3753d740eede183..46ed6f081e4d6965f0eacbbd6303fa08ae05252c 100644
|
| --- a/core/src/fxcodec/jbig2/JBig2_Context.cpp
|
| +++ b/core/src/fxcodec/jbig2/JBig2_Context.cpp
|
| @@ -4,7 +4,6 @@
|
|
|
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
|
|
| -#include <map>
|
| #include <list>
|
| #include "JBig2_Context.h"
|
|
|
| @@ -47,11 +46,9 @@ CJBig2_Context::CJBig2_Context(uint8_t* pGlobalData,
|
| } else {
|
| m_pGlobalContext = NULL;
|
| }
|
| - JBIG2_ALLOC(m_pStream, CJBig2_BitStream(pData, dwLength));
|
| + m_pStream = new CJBig2_BitStream(pData, dwLength);
|
| m_nStreamType = nStreamType;
|
| m_nState = JBIG2_OUT_OF_PAGE;
|
| - JBIG2_ALLOC(m_pSegmentList, CJBig2_List<CJBig2_Segment>);
|
| - JBIG2_ALLOC(m_pPageInfoList, CJBig2_List<JBig2PageInfo>(1));
|
| m_pPage = NULL;
|
| m_bBufSpecified = FALSE;
|
| m_pPause = pPause;
|
| @@ -60,7 +57,6 @@ CJBig2_Context::CJBig2_Context(uint8_t* pGlobalData,
|
| m_pArithDecoder = NULL;
|
| m_pGRD = NULL;
|
| m_gbContext = NULL;
|
| - m_pSegment = NULL;
|
| m_dwOffset = 0;
|
| m_ProcessiveStatus = FXCODEC_STATUS_FRAME_READY;
|
| m_pSymbolDictCache = pSymbolDictCache;
|
| @@ -76,16 +72,12 @@ CJBig2_Context::~CJBig2_Context() {
|
| m_gbContext = NULL;
|
| delete m_pGlobalContext;
|
| m_pGlobalContext = NULL;
|
| - delete m_pPageInfoList;
|
| - m_pPageInfoList = NULL;
|
| if (m_bBufSpecified) {
|
| delete m_pPage;
|
| }
|
| m_pPage = NULL;
|
| delete m_pStream;
|
| m_pStream = NULL;
|
| - delete m_pSegmentList;
|
| - m_pSegmentList = NULL;
|
| }
|
| int32_t CJBig2_Context::decodeFile(IFX_Pause* pPause) {
|
| uint8_t cFlags;
|
| @@ -115,8 +107,8 @@ int32_t CJBig2_Context::decodeFile(IFX_Pause* pPause) {
|
| goto failed;
|
| }
|
| if (dwTemp > 0) {
|
| - delete m_pPageInfoList;
|
| - JBIG2_ALLOC(m_pPageInfoList, CJBig2_List<JBig2PageInfo>(dwTemp));
|
| + m_PageInfoList.clear();
|
| + m_PageInfoList.resize(dwTemp);
|
| }
|
| }
|
| if (cFlags & 0x01) {
|
| @@ -131,50 +123,46 @@ failed:
|
| }
|
| int32_t CJBig2_Context::decode_SquentialOrgnazation(IFX_Pause* pPause) {
|
| int32_t nRet;
|
| - if (m_pStream->getByteLeft() > 0) {
|
| - while (m_pStream->getByteLeft() >= JBIG2_MIN_SEGMENT_SIZE) {
|
| - if (m_pSegment == NULL) {
|
| - JBIG2_ALLOC(m_pSegment, CJBig2_Segment());
|
| - nRet = parseSegmentHeader(m_pSegment);
|
| - if (nRet != JBIG2_SUCCESS) {
|
| - delete m_pSegment;
|
| - m_pSegment = NULL;
|
| - return nRet;
|
| - }
|
| - m_dwOffset = m_pStream->getOffset();
|
| - }
|
| - nRet = parseSegmentData(m_pSegment, pPause);
|
| - if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
|
| - m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
|
| - m_PauseStep = 2;
|
| - return JBIG2_SUCCESS;
|
| - }
|
| - if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
|
| - delete m_pSegment;
|
| - m_pSegment = NULL;
|
| - break;
|
| - } else if (nRet != JBIG2_SUCCESS) {
|
| - delete m_pSegment;
|
| - m_pSegment = NULL;
|
| + if (m_pStream->getByteLeft() <= 0)
|
| + return JBIG2_END_OF_FILE;
|
| +
|
| + while (m_pStream->getByteLeft() >= JBIG2_MIN_SEGMENT_SIZE) {
|
| + if (!m_pSegment) {
|
| + m_pSegment.reset(new CJBig2_Segment);
|
| + nRet = parseSegmentHeader(m_pSegment.get());
|
| + if (nRet != JBIG2_SUCCESS) {
|
| + m_pSegment.reset();
|
| return nRet;
|
| }
|
| - m_pSegmentList->addItem(m_pSegment);
|
| - if (m_pSegment->m_dwData_length != 0xffffffff) {
|
| - m_dwOffset = m_dwOffset + m_pSegment->m_dwData_length;
|
| - m_pStream->setOffset(m_dwOffset);
|
| - } else {
|
| - m_pStream->offset(4);
|
| - }
|
| - m_pSegment = NULL;
|
| - if (m_pStream->getByteLeft() > 0 && m_pPage && pPause &&
|
| - pPause->NeedToPauseNow()) {
|
| - m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
|
| - m_PauseStep = 2;
|
| - return JBIG2_SUCCESS;
|
| - }
|
| + m_dwOffset = m_pStream->getOffset();
|
| + }
|
| + nRet = parseSegmentData(m_pSegment.get(), pPause);
|
| + if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
|
| + m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
|
| + m_PauseStep = 2;
|
| + return JBIG2_SUCCESS;
|
| + }
|
| + if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
|
| + m_pSegment.reset();
|
| + return JBIG2_SUCCESS;
|
| + }
|
| + if (nRet != JBIG2_SUCCESS) {
|
| + m_pSegment.reset();
|
| + return nRet;
|
| + }
|
| + if (m_pSegment->m_dwData_length != 0xffffffff) {
|
| + m_dwOffset = m_dwOffset + m_pSegment->m_dwData_length;
|
| + m_pStream->setOffset(m_dwOffset);
|
| + } else {
|
| + m_pStream->offset(4);
|
| + }
|
| + m_SegmentList.push_back(m_pSegment.release());
|
| + if (m_pStream->getByteLeft() > 0 && m_pPage && pPause &&
|
| + pPause->NeedToPauseNow()) {
|
| + m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
|
| + m_PauseStep = 2;
|
| + return JBIG2_SUCCESS;
|
| }
|
| - } else {
|
| - return JBIG2_END_OF_FILE;
|
| }
|
| return JBIG2_SUCCESS;
|
| }
|
| @@ -182,19 +170,16 @@ int32_t CJBig2_Context::decode_EmbedOrgnazation(IFX_Pause* pPause) {
|
| return decode_SquentialOrgnazation(pPause);
|
| }
|
| int32_t CJBig2_Context::decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause) {
|
| - CJBig2_Segment* pSegment;
|
| int32_t nRet;
|
| while (m_pStream->getByteLeft() > JBIG2_MIN_SEGMENT_SIZE) {
|
| - JBIG2_ALLOC(pSegment, CJBig2_Segment());
|
| - nRet = parseSegmentHeader(pSegment);
|
| + nonstd::unique_ptr<CJBig2_Segment> pSegment(new CJBig2_Segment);
|
| + nRet = parseSegmentHeader(pSegment.get());
|
| if (nRet != JBIG2_SUCCESS) {
|
| - delete pSegment;
|
| return nRet;
|
| } else if (pSegment->m_cFlags.s.type == 51) {
|
| - delete pSegment;
|
| break;
|
| }
|
| - m_pSegmentList->addItem(pSegment);
|
| + m_SegmentList.push_back(pSegment.release());
|
| if (pPause && m_pPause && pPause->NeedToPauseNow()) {
|
| m_PauseStep = 3;
|
| m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
|
| @@ -205,14 +190,15 @@ int32_t CJBig2_Context::decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause) {
|
| return decode_RandomOrgnazation(pPause);
|
| }
|
| int32_t CJBig2_Context::decode_RandomOrgnazation(IFX_Pause* pPause) {
|
| - int32_t nRet;
|
| - for (; m_nSegmentDecoded < m_pSegmentList->getLength(); m_nSegmentDecoded++) {
|
| - nRet = parseSegmentData(m_pSegmentList->getAt(m_nSegmentDecoded), pPause);
|
| - if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
|
| - break;
|
| - } else if (nRet != JBIG2_SUCCESS) {
|
| + for (; m_nSegmentDecoded < m_SegmentList.size(); ++m_nSegmentDecoded) {
|
| + int32_t nRet =
|
| + parseSegmentData(m_SegmentList.get(m_nSegmentDecoded), pPause);
|
| + if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE))
|
| + return JBIG2_SUCCESS;
|
| +
|
| + if (nRet != JBIG2_SUCCESS)
|
| return nRet;
|
| - }
|
| +
|
| if (m_pPage && pPause && pPause->NeedToPauseNow()) {
|
| m_PauseStep = 4;
|
| m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
|
| @@ -312,20 +298,19 @@ int32_t CJBig2_Context::getFirstPage(CJBig2_Image** image, IFX_Pause* pPause) {
|
| }
|
| CJBig2_Segment* CJBig2_Context::findSegmentByNumber(FX_DWORD dwNumber) {
|
| CJBig2_Segment* pSeg;
|
| - int32_t i;
|
| if (m_pGlobalContext) {
|
| pSeg = m_pGlobalContext->findSegmentByNumber(dwNumber);
|
| if (pSeg) {
|
| return pSeg;
|
| }
|
| }
|
| - for (i = 0; i < m_pSegmentList->getLength(); i++) {
|
| - pSeg = m_pSegmentList->getAt(i);
|
| + for (size_t i = 0; i < m_SegmentList.size(); ++i) {
|
| + pSeg = m_SegmentList.get(i);
|
| if (pSeg->m_dwNumber == dwNumber) {
|
| return pSeg;
|
| }
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| CJBig2_Segment* CJBig2_Context::findReferredSegmentByTypeAndIndex(
|
| CJBig2_Segment* pSegment,
|
| @@ -480,23 +465,21 @@ int32_t CJBig2_Context::ProcessiveParseSegmentData(CJBig2_Segment* pSegment,
|
| }
|
| case 48: {
|
| FX_WORD wTemp;
|
| - JBig2PageInfo* pPageInfo;
|
| - JBIG2_ALLOC(pPageInfo, JBig2PageInfo);
|
| + nonstd::unique_ptr<JBig2PageInfo> pPageInfo(new JBig2PageInfo);
|
| if ((m_pStream->readInteger(&pPageInfo->m_dwWidth) != 0) ||
|
| (m_pStream->readInteger(&pPageInfo->m_dwHeight) != 0) ||
|
| (m_pStream->readInteger(&pPageInfo->m_dwResolutionX) != 0) ||
|
| (m_pStream->readInteger(&pPageInfo->m_dwResolutionY) != 0) ||
|
| (m_pStream->read1Byte(&pPageInfo->m_cFlags) != 0) ||
|
| (m_pStream->readShortInteger(&wTemp) != 0)) {
|
| - delete pPageInfo;
|
| goto failed1;
|
| }
|
| pPageInfo->m_bIsStriped = ((wTemp >> 15) & 1) ? 1 : 0;
|
| pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff;
|
| if ((pPageInfo->m_dwHeight == 0xffffffff) &&
|
| - (pPageInfo->m_bIsStriped != 1)) {
|
| + (pPageInfo->m_bIsStriped != TRUE)) {
|
| m_pModule->JBig2_Warn("page height = 0xffffffff buf stripe field is 0");
|
| - pPageInfo->m_bIsStriped = 1;
|
| + pPageInfo->m_bIsStriped = TRUE;
|
| }
|
| if (!m_bBufSpecified) {
|
| delete m_pPage;
|
| @@ -509,7 +492,7 @@ int32_t CJBig2_Context::ProcessiveParseSegmentData(CJBig2_Segment* pSegment,
|
| }
|
| }
|
| m_pPage->fill((pPageInfo->m_cFlags & 4) ? 1 : 0);
|
| - m_pPageInfoList->addItem(pPageInfo);
|
| + m_PageInfoList.push_back(pPageInfo.release());
|
| m_nState = JBIG2_IN_PAGE;
|
| } break;
|
| case 49:
|
| @@ -653,16 +636,14 @@ int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment,
|
| }
|
| nIndex = 0;
|
| if (cSDHUFFDH == 0) {
|
| - JBIG2_ALLOC(Table_B4, CJBig2_HuffmanTable(HuffmanTable_B4,
|
| - sizeof(HuffmanTable_B4) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B4));
|
| + Table_B4 = new CJBig2_HuffmanTable(HuffmanTable_B4,
|
| + FX_ArraySize(HuffmanTable_B4),
|
| + HuffmanTable_HTOOB_B4);
|
| pSymbolDictDecoder->SDHUFFDH = Table_B4;
|
| } else if (cSDHUFFDH == 1) {
|
| - JBIG2_ALLOC(Table_B5, CJBig2_HuffmanTable(HuffmanTable_B5,
|
| - sizeof(HuffmanTable_B5) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B5));
|
| + Table_B5 = new CJBig2_HuffmanTable(HuffmanTable_B5,
|
| + FX_ArraySize(HuffmanTable_B5),
|
| + HuffmanTable_HTOOB_B5);
|
| pSymbolDictDecoder->SDHUFFDH = Table_B5;
|
| } else {
|
| pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
|
| @@ -676,16 +657,14 @@ int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment,
|
| pSymbolDictDecoder->SDHUFFDH = pSeg->m_Result.ht;
|
| }
|
| if (cSDHUFFDW == 0) {
|
| - JBIG2_ALLOC(Table_B2, CJBig2_HuffmanTable(HuffmanTable_B2,
|
| - sizeof(HuffmanTable_B2) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B2));
|
| + Table_B2 = new CJBig2_HuffmanTable(HuffmanTable_B2,
|
| + FX_ArraySize(HuffmanTable_B2),
|
| + HuffmanTable_HTOOB_B2);
|
| pSymbolDictDecoder->SDHUFFDW = Table_B2;
|
| } else if (cSDHUFFDW == 1) {
|
| - JBIG2_ALLOC(Table_B3, CJBig2_HuffmanTable(HuffmanTable_B3,
|
| - sizeof(HuffmanTable_B3) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B3));
|
| + Table_B3 = new CJBig2_HuffmanTable(HuffmanTable_B3,
|
| + FX_ArraySize(HuffmanTable_B3),
|
| + HuffmanTable_HTOOB_B3);
|
| pSymbolDictDecoder->SDHUFFDW = Table_B3;
|
| } else {
|
| pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
|
| @@ -699,10 +678,9 @@ int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment,
|
| pSymbolDictDecoder->SDHUFFDW = pSeg->m_Result.ht;
|
| }
|
| if (cSDHUFFBMSIZE == 0) {
|
| - JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
|
| - sizeof(HuffmanTable_B1) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B1));
|
| + Table_B1 = new CJBig2_HuffmanTable(HuffmanTable_B1,
|
| + FX_ArraySize(HuffmanTable_B1),
|
| + HuffmanTable_HTOOB_B1);
|
| pSymbolDictDecoder->SDHUFFBMSIZE = Table_B1;
|
| } else {
|
| pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
|
| @@ -718,10 +696,9 @@ int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment,
|
| if (pSymbolDictDecoder->SDREFAGG == 1) {
|
| if (cSDHUFFAGGINST == 0) {
|
| if (!Table_B1) {
|
| - JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
|
| - sizeof(HuffmanTable_B1) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B1));
|
| + Table_B1 = new CJBig2_HuffmanTable(HuffmanTable_B1,
|
| + FX_ArraySize(HuffmanTable_B1),
|
| + HuffmanTable_HTOOB_B1);
|
| }
|
| pSymbolDictDecoder->SDHUFFAGGINST = Table_B1;
|
| } else {
|
| @@ -783,7 +760,7 @@ int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment,
|
| }
|
| if (!cache_hit) {
|
| if (pSymbolDictDecoder->SDHUFF == 0) {
|
| - JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
|
| + pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
|
| pSegment->m_Result.sd =
|
| pSymbolDictDecoder->decode_Arith(pArithDecoder, gbContext, grContext);
|
| delete pArithDecoder;
|
| @@ -987,16 +964,14 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| }
|
| nIndex = 0;
|
| if (cSBHUFFFS == 0) {
|
| - JBIG2_ALLOC(Table_B6, CJBig2_HuffmanTable(HuffmanTable_B6,
|
| - sizeof(HuffmanTable_B6) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B6));
|
| + Table_B6 = new CJBig2_HuffmanTable(HuffmanTable_B6,
|
| + FX_ArraySize(HuffmanTable_B6),
|
| + HuffmanTable_HTOOB_B6);
|
| pTRD->SBHUFFFS = Table_B6;
|
| } else if (cSBHUFFFS == 1) {
|
| - JBIG2_ALLOC(Table_B7, CJBig2_HuffmanTable(HuffmanTable_B7,
|
| - sizeof(HuffmanTable_B7) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B7));
|
| + Table_B7 = new CJBig2_HuffmanTable(HuffmanTable_B7,
|
| + FX_ArraySize(HuffmanTable_B7),
|
| + HuffmanTable_HTOOB_B7);
|
| pTRD->SBHUFFFS = Table_B7;
|
| } else {
|
| pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
|
| @@ -1009,22 +984,19 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| pTRD->SBHUFFFS = pSeg->m_Result.ht;
|
| }
|
| if (cSBHUFFDS == 0) {
|
| - JBIG2_ALLOC(Table_B8, CJBig2_HuffmanTable(HuffmanTable_B8,
|
| - sizeof(HuffmanTable_B8) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B8));
|
| + Table_B8 = new CJBig2_HuffmanTable(HuffmanTable_B8,
|
| + FX_ArraySize(HuffmanTable_B8),
|
| + HuffmanTable_HTOOB_B8);
|
| pTRD->SBHUFFDS = Table_B8;
|
| } else if (cSBHUFFDS == 1) {
|
| - JBIG2_ALLOC(Table_B9, CJBig2_HuffmanTable(HuffmanTable_B9,
|
| - sizeof(HuffmanTable_B9) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B9));
|
| + Table_B9 = new CJBig2_HuffmanTable(HuffmanTable_B9,
|
| + FX_ArraySize(HuffmanTable_B9),
|
| + HuffmanTable_HTOOB_B9);
|
| pTRD->SBHUFFDS = Table_B9;
|
| } else if (cSBHUFFDS == 2) {
|
| - JBIG2_ALLOC(Table_B10, CJBig2_HuffmanTable(HuffmanTable_B10,
|
| - sizeof(HuffmanTable_B10) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B10));
|
| + Table_B10 = new CJBig2_HuffmanTable(HuffmanTable_B10,
|
| + FX_ArraySize(HuffmanTable_B10),
|
| + HuffmanTable_HTOOB_B10);
|
| pTRD->SBHUFFDS = Table_B10;
|
| } else {
|
| pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
|
| @@ -1037,22 +1009,19 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| pTRD->SBHUFFDS = pSeg->m_Result.ht;
|
| }
|
| if (cSBHUFFDT == 0) {
|
| - JBIG2_ALLOC(Table_B11, CJBig2_HuffmanTable(HuffmanTable_B11,
|
| - sizeof(HuffmanTable_B11) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B11));
|
| + Table_B11 = new CJBig2_HuffmanTable(HuffmanTable_B11,
|
| + FX_ArraySize(HuffmanTable_B11),
|
| + HuffmanTable_HTOOB_B11);
|
| pTRD->SBHUFFDT = Table_B11;
|
| } else if (cSBHUFFDT == 1) {
|
| - JBIG2_ALLOC(Table_B12, CJBig2_HuffmanTable(HuffmanTable_B12,
|
| - sizeof(HuffmanTable_B12) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B12));
|
| + Table_B12 = new CJBig2_HuffmanTable(HuffmanTable_B12,
|
| + FX_ArraySize(HuffmanTable_B12),
|
| + HuffmanTable_HTOOB_B12);
|
| pTRD->SBHUFFDT = Table_B12;
|
| } else if (cSBHUFFDT == 2) {
|
| - JBIG2_ALLOC(Table_B13, CJBig2_HuffmanTable(HuffmanTable_B13,
|
| - sizeof(HuffmanTable_B13) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B13));
|
| + Table_B13 = new CJBig2_HuffmanTable(HuffmanTable_B13,
|
| + FX_ArraySize(HuffmanTable_B13),
|
| + HuffmanTable_HTOOB_B13);
|
| pTRD->SBHUFFDT = Table_B13;
|
| } else {
|
| pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
|
| @@ -1065,16 +1034,14 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| pTRD->SBHUFFDT = pSeg->m_Result.ht;
|
| }
|
| if (cSBHUFFRDW == 0) {
|
| - JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
|
| - sizeof(HuffmanTable_B14) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B14));
|
| + Table_B14 = new CJBig2_HuffmanTable(HuffmanTable_B14,
|
| + FX_ArraySize(HuffmanTable_B14),
|
| + HuffmanTable_HTOOB_B14);
|
| pTRD->SBHUFFRDW = Table_B14;
|
| } else if (cSBHUFFRDW == 1) {
|
| - JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
|
| - sizeof(HuffmanTable_B15) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B15));
|
| + Table_B15 = new CJBig2_HuffmanTable(HuffmanTable_B15,
|
| + FX_ArraySize(HuffmanTable_B15),
|
| + HuffmanTable_HTOOB_B15);
|
| pTRD->SBHUFFRDW = Table_B15;
|
| } else {
|
| pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
|
| @@ -1088,18 +1055,16 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| }
|
| if (cSBHUFFRDH == 0) {
|
| if (!Table_B14) {
|
| - JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
|
| - sizeof(HuffmanTable_B14) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B14));
|
| + Table_B14 = new CJBig2_HuffmanTable(HuffmanTable_B14,
|
| + FX_ArraySize(HuffmanTable_B14),
|
| + HuffmanTable_HTOOB_B14);
|
| }
|
| pTRD->SBHUFFRDH = Table_B14;
|
| } else if (cSBHUFFRDH == 1) {
|
| if (!Table_B15) {
|
| - JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
|
| - sizeof(HuffmanTable_B15) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B15));
|
| + Table_B15 = new CJBig2_HuffmanTable(HuffmanTable_B15,
|
| + FX_ArraySize(HuffmanTable_B15),
|
| + HuffmanTable_HTOOB_B15);
|
| }
|
| pTRD->SBHUFFRDH = Table_B15;
|
| } else {
|
| @@ -1114,18 +1079,16 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| }
|
| if (cSBHUFFRDX == 0) {
|
| if (!Table_B14) {
|
| - JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
|
| - sizeof(HuffmanTable_B14) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B14));
|
| + Table_B14 = new CJBig2_HuffmanTable(HuffmanTable_B14,
|
| + FX_ArraySize(HuffmanTable_B14),
|
| + HuffmanTable_HTOOB_B14);
|
| }
|
| pTRD->SBHUFFRDX = Table_B14;
|
| } else if (cSBHUFFRDX == 1) {
|
| if (!Table_B15) {
|
| - JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
|
| - sizeof(HuffmanTable_B15) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B15));
|
| + Table_B15 = new CJBig2_HuffmanTable(HuffmanTable_B15,
|
| + FX_ArraySize(HuffmanTable_B15),
|
| + HuffmanTable_HTOOB_B15);
|
| }
|
| pTRD->SBHUFFRDX = Table_B15;
|
| } else {
|
| @@ -1140,18 +1103,16 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| }
|
| if (cSBHUFFRDY == 0) {
|
| if (!Table_B14) {
|
| - JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
|
| - sizeof(HuffmanTable_B14) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B14));
|
| + Table_B14 = new CJBig2_HuffmanTable(HuffmanTable_B14,
|
| + FX_ArraySize(HuffmanTable_B14),
|
| + HuffmanTable_HTOOB_B14);
|
| }
|
| pTRD->SBHUFFRDY = Table_B14;
|
| } else if (cSBHUFFRDY == 1) {
|
| if (!Table_B15) {
|
| - JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
|
| - sizeof(HuffmanTable_B15) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B15));
|
| + Table_B15 = new CJBig2_HuffmanTable(HuffmanTable_B15,
|
| + FX_ArraySize(HuffmanTable_B15),
|
| + HuffmanTable_HTOOB_B15);
|
| }
|
| pTRD->SBHUFFRDY = Table_B15;
|
| } else {
|
| @@ -1165,10 +1126,9 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| pTRD->SBHUFFRDY = pSeg->m_Result.ht;
|
| }
|
| if (cSBHUFFRSIZE == 0) {
|
| - JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
|
| - sizeof(HuffmanTable_B1) /
|
| - sizeof(JBig2TableLine),
|
| - HuffmanTable_HTOOB_B1));
|
| + Table_B1 = new CJBig2_HuffmanTable(HuffmanTable_B1,
|
| + FX_ArraySize(HuffmanTable_B1),
|
| + HuffmanTable_HTOOB_B1);
|
| pTRD->SBHUFFRSIZE = Table_B1;
|
| } else {
|
| pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
|
| @@ -1188,7 +1148,7 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
|
| }
|
| if (pTRD->SBHUFF == 0) {
|
| - JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
|
| + pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
|
| pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
|
| pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext);
|
| delete pArithDecoder;
|
| @@ -1209,7 +1169,7 @@ int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
|
| }
|
| if (pSegment->m_cFlags.s.type != 4) {
|
| if (!m_bBufSpecified) {
|
| - JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
|
| + JBig2PageInfo* pPageInfo = m_PageInfoList.back();
|
| if ((pPageInfo->m_bIsStriped == 1) &&
|
| (ri.y + ri.height > m_pPage->m_nHeight)) {
|
| m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
|
| @@ -1299,7 +1259,7 @@ int32_t CJBig2_Context::parsePatternDict(CJBig2_Segment* pSegment,
|
| gbContext =
|
| (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
|
| JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
|
| - JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
|
| + pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
|
| pSegment->m_Result.pd =
|
| pPDD->decode_Arith(pArithDecoder, gbContext, pPause);
|
| delete pArithDecoder;
|
| @@ -1385,7 +1345,7 @@ int32_t CJBig2_Context::parseHalftoneRegion(CJBig2_Segment* pSegment,
|
| gbContext =
|
| (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
|
| JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
|
| - JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
|
| + pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
|
| pSegment->m_Result.im =
|
| pHRD->decode_Arith(pArithDecoder, gbContext, pPause);
|
| delete pArithDecoder;
|
| @@ -1407,7 +1367,7 @@ int32_t CJBig2_Context::parseHalftoneRegion(CJBig2_Segment* pSegment,
|
| }
|
| if (pSegment->m_cFlags.s.type != 20) {
|
| if (!m_bBufSpecified) {
|
| - JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
|
| + JBig2PageInfo* pPageInfo = m_PageInfoList.back();
|
| if ((pPageInfo->m_bIsStriped == 1) &&
|
| (ri.y + ri.height > m_pPage->m_nHeight)) {
|
| m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
|
| @@ -1481,7 +1441,7 @@ int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment* pSegment,
|
| JBIG2_memset(m_gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
|
| }
|
| if (m_pArithDecoder == NULL) {
|
| - JBIG2_ALLOC(m_pArithDecoder, CJBig2_ArithDecoder(m_pStream));
|
| + m_pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
|
| m_ProcessiveStatus = m_pGRD->Start_decode_Arith(
|
| &pSegment->m_Result.im, m_pArithDecoder, m_gbContext, pPause);
|
| } else {
|
| @@ -1490,7 +1450,7 @@ int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment* pSegment,
|
| if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
|
| if (pSegment->m_cFlags.s.type != 36) {
|
| if (!m_bBufSpecified) {
|
| - JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
|
| + JBig2PageInfo* pPageInfo = m_PageInfoList.back();
|
| if ((pPageInfo->m_bIsStriped == 1) &&
|
| (m_ri.y + m_ri.height > m_pPage->m_nHeight)) {
|
| m_pPage->expand(m_ri.y + m_ri.height,
|
| @@ -1532,7 +1492,7 @@ int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment* pSegment,
|
| }
|
| if (pSegment->m_cFlags.s.type != 36) {
|
| if (!m_bBufSpecified) {
|
| - JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
|
| + JBig2PageInfo* pPageInfo = m_PageInfoList.back();
|
| if ((pPageInfo->m_bIsStriped == 1) &&
|
| (m_ri.y + m_ri.height > m_pPage->m_nHeight)) {
|
| m_pPage->expand(m_ri.y + m_ri.height,
|
| @@ -1619,7 +1579,7 @@ int32_t CJBig2_Context::parseGenericRefinementRegion(CJBig2_Segment* pSegment) {
|
| grContext =
|
| (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
|
| JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
|
| - JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
|
| + pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
|
| pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
|
| pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext);
|
| delete pArithDecoder;
|
| @@ -1633,7 +1593,7 @@ int32_t CJBig2_Context::parseGenericRefinementRegion(CJBig2_Segment* pSegment) {
|
| m_pStream->offset(2);
|
| if (pSegment->m_cFlags.s.type != 40) {
|
| if (!m_bBufSpecified) {
|
| - JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
|
| + JBig2PageInfo* pPageInfo = m_PageInfoList.back();
|
| if ((pPageInfo->m_bIsStriped == 1) &&
|
| (ri.y + ri.height > m_pPage->m_nHeight)) {
|
| m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
|
| @@ -1652,7 +1612,7 @@ failed:
|
| }
|
| int32_t CJBig2_Context::parseTable(CJBig2_Segment* pSegment) {
|
| pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER;
|
| - JBIG2_ALLOC(pSegment->m_Result.ht, CJBig2_HuffmanTable(m_pStream));
|
| + pSegment->m_Result.ht = new CJBig2_HuffmanTable(m_pStream);
|
| if (!pSegment->m_Result.ht->isOK()) {
|
| delete pSegment->m_Result.ht;
|
| pSegment->m_Result.ht = NULL;
|
|
|