Chromium Code Reviews| Index: core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp |
| diff --git a/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp b/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp |
| index 1c56db984b31d9ac30eb29b82ad1dc1ac37b65ef..e9406deae5e850e9e13d12697a2d79156d94208d 100644 |
| --- a/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp |
| +++ b/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp |
| @@ -5,6 +5,8 @@ |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| #include "JBig2_GeneralDecoder.h" |
| + |
| +#include "../../../../third_party/base/nonstd_unique_ptr.h" |
| #include "JBig2_ArithDecoder.h" |
| #include "JBig2_ArithIntDecoder.h" |
| #include "JBig2_HuffmanDecoder.h" |
| @@ -74,9 +76,8 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3( |
| int32_t nStride, nStride2, k; |
| int32_t nLineBytes, nBitsLeft, cc; |
| LTP = 0; |
| - CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| + nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH)); |
| if (GBREG->m_pData == NULL) { |
| - delete GBREG; |
| return NULL; |
| } |
| pLine = GBREG->m_pData; |
| @@ -152,8 +153,9 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3( |
| } |
| pLine += nStride; |
| } |
| - return GBREG; |
| + return GBREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_unopt( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext) { |
| @@ -161,7 +163,7 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_unopt( |
| FX_DWORD CONTEXT; |
| FX_DWORD line1, line2, line3; |
| LTP = 0; |
| - CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| + nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH)); |
|
Tom Sepez
2015/09/11 23:36:21
Didn't see any early returns here? => raw pointer
Lei Zhang
2015/09/12 01:19:28
We probably should standardize on that NULL check.
|
| GBREG->fill(0); |
| for (FX_DWORD h = 0; h < GBH; h++) { |
| if (TPGDON) { |
| @@ -199,8 +201,9 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_unopt( |
| } |
| } |
| } |
| - return GBREG; |
| + return GBREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext) { |
| @@ -211,9 +214,8 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3( |
| int32_t nStride, nStride2, k; |
| int32_t nLineBytes, nBitsLeft, cc; |
| LTP = 0; |
| - CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| + nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH)); |
| if (GBREG->m_pData == NULL) { |
| - delete GBREG; |
| return NULL; |
| } |
| pLine = GBREG->m_pData; |
| @@ -288,8 +290,9 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3( |
| } |
| pLine += nStride; |
| } |
| - return GBREG; |
| + return GBREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_unopt( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext) { |
| @@ -297,7 +300,7 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_unopt( |
| FX_DWORD CONTEXT; |
| FX_DWORD line1, line2, line3; |
| LTP = 0; |
| - CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| + nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH)); |
|
Tom Sepez
2015/09/11 23:36:21
ditto, and in several other places in this file.
|
| GBREG->fill(0); |
| for (FX_DWORD h = 0; h < GBH; h++) { |
| if (TPGDON) { |
| @@ -333,7 +336,7 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_unopt( |
| } |
| } |
| } |
| - return GBREG; |
| + return GBREG.release(); |
| } |
| CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3( |
| CJBig2_ArithDecoder* pArithDecoder, |
| @@ -345,9 +348,8 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3( |
| int32_t nStride, nStride2, k; |
| int32_t nLineBytes, nBitsLeft, cc; |
| LTP = 0; |
| - CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| + nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH)); |
| if (GBREG->m_pData == NULL) { |
| - delete GBREG; |
| return NULL; |
| } |
| pLine = GBREG->m_pData; |
| @@ -422,8 +424,9 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3( |
| } |
| pLine += nStride; |
| } |
| - return GBREG; |
| + return GBREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_unopt( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext) { |
| @@ -431,7 +434,7 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_unopt( |
| FX_DWORD CONTEXT; |
| FX_DWORD line1, line2, line3; |
| LTP = 0; |
| - CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| + nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH)); |
| GBREG->fill(0); |
| for (FX_DWORD h = 0; h < GBH; h++) { |
| if (TPGDON) { |
| @@ -465,8 +468,9 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_unopt( |
| } |
| } |
| } |
| - return GBREG; |
| + return GBREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext) { |
| @@ -477,9 +481,8 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3( |
| int32_t nStride, k; |
| int32_t nLineBytes, nBitsLeft, cc; |
| LTP = 0; |
| - CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| + nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH)); |
| if (GBREG->m_pData == NULL) { |
| - delete GBREG; |
| return NULL; |
| } |
| pLine = GBREG->m_pData; |
| @@ -540,8 +543,9 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3( |
| } |
| pLine += nStride; |
| } |
| - return GBREG; |
| + return GBREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_unopt( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext) { |
| @@ -549,7 +553,7 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_unopt( |
| FX_DWORD CONTEXT; |
| FX_DWORD line1, line2; |
| LTP = 0; |
| - CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| + nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH)); |
| GBREG->fill(0); |
| for (FX_DWORD h = 0; h < GBH; h++) { |
| if (TPGDON) { |
| @@ -579,8 +583,9 @@ CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_unopt( |
| } |
| } |
| } |
| - return GBREG; |
| + return GBREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRRDProc::decode(CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* grContext) { |
| if (GRW == 0 || GRH == 0) { |
| @@ -602,6 +607,7 @@ CJBig2_Image* CJBig2_GRRDProc::decode(CJBig2_ArithDecoder* pArithDecoder, |
| } |
| } |
| } |
| + |
| CJBig2_Image* CJBig2_GRRDProc::decode_Template0_unopt( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* grContext) { |
| @@ -609,7 +615,7 @@ CJBig2_Image* CJBig2_GRRDProc::decode_Template0_unopt( |
| FX_DWORD CONTEXT; |
| FX_DWORD line1, line2, line3, line4, line5; |
| LTP = 0; |
| - CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); |
| + nonstd::unique_ptr<CJBig2_Image> GRREG(new CJBig2_Image(GRW, GRH)); |
| GRREG->fill(0); |
| for (FX_DWORD h = 0; h < GRH; h++) { |
| if (TPGRON) { |
| @@ -714,8 +720,9 @@ CJBig2_Image* CJBig2_GRRDProc::decode_Template0_unopt( |
| } |
| } |
| } |
| - return GRREG; |
| + return GRREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRRDProc::decode_Template0_opt( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* grContext) { |
| @@ -733,9 +740,8 @@ CJBig2_Image* CJBig2_GRRDProc::decode_Template0_opt( |
| GRW = (int32_t)CJBig2_GRRDProc::GRW; |
| GRH = (int32_t)CJBig2_GRRDProc::GRH; |
| LTP = 0; |
| - CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); |
| + nonstd::unique_ptr<CJBig2_Image> GRREG(new CJBig2_Image(GRW, GRH)); |
| if (GRREG->m_pData == NULL) { |
| - delete GRREG; |
| return NULL; |
| } |
| pLine = GRREG->m_pData; |
| @@ -851,8 +857,9 @@ CJBig2_Image* CJBig2_GRRDProc::decode_Template0_opt( |
| pLineR += nStrideR; |
| } |
| } |
| - return GRREG; |
| + return GRREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRRDProc::decode_Template1_unopt( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* grContext) { |
| @@ -860,7 +867,7 @@ CJBig2_Image* CJBig2_GRRDProc::decode_Template1_unopt( |
| FX_DWORD CONTEXT; |
| FX_DWORD line1, line2, line3, line4, line5; |
| LTP = 0; |
| - CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); |
| + nonstd::unique_ptr<CJBig2_Image> GRREG(new CJBig2_Image(GRW, GRH)); |
| GRREG->fill(0); |
| for (FX_DWORD h = 0; h < GRH; h++) { |
| if (TPGRON) { |
| @@ -951,8 +958,9 @@ CJBig2_Image* CJBig2_GRRDProc::decode_Template1_unopt( |
| } |
| } |
| } |
| - return GRREG; |
| + return GRREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_GRRDProc::decode_Template1_opt( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* grContext) { |
| @@ -970,9 +978,8 @@ CJBig2_Image* CJBig2_GRRDProc::decode_Template1_opt( |
| GRW = (int32_t)CJBig2_GRRDProc::GRW; |
| GRH = (int32_t)CJBig2_GRRDProc::GRH; |
| LTP = 0; |
| - CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); |
| + nonstd::unique_ptr<CJBig2_Image> GRREG(new CJBig2_Image(GRW, GRH)); |
| if (GRREG->m_pData == NULL) { |
| - delete GRREG; |
| return NULL; |
| } |
| pLine = GRREG->m_pData; |
| @@ -1082,7 +1089,7 @@ CJBig2_Image* CJBig2_GRRDProc::decode_Template1_opt( |
| pLineR += nStrideR; |
| } |
| } |
| - return GRREG; |
| + return GRREG.release(); |
| } |
| CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| @@ -1103,30 +1110,29 @@ CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| FX_BOOL bFirst; |
| FX_DWORD nTmp; |
| int32_t nVal, nBits; |
| - CJBig2_GRRDProc* pGRRD; |
| - CJBig2_ArithDecoder* pArithDecoder; |
| - CJBig2_HuffmanDecoder* pHuffmanDecoder = new CJBig2_HuffmanDecoder(pStream); |
| - CJBig2_Image* SBREG = new CJBig2_Image(SBW, SBH); |
| + nonstd::unique_ptr<CJBig2_HuffmanDecoder> pHuffmanDecoder( |
| + new CJBig2_HuffmanDecoder(pStream)); |
| + nonstd::unique_ptr<CJBig2_Image> SBREG(new CJBig2_Image(SBW, SBH)); |
| SBREG->fill(SBDEFPIXEL); |
| - if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0) { |
| - goto failed; |
| - } |
| + if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0) |
| + return nullptr; |
| + |
| STRIPT *= SBSTRIPS; |
| STRIPT = -STRIPT; |
| FIRSTS = 0; |
| NINSTANCES = 0; |
| while (NINSTANCES < SBNUMINSTANCES) { |
| - if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0) { |
| - goto failed; |
| - } |
| + if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0) |
| + return nullptr; |
| + |
| DT *= SBSTRIPS; |
| STRIPT = STRIPT + DT; |
| bFirst = TRUE; |
| for (;;) { |
| if (bFirst) { |
| - if (pHuffmanDecoder->decodeAValue(SBHUFFFS, &DFS) != 0) { |
| - goto failed; |
| - } |
| + if (pHuffmanDecoder->decodeAValue(SBHUFFFS, &DFS) != 0) |
| + return nullptr; |
| + |
| FIRSTS = FIRSTS + DFS; |
| CURS = FIRSTS; |
| bFirst = FALSE; |
| @@ -1135,7 +1141,7 @@ CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| if (nVal == JBIG2_OOB) { |
| break; |
| } else if (nVal != 0) { |
| - goto failed; |
| + return nullptr; |
| } else { |
| CURS = CURS + IDS + SBDSOFFSET; |
| } |
| @@ -1147,18 +1153,18 @@ CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| while ((FX_DWORD)(1 << nTmp) < SBSTRIPS) { |
| nTmp++; |
| } |
| - if (pStream->readNBits(nTmp, &nVal) != 0) { |
| - goto failed; |
| - } |
| + if (pStream->readNBits(nTmp, &nVal) != 0) |
| + return nullptr; |
| + |
| CURT = nVal; |
| } |
| TI = STRIPT + CURT; |
| nVal = 0; |
| nBits = 0; |
| for (;;) { |
| - if (pStream->read1Bit(&nTmp) != 0) { |
| - goto failed; |
| - } |
| + if (pStream->read1Bit(&nTmp) != 0) |
| + return nullptr; |
| + |
| nVal = (nVal << 1) | nTmp; |
| nBits++; |
| for (IDI = 0; IDI < SBNUMSYMS; IDI++) { |
| @@ -1175,7 +1181,7 @@ CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| RI = 0; |
| } else { |
| if (pStream->read1Bit(&RI) != 0) { |
| - goto failed; |
| + return nullptr; |
| } |
| } |
| if (RI == 0) { |
| @@ -1186,20 +1192,20 @@ CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) || |
| (pHuffmanDecoder->decodeAValue(SBHUFFRDY, &RDYI) != 0) || |
| (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) { |
| - goto failed; |
| + return nullptr; |
| } |
| pStream->alignByte(); |
| nTmp = pStream->getOffset(); |
| IBOI = SBSYMS[IDI]; |
| - if (!IBOI) { |
| - goto failed; |
| - } |
| + if (!IBOI) |
| + return nullptr; |
| + |
| WOI = IBOI->m_nWidth; |
| HOI = IBOI->m_nHeight; |
| - if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) { |
| - goto failed; |
| - } |
| - pGRRD = new CJBig2_GRRDProc(); |
| + if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) |
| + return nullptr; |
| + |
| + nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc()); |
| pGRRD->GRW = WOI + RDWI; |
| pGRRD->GRH = HOI + RDHI; |
| pGRRD->GRTEMPLATE = SBRTEMPLATE; |
| @@ -1211,22 +1217,18 @@ CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| pGRRD->GRAT[1] = SBRAT[1]; |
| pGRRD->GRAT[2] = SBRAT[2]; |
| pGRRD->GRAT[3] = SBRAT[3]; |
| - pArithDecoder = new CJBig2_ArithDecoder(pStream); |
| - IBI = pGRRD->decode(pArithDecoder, grContext); |
| - if (IBI == NULL) { |
| - delete pGRRD; |
| - delete pArithDecoder; |
| - goto failed; |
| - } |
| - delete pArithDecoder; |
| + nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder( |
|
Tom Sepez
2015/09/11 23:36:21
want to add a {} block here to force pArithDecoder
Lei Zhang
2015/09/12 01:19:28
Done.
|
| + new CJBig2_ArithDecoder(pStream)); |
| + IBI = pGRRD->decode(pArithDecoder.get(), grContext); |
| + if (IBI == NULL) |
| + return nullptr; |
| + |
| pStream->alignByte(); |
| pStream->offset(2); |
| if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) { |
| delete IBI; |
| - delete pGRRD; |
| - goto failed; |
| + return nullptr; |
| } |
| - delete pGRRD; |
| } |
| if (!IBI) { |
| continue; |
| @@ -1285,13 +1287,9 @@ CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| NINSTANCES = NINSTANCES + 1; |
| } |
| } |
| - delete pHuffmanDecoder; |
| - return SBREG; |
| -failed: |
| - delete pHuffmanDecoder; |
| - delete SBREG; |
| - return NULL; |
| + return SBREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* grContext, |
| JBig2IntDecoderState* pIDS) { |
| @@ -1308,14 +1306,12 @@ CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| int32_t RDWI, RDHI, RDXI, RDYI; |
| CJBig2_Image* IBOI; |
| FX_DWORD WOI, HOI; |
| - CJBig2_Image* SBREG; |
| FX_BOOL bFirst; |
| int32_t nRet, nVal; |
| int32_t bRetained; |
| CJBig2_ArithIntDecoder *IADT, *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH, |
| *IARDX, *IARDY; |
| CJBig2_ArithIaidDecoder* IAID; |
| - CJBig2_GRRDProc* pGRRD; |
| if (pIDS) { |
| IADT = pIDS->IADT; |
| IAFS = pIDS->IAFS; |
| @@ -1341,7 +1337,7 @@ CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| IAID = new CJBig2_ArithIaidDecoder(SBSYMCODELEN); |
| bRetained = FALSE; |
| } |
| - SBREG = new CJBig2_Image(SBW, SBH); |
| + nonstd::unique_ptr<CJBig2_Image> SBREG(new CJBig2_Image(SBW, SBH)); |
| SBREG->fill(SBDEFPIXEL); |
| if (IADT->decode(pArithDecoder, &STRIPT) == -1) { |
| goto failed; |
| @@ -1419,7 +1415,7 @@ CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) { |
| goto failed; |
| } |
| - pGRRD = new CJBig2_GRRDProc(); |
| + nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc()); |
| pGRRD->GRW = WOI + RDWI; |
| pGRRD->GRH = HOI + RDHI; |
| pGRRD->GRTEMPLATE = SBRTEMPLATE; |
| @@ -1432,11 +1428,8 @@ CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| pGRRD->GRAT[2] = SBRAT[2]; |
| pGRRD->GRAT[3] = SBRAT[3]; |
| IBI = pGRRD->decode(pArithDecoder, grContext); |
| - if (IBI == NULL) { |
| - delete pGRRD; |
| + if (IBI == NULL) |
| goto failed; |
| - } |
| - delete pGRRD; |
| } |
| WI = IBI->m_nWidth; |
| HI = IBI->m_nHeight; |
| @@ -1504,7 +1497,7 @@ CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| delete IARDY; |
| delete IAID; |
| } |
| - return SBREG; |
| + return SBREG.release(); |
| failed: |
| if (bRetained == FALSE) { |
| delete IADT; |
| @@ -1518,9 +1511,9 @@ failed: |
| delete IARDY; |
| delete IAID; |
| } |
| - delete SBREG; |
| return NULL; |
| } |
| + |
| CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext, |
| @@ -1543,14 +1536,9 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| FX_DWORD IDI; |
| int32_t RDXI, RDYI; |
| CJBig2_Image** SBSYMS; |
| - CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH, |
| - *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE; |
| - CJBig2_GRRDProc* pGRRD; |
| - CJBig2_GRDProc* pGRD; |
| CJBig2_ArithIntDecoder *IADH, *IADW, *IAAI, *IARDX, *IARDY, *IAEX, *IADT, |
| *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH; |
| CJBig2_ArithIaidDecoder* IAID; |
| - CJBig2_SymbolDict* pDict; |
| IADH = new CJBig2_ArithIntDecoder(); |
| IADW = new CJBig2_ArithIntDecoder(); |
| IAAI = new CJBig2_ArithIntDecoder(); |
| @@ -1571,6 +1559,8 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| IAID = new CJBig2_ArithIaidDecoder((uint8_t)nTmp); |
| SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS); |
| FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); |
| + nonstd::unique_ptr<CJBig2_SymbolDict> pDict(new CJBig2_SymbolDict()); |
|
Tom Sepez
2015/09/11 23:36:21
why this move up from old line 1800? My old eyes
Lei Zhang
2015/09/12 01:19:28
Can't declare a variable down there because of got
|
| + |
| HCHEIGHT = 0; |
| NSYMSDECODED = 0; |
| while (NSYMSDECODED < SDNUMNEWSYMS) { |
| @@ -1606,7 +1596,7 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| TOTWIDTH = TOTWIDTH + SYMWIDTH; |
| } |
| if (SDREFAGG == 0) { |
| - pGRD = new CJBig2_GRDProc(); |
| + nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc()); |
| pGRD->MMR = 0; |
| pGRD->GBW = SYMWIDTH; |
| pGRD->GBH = HCHEIGHT; |
| @@ -1623,17 +1613,14 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| pGRD->GBAT[7] = SDAT[7]; |
| BS = pGRD->decode_Arith(pArithDecoder, gbContext); |
| if (BS == NULL) { |
| - delete pGRD; |
| goto failed; |
| } |
| - delete pGRD; |
| } else { |
| if (IAAI->decode(pArithDecoder, (int*)&REFAGGNINST) == -1) { |
| goto failed; |
| } |
| if (REFAGGNINST > 1) { |
| - CJBig2_TRDProc* pDecoder; |
| - pDecoder = new CJBig2_TRDProc(); |
| + nonstd::unique_ptr<CJBig2_TRDProc> pDecoder(new CJBig2_TRDProc()); |
| pDecoder->SBHUFF = SDHUFF; |
| pDecoder->SBREFINE = 1; |
| pDecoder->SBW = SYMWIDTH; |
| @@ -1658,38 +1645,46 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| pDecoder->TRANSPOSED = 0; |
| pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; |
| pDecoder->SBDSOFFSET = 0; |
| - SBHUFFFS = new CJBig2_HuffmanTable(HuffmanTable_B6, |
| - FX_ArraySize(HuffmanTable_B6), |
| - HuffmanTable_HTOOB_B6); |
| - SBHUFFDS = new CJBig2_HuffmanTable(HuffmanTable_B8, |
| - FX_ArraySize(HuffmanTable_B8), |
| - HuffmanTable_HTOOB_B8); |
| - SBHUFFDT = new CJBig2_HuffmanTable(HuffmanTable_B11, |
| - FX_ArraySize(HuffmanTable_B11), |
| - HuffmanTable_HTOOB_B11); |
| - SBHUFFRDW = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRDH = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRDX = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRDY = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRSIZE = new CJBig2_HuffmanTable(HuffmanTable_B1, |
| - FX_ArraySize(HuffmanTable_B1), |
| - HuffmanTable_HTOOB_B1); |
| - pDecoder->SBHUFFFS = SBHUFFFS; |
| - pDecoder->SBHUFFDS = SBHUFFDS; |
| - pDecoder->SBHUFFDT = SBHUFFDT; |
| - pDecoder->SBHUFFRDW = SBHUFFRDW; |
| - pDecoder->SBHUFFRDH = SBHUFFRDH; |
| - pDecoder->SBHUFFRDX = SBHUFFRDX; |
| - pDecoder->SBHUFFRDY = SBHUFFRDY; |
| - pDecoder->SBHUFFRSIZE = SBHUFFRSIZE; |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFFS( |
| + new CJBig2_HuffmanTable(HuffmanTable_B6, |
| + FX_ArraySize(HuffmanTable_B6), |
| + HuffmanTable_HTOOB_B6)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDS( |
| + new CJBig2_HuffmanTable(HuffmanTable_B8, |
| + FX_ArraySize(HuffmanTable_B8), |
| + HuffmanTable_HTOOB_B8)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDT( |
| + new CJBig2_HuffmanTable(HuffmanTable_B11, |
| + FX_ArraySize(HuffmanTable_B11), |
| + HuffmanTable_HTOOB_B11)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDW( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDH( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDY( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE( |
| + new CJBig2_HuffmanTable(HuffmanTable_B1, |
| + FX_ArraySize(HuffmanTable_B1), |
| + HuffmanTable_HTOOB_B1)); |
| + pDecoder->SBHUFFFS = SBHUFFFS.get(); |
| + pDecoder->SBHUFFDS = SBHUFFDS.get(); |
| + pDecoder->SBHUFFDT = SBHUFFDT.get(); |
| + pDecoder->SBHUFFRDW = SBHUFFRDW.get(); |
| + pDecoder->SBHUFFRDH = SBHUFFRDH.get(); |
| + pDecoder->SBHUFFRDX = SBHUFFRDX.get(); |
| + pDecoder->SBHUFFRDY = SBHUFFRDY.get(); |
| + pDecoder->SBHUFFRSIZE = SBHUFFRSIZE.get(); |
| pDecoder->SBRTEMPLATE = SDRTEMPLATE; |
| pDecoder->SBRAT[0] = SDRAT[0]; |
| pDecoder->SBRAT[1] = SDRAT[1]; |
| @@ -1709,27 +1704,9 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| BS = pDecoder->decode_Arith(pArithDecoder, grContext, &ids); |
| if (BS == NULL) { |
| FX_Free(SBSYMS); |
| - delete SBHUFFFS; |
| - delete SBHUFFDS; |
| - delete SBHUFFDT; |
| - delete SBHUFFRDW; |
| - delete SBHUFFRDH; |
| - delete SBHUFFRDX; |
| - delete SBHUFFRDY; |
| - delete SBHUFFRSIZE; |
| - delete pDecoder; |
| goto failed; |
| } |
| FX_Free(SBSYMS); |
| - delete SBHUFFFS; |
| - delete SBHUFFDS; |
| - delete SBHUFFDT; |
| - delete SBHUFFRDW; |
| - delete SBHUFFRDH; |
| - delete SBHUFFRDX; |
| - delete SBHUFFRDY; |
| - delete SBHUFFRSIZE; |
| - delete pDecoder; |
| } else if (REFAGGNINST == 1) { |
| SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; |
| if (IAID->decode(pArithDecoder, (int*)&IDI) == -1) { |
| @@ -1750,7 +1727,7 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| FX_Free(SBSYMS); |
| goto failed; |
| } |
| - pGRRD = new CJBig2_GRRDProc(); |
| + nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc()); |
| pGRRD->GRW = SYMWIDTH; |
| pGRRD->GRH = HCHEIGHT; |
| pGRRD->GRTEMPLATE = SDRTEMPLATE; |
| @@ -1765,11 +1742,9 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| BS = pGRRD->decode(pArithDecoder, grContext); |
| if (BS == NULL) { |
| FX_Free(SBSYMS); |
| - delete pGRRD; |
| goto failed; |
| } |
| FX_Free(SBSYMS); |
| - delete pGRRD; |
| } |
| } |
| SDNEWSYMS[NSYMSDECODED] = BS; |
| @@ -1797,7 +1772,6 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| EXINDEX = EXINDEX + EXRUNLENGTH; |
| CUREXFLAG = !CUREXFLAG; |
| } |
| - pDict = new CJBig2_SymbolDict(); |
| pDict->SDNUMEXSYMS = SDNUMEXSYMS; |
| pDict->SDEXSYMS = FX_Alloc(CJBig2_Image*, SDNUMEXSYMS); |
| I = J = 0; |
| @@ -1832,7 +1806,7 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( |
| delete IARI; |
| delete IARDW; |
| delete IARDH; |
| - return pDict; |
| + return pDict.release(); |
| failed: |
| for (I = 0; I < NSYMSDECODED; I++) { |
| if (SDNEWSYMS[I]) { |
| @@ -1857,6 +1831,7 @@ failed: |
| delete IARDH; |
| return NULL; |
| } |
| + |
| CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| JBig2ArithCtx* gbContext, |
| JBig2ArithCtx* grContext, |
| @@ -1883,14 +1858,8 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| FX_DWORD BMSIZE; |
| FX_DWORD stride; |
| CJBig2_Image** SBSYMS; |
| - CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH, |
| - *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE, *pTable; |
| - CJBig2_HuffmanDecoder* pHuffmanDecoder; |
| - CJBig2_GRRDProc* pGRRD; |
| - CJBig2_ArithDecoder* pArithDecoder; |
| - CJBig2_GRDProc* pGRD; |
| - CJBig2_SymbolDict* pDict; |
| - pHuffmanDecoder = new CJBig2_HuffmanDecoder(pStream); |
| + nonstd::unique_ptr<CJBig2_HuffmanDecoder> pHuffmanDecoder( |
| + new CJBig2_HuffmanDecoder(pStream)); |
| SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS); |
| FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); |
| SDNEWSYMWIDTHS = NULL; |
| @@ -1899,6 +1868,9 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| SDNEWSYMWIDTHS = FX_Alloc(FX_DWORD, SDNUMNEWSYMS); |
| FXSYS_memset(SDNEWSYMWIDTHS, 0, SDNUMNEWSYMS * sizeof(FX_DWORD)); |
| } |
| + nonstd::unique_ptr<CJBig2_SymbolDict> pDict(new CJBig2_SymbolDict()); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> pTable; |
| + |
| HCHEIGHT = 0; |
| NSYMSDECODED = 0; |
| BS = NULL; |
| @@ -1941,7 +1913,7 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| } |
| BS = NULL; |
| if (REFAGGNINST > 1) { |
| - CJBig2_TRDProc* pDecoder = new CJBig2_TRDProc(); |
| + nonstd::unique_ptr<CJBig2_TRDProc> pDecoder(new CJBig2_TRDProc()); |
| pDecoder->SBHUFF = SDHUFF; |
| pDecoder->SBREFINE = 1; |
| pDecoder->SBW = SYMWIDTH; |
| @@ -1970,38 +1942,46 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| pDecoder->TRANSPOSED = 0; |
| pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; |
| pDecoder->SBDSOFFSET = 0; |
| - SBHUFFFS = new CJBig2_HuffmanTable(HuffmanTable_B6, |
| - FX_ArraySize(HuffmanTable_B6), |
| - HuffmanTable_HTOOB_B6); |
| - SBHUFFDS = new CJBig2_HuffmanTable(HuffmanTable_B8, |
| - FX_ArraySize(HuffmanTable_B8), |
| - HuffmanTable_HTOOB_B8); |
| - SBHUFFDT = new CJBig2_HuffmanTable(HuffmanTable_B11, |
| - FX_ArraySize(HuffmanTable_B11), |
| - HuffmanTable_HTOOB_B11); |
| - SBHUFFRDW = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRDH = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRDX = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRDY = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRSIZE = new CJBig2_HuffmanTable(HuffmanTable_B1, |
| - FX_ArraySize(HuffmanTable_B1), |
| - HuffmanTable_HTOOB_B1); |
| - pDecoder->SBHUFFFS = SBHUFFFS; |
| - pDecoder->SBHUFFDS = SBHUFFDS; |
| - pDecoder->SBHUFFDT = SBHUFFDT; |
| - pDecoder->SBHUFFRDW = SBHUFFRDW; |
| - pDecoder->SBHUFFRDH = SBHUFFRDH; |
| - pDecoder->SBHUFFRDX = SBHUFFRDX; |
| - pDecoder->SBHUFFRDY = SBHUFFRDY; |
| - pDecoder->SBHUFFRSIZE = SBHUFFRSIZE; |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFFS( |
| + new CJBig2_HuffmanTable(HuffmanTable_B6, |
| + FX_ArraySize(HuffmanTable_B6), |
| + HuffmanTable_HTOOB_B6)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDS( |
| + new CJBig2_HuffmanTable(HuffmanTable_B8, |
| + FX_ArraySize(HuffmanTable_B8), |
| + HuffmanTable_HTOOB_B8)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDT( |
| + new CJBig2_HuffmanTable(HuffmanTable_B11, |
| + FX_ArraySize(HuffmanTable_B11), |
| + HuffmanTable_HTOOB_B11)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDW( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDH( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDY( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE( |
| + new CJBig2_HuffmanTable(HuffmanTable_B1, |
| + FX_ArraySize(HuffmanTable_B1), |
| + HuffmanTable_HTOOB_B1)); |
| + pDecoder->SBHUFFFS = SBHUFFFS.get(); |
| + pDecoder->SBHUFFDS = SBHUFFDS.get(); |
| + pDecoder->SBHUFFDT = SBHUFFDT.get(); |
| + pDecoder->SBHUFFRDW = SBHUFFRDW.get(); |
| + pDecoder->SBHUFFRDH = SBHUFFRDH.get(); |
| + pDecoder->SBHUFFRDX = SBHUFFRDX.get(); |
| + pDecoder->SBHUFFRDY = SBHUFFRDY.get(); |
| + pDecoder->SBHUFFRSIZE = SBHUFFRSIZE.get(); |
| pDecoder->SBRTEMPLATE = SDRTEMPLATE; |
| pDecoder->SBRAT[0] = SDRAT[0]; |
| pDecoder->SBRAT[1] = SDRAT[1]; |
| @@ -2011,28 +1991,10 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| if (BS == NULL) { |
| FX_Free(SBSYMCODES); |
| FX_Free(SBSYMS); |
| - delete SBHUFFFS; |
| - delete SBHUFFDS; |
| - delete SBHUFFDT; |
| - delete SBHUFFRDW; |
| - delete SBHUFFRDH; |
| - delete SBHUFFRDX; |
| - delete SBHUFFRDY; |
| - delete SBHUFFRSIZE; |
| - delete pDecoder; |
| goto failed; |
| } |
| FX_Free(SBSYMCODES); |
| FX_Free(SBSYMS); |
| - delete SBHUFFFS; |
| - delete SBHUFFDS; |
| - delete SBHUFFDT; |
| - delete SBHUFFRDW; |
| - delete SBHUFFRDH; |
| - delete SBHUFFRDX; |
| - delete SBHUFFRDY; |
| - delete SBHUFFRSIZE; |
| - delete pDecoder; |
| } else if (REFAGGNINST == 1) { |
| SBNUMSYMS = SDNUMINSYMS + SDNUMNEWSYMS; |
| nTmp = 1; |
| @@ -2064,28 +2026,26 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| } |
| } |
| FX_Free(SBSYMCODES); |
| - SBHUFFRDX = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| - FX_ArraySize(HuffmanTable_B15), |
| - HuffmanTable_HTOOB_B15); |
| - SBHUFFRSIZE = new CJBig2_HuffmanTable(HuffmanTable_B1, |
| - FX_ArraySize(HuffmanTable_B1), |
| - HuffmanTable_HTOOB_B1); |
| - if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) || |
| - (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDYI) != 0) || |
| - (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) { |
| - delete SBHUFFRDX; |
| - delete SBHUFFRSIZE; |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX( |
| + new CJBig2_HuffmanTable(HuffmanTable_B15, |
| + FX_ArraySize(HuffmanTable_B15), |
| + HuffmanTable_HTOOB_B15)); |
| + nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE( |
| + new CJBig2_HuffmanTable(HuffmanTable_B1, |
| + FX_ArraySize(HuffmanTable_B1), |
| + HuffmanTable_HTOOB_B1)); |
| + if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX.get(), &RDXI) != 0) || |
| + (pHuffmanDecoder->decodeAValue(SBHUFFRDX.get(), &RDYI) != 0) || |
| + (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE.get(), &nVal) != 0)) { |
| goto failed; |
| } |
| - delete SBHUFFRDX; |
| - delete SBHUFFRSIZE; |
| pStream->alignByte(); |
| nTmp = pStream->getOffset(); |
| SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); |
| JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); |
| JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, |
| NSYMSDECODED * sizeof(CJBig2_Image*)); |
| - pGRRD = new CJBig2_GRRDProc(); |
| + nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc()); |
| pGRRD->GRW = SYMWIDTH; |
| pGRRD->GRH = HCHEIGHT; |
| pGRRD->GRTEMPLATE = SDRTEMPLATE; |
| @@ -2097,12 +2057,11 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| pGRRD->GRAT[1] = SDRAT[1]; |
| pGRRD->GRAT[2] = SDRAT[2]; |
| pGRRD->GRAT[3] = SDRAT[3]; |
| - pArithDecoder = new CJBig2_ArithDecoder(pStream); |
| - BS = pGRRD->decode(pArithDecoder, grContext); |
| + nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder( |
| + new CJBig2_ArithDecoder(pStream)); |
| + BS = pGRRD->decode(pArithDecoder.get(), grContext); |
| if (BS == NULL) { |
| FX_Free(SBSYMS); |
| - delete pGRRD; |
| - delete pArithDecoder; |
| goto failed; |
| } |
| pStream->alignByte(); |
| @@ -2110,13 +2069,9 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) { |
| delete BS; |
| FX_Free(SBSYMS); |
| - delete pGRRD; |
| - delete pArithDecoder; |
| goto failed; |
| } |
| FX_Free(SBSYMS); |
| - delete pGRRD; |
| - delete pArithDecoder; |
| } |
| SDNEWSYMS[NSYMSDECODED] = BS; |
| } |
| @@ -2143,7 +2098,7 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| goto failed; |
| } |
| } else { |
| - pGRD = new CJBig2_GRDProc(); |
| + nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc()); |
| pGRD->MMR = 1; |
| pGRD->GBW = TOTWIDTH; |
| pGRD->GBH = HCHEIGHT; |
| @@ -2151,7 +2106,6 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
| pGRD->Continue_decode(pPause); |
| } |
| - delete pGRD; |
| pStream->alignByte(); |
| } |
| nTmp = 0; |
| @@ -2168,17 +2122,15 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| } |
| EXINDEX = 0; |
| CUREXFLAG = 0; |
| - pTable = new CJBig2_HuffmanTable( |
| - HuffmanTable_B1, FX_ArraySize(HuffmanTable_B1), HuffmanTable_HTOOB_B1); |
| + pTable.reset(new CJBig2_HuffmanTable( |
| + HuffmanTable_B1, FX_ArraySize(HuffmanTable_B1), HuffmanTable_HTOOB_B1)); |
| EXFLAGS = FX_Alloc(FX_BOOL, SDNUMINSYMS + SDNUMNEWSYMS); |
| while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) { |
| - if (pHuffmanDecoder->decodeAValue(pTable, (int*)&EXRUNLENGTH) != 0) { |
| - delete pTable; |
| + if (pHuffmanDecoder->decodeAValue(pTable.get(), (int*)&EXRUNLENGTH) != 0) { |
| FX_Free(EXFLAGS); |
| goto failed; |
| } |
| if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) { |
| - delete pTable; |
| FX_Free(EXFLAGS); |
| goto failed; |
| } |
| @@ -2190,8 +2142,6 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| EXINDEX = EXINDEX + EXRUNLENGTH; |
| CUREXFLAG = !CUREXFLAG; |
| } |
| - delete pTable; |
| - pDict = new CJBig2_SymbolDict(); |
| pDict->SDNUMEXSYMS = SDNUMEXSYMS; |
| pDict->SDEXSYMS = FX_Alloc(CJBig2_Image*, SDNUMEXSYMS); |
| I = J = 0; |
| @@ -2215,8 +2165,7 @@ CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, |
| if (SDREFAGG == 0) { |
| FX_Free(SDNEWSYMWIDTHS); |
| } |
| - delete pHuffmanDecoder; |
| - return pDict; |
| + return pDict.release(); |
| failed: |
| for (I = 0; I < NSYMSDECODED; I++) { |
| delete SDNEWSYMS[I]; |
| @@ -2225,9 +2174,9 @@ failed: |
| if (SDREFAGG == 0) { |
| FX_Free(SDNEWSYMWIDTHS); |
| } |
| - delete pHuffmanDecoder; |
| return NULL; |
| } |
| + |
| CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext, |
| IFX_Pause* pPause) { |
| @@ -2235,11 +2184,11 @@ CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| int32_t x, y; |
| FX_DWORD HBPP; |
| FX_DWORD* GI; |
| - CJBig2_Image* HSKIP = nullptr; |
| - CJBig2_Image* HTREG = new CJBig2_Image(HBW, HBH); |
| + nonstd::unique_ptr<CJBig2_Image> HSKIP; |
| + nonstd::unique_ptr<CJBig2_Image> HTREG(new CJBig2_Image(HBW, HBH)); |
| HTREG->fill(HDEFPIXEL); |
| if (HENABLESKIP == 1) { |
| - HSKIP = new CJBig2_Image(HGW, HGH); |
| + HSKIP.reset(new CJBig2_Image(HGW, HGH)); |
| for (mg = 0; mg < HGH; mg++) { |
| for (ng = 0; ng < HGW; ng++) { |
| x = (HGX + mg * HRY + ng * HRX) >> 8; |
| @@ -2257,18 +2206,18 @@ CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| while ((FX_DWORD)(1 << HBPP) < HNUMPATS) { |
| HBPP++; |
| } |
| - CJBig2_GSIDProc* pGID = new CJBig2_GSIDProc(); |
| + nonstd::unique_ptr<CJBig2_GSIDProc> pGID(new CJBig2_GSIDProc()); |
| pGID->GSMMR = HMMR; |
| pGID->GSW = HGW; |
| pGID->GSH = HGH; |
| pGID->GSBPP = (uint8_t)HBPP; |
| pGID->GSUSESKIP = HENABLESKIP; |
| - pGID->GSKIP = HSKIP; |
| + pGID->GSKIP = HSKIP.get(); |
| pGID->GSTEMPLATE = HTEMPLATE; |
| GI = pGID->decode_Arith(pArithDecoder, gbContext, pPause); |
| - if (GI == NULL) { |
| - goto failed; |
| - } |
| + if (GI == NULL) |
| + return nullptr; |
| + |
| for (mg = 0; mg < HGH; mg++) { |
| for (ng = 0; ng < HGW; ng++) { |
| x = (HGX + mg * HRY + ng * HRX) >> 8; |
| @@ -2281,27 +2230,21 @@ CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| } |
| } |
| FX_Free(GI); |
| - delete HSKIP; |
| - delete pGID; |
| - return HTREG; |
| -failed: |
| - delete HSKIP; |
| - delete pGID; |
| - delete HTREG; |
| - return NULL; |
| + return HTREG.release(); |
| } |
| + |
| CJBig2_Image* CJBig2_HTRDProc::decode_MMR(CJBig2_BitStream* pStream, |
| IFX_Pause* pPause) { |
| FX_DWORD ng, mg; |
| int32_t x, y; |
| FX_DWORD* GI; |
| - CJBig2_Image* HTREG = new CJBig2_Image(HBW, HBH); |
| + nonstd::unique_ptr<CJBig2_Image> HTREG(new CJBig2_Image(HBW, HBH)); |
| HTREG->fill(HDEFPIXEL); |
| FX_DWORD HBPP = 1; |
| while ((FX_DWORD)(1 << HBPP) < HNUMPATS) { |
| HBPP++; |
| } |
| - CJBig2_GSIDProc* pGID = new CJBig2_GSIDProc(); |
| + nonstd::unique_ptr<CJBig2_GSIDProc> pGID(new CJBig2_GSIDProc()); |
| pGID->GSMMR = HMMR; |
| pGID->GSW = HGW; |
| pGID->GSH = HGH; |
| @@ -2323,24 +2266,23 @@ CJBig2_Image* CJBig2_HTRDProc::decode_MMR(CJBig2_BitStream* pStream, |
| } |
| } |
| FX_Free(GI); |
| - delete pGID; |
| - return HTREG; |
| + return HTREG.release(); |
| failed: |
| - delete pGID; |
| - delete HTREG; |
| return NULL; |
| } |
| + |
| CJBig2_PatternDict* CJBig2_PDDProc::decode_Arith( |
| CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext, |
| IFX_Pause* pPause) { |
| FX_DWORD GRAY; |
| CJBig2_Image* BHDC = NULL; |
| - CJBig2_PatternDict* pDict = new CJBig2_PatternDict(); |
| + nonstd::unique_ptr<CJBig2_PatternDict> pDict(new CJBig2_PatternDict()); |
| pDict->NUMPATS = GRAYMAX + 1; |
| pDict->HDPATS = FX_Alloc(CJBig2_Image*, pDict->NUMPATS); |
| JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS); |
| - CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); |
| + |
| + nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc()); |
| pGRD->MMR = HDMMR; |
| pGRD->GBW = (GRAYMAX + 1) * HDPW; |
| pGRD->GBH = HDPH; |
| @@ -2362,32 +2304,28 @@ CJBig2_PatternDict* CJBig2_PDDProc::decode_Arith( |
| while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
| pGRD->Continue_decode(pPause); |
| } |
| - if (BHDC == NULL) { |
| - delete pGRD; |
| - goto failed; |
| - } |
| - delete pGRD; |
| + if (BHDC == NULL) |
| + return nullptr; |
| + |
| GRAY = 0; |
| while (GRAY <= GRAYMAX) { |
| pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH); |
| GRAY = GRAY + 1; |
| } |
| delete BHDC; |
| - return pDict; |
| -failed: |
| - delete pDict; |
| - return NULL; |
| + return pDict.release(); |
| } |
| CJBig2_PatternDict* CJBig2_PDDProc::decode_MMR(CJBig2_BitStream* pStream, |
| IFX_Pause* pPause) { |
| FX_DWORD GRAY; |
| CJBig2_Image* BHDC = NULL; |
| - CJBig2_PatternDict* pDict = new CJBig2_PatternDict(); |
| + nonstd::unique_ptr<CJBig2_PatternDict> pDict(new CJBig2_PatternDict()); |
| pDict->NUMPATS = GRAYMAX + 1; |
| pDict->HDPATS = FX_Alloc(CJBig2_Image*, pDict->NUMPATS); |
| JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS); |
| - CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); |
| + |
| + nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc()); |
| pGRD->MMR = HDMMR; |
| pGRD->GBW = (GRAYMAX + 1) * HDPW; |
| pGRD->GBH = HDPH; |
| @@ -2395,22 +2333,18 @@ CJBig2_PatternDict* CJBig2_PDDProc::decode_MMR(CJBig2_BitStream* pStream, |
| while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
| pGRD->Continue_decode(pPause); |
| } |
| - if (BHDC == NULL) { |
| - delete pGRD; |
| - goto failed; |
| - } |
| - delete pGRD; |
| + if (BHDC == NULL) |
| + return nullptr; |
| + |
| GRAY = 0; |
| while (GRAY <= GRAYMAX) { |
| pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH); |
| GRAY = GRAY + 1; |
| } |
| delete BHDC; |
| - return pDict; |
| -failed: |
| - delete pDict; |
| - return NULL; |
| + return pDict.release(); |
| } |
| + |
| FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| JBig2ArithCtx* gbContext, |
| IFX_Pause* pPause) { |
| @@ -2419,17 +2353,11 @@ FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| FX_DWORD x, y; |
| FX_DWORD* GSVALS; |
| GSPLANES = FX_Alloc(CJBig2_Image*, GSBPP); |
| - if (!GSPLANES) { |
| - return NULL; |
| - } |
| GSVALS = FX_Alloc2D(FX_DWORD, GSW, GSH); |
| - if (!GSVALS) { |
| - FX_Free(GSPLANES); |
| - return NULL; |
| - } |
| JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP); |
| JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH); |
| - CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); |
| + |
| + nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc()); |
| pGRD->MMR = GSMMR; |
| pGRD->GBW = GSW; |
| pGRD->GBH = GSH; |
| @@ -2486,14 +2414,13 @@ FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| delete GSPLANES[J]; |
| } |
| FX_Free(GSPLANES); |
| - delete pGRD; |
| return GSVALS; |
| failed: |
| FX_Free(GSPLANES); |
| - delete pGRD; |
| FX_Free(GSVALS); |
| return NULL; |
| } |
| + |
| FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream, |
| IFX_Pause* pPause) { |
| CJBig2_Image** GSPLANES; |
| @@ -2501,17 +2428,11 @@ FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream, |
| FX_DWORD x, y; |
| FX_DWORD* GSVALS; |
| GSPLANES = FX_Alloc(CJBig2_Image*, GSBPP); |
| - if (!GSPLANES) { |
| - return NULL; |
| - } |
| GSVALS = FX_Alloc2D(FX_DWORD, GSW, GSH); |
| - if (!GSVALS) { |
| - FX_Free(GSPLANES); |
| - return NULL; |
| - } |
| JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP); |
| JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH); |
| - CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); |
| + |
| + nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc()); |
| pGRD->MMR = GSMMR; |
| pGRD->GBW = GSW; |
| pGRD->GBH = GSH; |
| @@ -2552,14 +2473,13 @@ FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream, |
| delete GSPLANES[J]; |
| } |
| FX_Free(GSPLANES); |
| - delete pGRD; |
| return GSVALS; |
| failed: |
| FX_Free(GSPLANES); |
| - delete pGRD; |
| FX_Free(GSVALS); |
| return NULL; |
| } |
| + |
| FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith( |
| CJBig2_Image** pImage, |
| CJBig2_ArithDecoder* pArithDecoder, |
| @@ -2589,6 +2509,7 @@ FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith( |
| m_loopIndex = 0; |
| return decode_Arith(pPause); |
| } |
| + |
| FXCODEC_STATUS CJBig2_GRDProc::decode_Arith(IFX_Pause* pPause) { |
| int iline = m_loopIndex; |
| CJBig2_Image* pImage = *m_pImage; |
| @@ -2764,6 +2685,7 @@ FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_opt3( |
| m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; |
| return FXCODEC_STATUS_DECODE_FINISH; |
| } |
| + |
| FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_unopt( |
| CJBig2_Image* pImage, |
| CJBig2_ArithDecoder* pArithDecoder, |
| @@ -2818,6 +2740,7 @@ FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_unopt( |
| m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; |
| return FXCODEC_STATUS_DECODE_FINISH; |
| } |
| + |
| FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_opt3( |
| CJBig2_Image* pImage, |
| CJBig2_ArithDecoder* pArithDecoder, |
| @@ -2911,6 +2834,7 @@ FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_opt3( |
| m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; |
| return FXCODEC_STATUS_DECODE_FINISH; |
| } |
| + |
| FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_unopt( |
| CJBig2_Image* pImage, |
| CJBig2_ArithDecoder* pArithDecoder, |