Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "JBig2_GeneralDecoder.h" | 7 #include "JBig2_GeneralDecoder.h" |
| 8 #include "JBig2_ArithDecoder.h" | 8 #include "JBig2_ArithDecoder.h" |
| 9 #include "JBig2_ArithIntDecoder.h" | 9 #include "JBig2_ArithIntDecoder.h" |
| 10 #include "JBig2_HuffmanDecoder.h" | 10 #include "JBig2_HuffmanDecoder.h" |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 27 {0x0221, 37, 34, 0}, {0x0141, 38, 35, 0}, {0x0111, 39, 36, 0}, | 27 {0x0221, 37, 34, 0}, {0x0141, 38, 35, 0}, {0x0111, 39, 36, 0}, |
| 28 {0x0085, 40, 37, 0}, {0x0049, 41, 38, 0}, {0x0025, 42, 39, 0}, | 28 {0x0085, 40, 37, 0}, {0x0049, 41, 38, 0}, {0x0025, 42, 39, 0}, |
| 29 {0x0015, 43, 40, 0}, {0x0009, 44, 41, 0}, {0x0005, 45, 42, 0}, | 29 {0x0015, 43, 40, 0}, {0x0009, 44, 41, 0}, {0x0005, 45, 42, 0}, |
| 30 {0x0001, 45, 43, 0}, {0x5601, 46, 46, 0}}; | 30 {0x0001, 45, 43, 0}, {0x5601, 46, 46, 0}}; |
| 31 | 31 |
| 32 extern const unsigned int JBIG2_QE_NUM = FX_ArraySize(QeTable); | 32 extern const unsigned int JBIG2_QE_NUM = FX_ArraySize(QeTable); |
| 33 | 33 |
| 34 CJBig2_Image* CJBig2_GRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | 34 CJBig2_Image* CJBig2_GRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| 35 JBig2ArithCtx* gbContext) { | 35 JBig2ArithCtx* gbContext) { |
| 36 if (GBW == 0 || GBH == 0) { | 36 if (GBW == 0 || GBH == 0) { |
| 37 CJBig2_Image* pImage; | 37 return new CJBig2_Image(GBW, GBH); |
| 38 JBIG2_ALLOC(pImage, CJBig2_Image(GBW, GBH)); | |
| 39 return pImage; | |
| 40 } | 38 } |
| 41 if (GBTEMPLATE == 0) { | 39 if (GBTEMPLATE == 0) { |
| 42 if ((GBAT[0] == 3) && (GBAT[1] == (int8_t)-1) && (GBAT[2] == (int8_t)-3) && | 40 if ((GBAT[0] == 3) && (GBAT[1] == (int8_t)-1) && (GBAT[2] == (int8_t)-3) && |
| 43 (GBAT[3] == (int8_t)-1) && (GBAT[4] == 2) && (GBAT[5] == (int8_t)-2) && | 41 (GBAT[3] == (int8_t)-1) && (GBAT[4] == 2) && (GBAT[5] == (int8_t)-2) && |
| 44 (GBAT[6] == (int8_t)-2) && (GBAT[7] == (int8_t)-2)) { | 42 (GBAT[6] == (int8_t)-2) && (GBAT[7] == (int8_t)-2)) { |
| 45 return decode_Arith_Template0_opt3(pArithDecoder, gbContext); | 43 return decode_Arith_Template0_opt3(pArithDecoder, gbContext); |
| 46 } else { | 44 } else { |
| 47 return decode_Arith_Template0_unopt(pArithDecoder, gbContext); | 45 return decode_Arith_Template0_unopt(pArithDecoder, gbContext); |
| 48 } | 46 } |
| 49 } else if (GBTEMPLATE == 1) { | 47 } else if (GBTEMPLATE == 1) { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 64 } else { | 62 } else { |
| 65 return decode_Arith_Template3_unopt(pArithDecoder, gbContext); | 63 return decode_Arith_Template3_unopt(pArithDecoder, gbContext); |
| 66 } | 64 } |
| 67 } | 65 } |
| 68 } | 66 } |
| 69 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3( | 67 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3( |
| 70 CJBig2_ArithDecoder* pArithDecoder, | 68 CJBig2_ArithDecoder* pArithDecoder, |
| 71 JBig2ArithCtx* gbContext) { | 69 JBig2ArithCtx* gbContext) { |
| 72 FX_BOOL LTP, SLTP, bVal; | 70 FX_BOOL LTP, SLTP, bVal; |
| 73 FX_DWORD CONTEXT; | 71 FX_DWORD CONTEXT; |
| 74 CJBig2_Image* GBREG; | |
| 75 FX_DWORD line1, line2; | 72 FX_DWORD line1, line2; |
| 76 uint8_t *pLine, *pLine1, *pLine2, cVal; | 73 uint8_t *pLine, *pLine1, *pLine2, cVal; |
| 77 int32_t nStride, nStride2, k; | 74 int32_t nStride, nStride2, k; |
| 78 int32_t nLineBytes, nBitsLeft, cc; | 75 int32_t nLineBytes, nBitsLeft, cc; |
| 79 LTP = 0; | 76 LTP = 0; |
| 80 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH)); | 77 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| 81 if (GBREG->m_pData == NULL) { | 78 if (GBREG->m_pData == NULL) { |
| 82 delete GBREG; | 79 delete GBREG; |
| 83 return NULL; | 80 return NULL; |
| 84 } | 81 } |
| 85 pLine = GBREG->m_pData; | 82 pLine = GBREG->m_pData; |
| 86 nStride = GBREG->m_nStride; | 83 nStride = GBREG->m_nStride; |
| 87 nStride2 = nStride << 1; | 84 nStride2 = nStride << 1; |
| 88 nLineBytes = ((GBW + 7) >> 3) - 1; | 85 nLineBytes = ((GBW + 7) >> 3) - 1; |
| 89 nBitsLeft = GBW - (nLineBytes << 3); | 86 nBitsLeft = GBW - (nLineBytes << 3); |
| 90 FX_DWORD height = GBH & 0x7fffffff; | 87 FX_DWORD height = GBH & 0x7fffffff; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 155 } | 152 } |
| 156 pLine += nStride; | 153 pLine += nStride; |
| 157 } | 154 } |
| 158 return GBREG; | 155 return GBREG; |
| 159 } | 156 } |
| 160 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_unopt( | 157 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_unopt( |
| 161 CJBig2_ArithDecoder* pArithDecoder, | 158 CJBig2_ArithDecoder* pArithDecoder, |
| 162 JBig2ArithCtx* gbContext) { | 159 JBig2ArithCtx* gbContext) { |
| 163 FX_BOOL LTP, SLTP, bVal; | 160 FX_BOOL LTP, SLTP, bVal; |
| 164 FX_DWORD CONTEXT; | 161 FX_DWORD CONTEXT; |
| 165 CJBig2_Image* GBREG; | |
| 166 FX_DWORD line1, line2, line3; | 162 FX_DWORD line1, line2, line3; |
| 167 LTP = 0; | 163 LTP = 0; |
| 168 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH)); | 164 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| 169 GBREG->fill(0); | 165 GBREG->fill(0); |
| 170 for (FX_DWORD h = 0; h < GBH; h++) { | 166 for (FX_DWORD h = 0; h < GBH; h++) { |
| 171 if (TPGDON) { | 167 if (TPGDON) { |
| 172 SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]); | 168 SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]); |
| 173 LTP = LTP ^ SLTP; | 169 LTP = LTP ^ SLTP; |
| 174 } | 170 } |
| 175 if (LTP == 1) { | 171 if (LTP == 1) { |
| 176 GBREG->copyLine(h, h - 1); | 172 GBREG->copyLine(h, h - 1); |
| 177 } else { | 173 } else { |
| 178 line1 = GBREG->getPixel(1, h - 2); | 174 line1 = GBREG->getPixel(1, h - 2); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 203 } | 199 } |
| 204 } | 200 } |
| 205 } | 201 } |
| 206 return GBREG; | 202 return GBREG; |
| 207 } | 203 } |
| 208 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3( | 204 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3( |
| 209 CJBig2_ArithDecoder* pArithDecoder, | 205 CJBig2_ArithDecoder* pArithDecoder, |
| 210 JBig2ArithCtx* gbContext) { | 206 JBig2ArithCtx* gbContext) { |
| 211 FX_BOOL LTP, SLTP, bVal; | 207 FX_BOOL LTP, SLTP, bVal; |
| 212 FX_DWORD CONTEXT; | 208 FX_DWORD CONTEXT; |
| 213 CJBig2_Image* GBREG; | |
| 214 FX_DWORD line1, line2; | 209 FX_DWORD line1, line2; |
| 215 uint8_t *pLine, *pLine1, *pLine2, cVal; | 210 uint8_t *pLine, *pLine1, *pLine2, cVal; |
| 216 int32_t nStride, nStride2, k; | 211 int32_t nStride, nStride2, k; |
| 217 int32_t nLineBytes, nBitsLeft, cc; | 212 int32_t nLineBytes, nBitsLeft, cc; |
| 218 LTP = 0; | 213 LTP = 0; |
| 219 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH)); | 214 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| 220 if (GBREG->m_pData == NULL) { | 215 if (GBREG->m_pData == NULL) { |
| 221 delete GBREG; | 216 delete GBREG; |
| 222 return NULL; | 217 return NULL; |
| 223 } | 218 } |
| 224 pLine = GBREG->m_pData; | 219 pLine = GBREG->m_pData; |
| 225 nStride = GBREG->m_nStride; | 220 nStride = GBREG->m_nStride; |
| 226 nStride2 = nStride << 1; | 221 nStride2 = nStride << 1; |
| 227 nLineBytes = ((GBW + 7) >> 3) - 1; | 222 nLineBytes = ((GBW + 7) >> 3) - 1; |
| 228 nBitsLeft = GBW - (nLineBytes << 3); | 223 nBitsLeft = GBW - (nLineBytes << 3); |
| 229 for (FX_DWORD h = 0; h < GBH; h++) { | 224 for (FX_DWORD h = 0; h < GBH; h++) { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 293 } | 288 } |
| 294 pLine += nStride; | 289 pLine += nStride; |
| 295 } | 290 } |
| 296 return GBREG; | 291 return GBREG; |
| 297 } | 292 } |
| 298 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_unopt( | 293 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_unopt( |
| 299 CJBig2_ArithDecoder* pArithDecoder, | 294 CJBig2_ArithDecoder* pArithDecoder, |
| 300 JBig2ArithCtx* gbContext) { | 295 JBig2ArithCtx* gbContext) { |
| 301 FX_BOOL LTP, SLTP, bVal; | 296 FX_BOOL LTP, SLTP, bVal; |
| 302 FX_DWORD CONTEXT; | 297 FX_DWORD CONTEXT; |
| 303 CJBig2_Image* GBREG; | |
| 304 FX_DWORD line1, line2, line3; | 298 FX_DWORD line1, line2, line3; |
| 305 LTP = 0; | 299 LTP = 0; |
| 306 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH)); | 300 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| 307 GBREG->fill(0); | 301 GBREG->fill(0); |
| 308 for (FX_DWORD h = 0; h < GBH; h++) { | 302 for (FX_DWORD h = 0; h < GBH; h++) { |
| 309 if (TPGDON) { | 303 if (TPGDON) { |
| 310 SLTP = pArithDecoder->DECODE(&gbContext[0x0795]); | 304 SLTP = pArithDecoder->DECODE(&gbContext[0x0795]); |
| 311 LTP = LTP ^ SLTP; | 305 LTP = LTP ^ SLTP; |
| 312 } | 306 } |
| 313 if (LTP == 1) { | 307 if (LTP == 1) { |
| 314 GBREG->copyLine(h, h - 1); | 308 GBREG->copyLine(h, h - 1); |
| 315 } else { | 309 } else { |
| 316 line1 = GBREG->getPixel(2, h - 2); | 310 line1 = GBREG->getPixel(2, h - 2); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 339 } | 333 } |
| 340 } | 334 } |
| 341 } | 335 } |
| 342 return GBREG; | 336 return GBREG; |
| 343 } | 337 } |
| 344 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3( | 338 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3( |
| 345 CJBig2_ArithDecoder* pArithDecoder, | 339 CJBig2_ArithDecoder* pArithDecoder, |
| 346 JBig2ArithCtx* gbContext) { | 340 JBig2ArithCtx* gbContext) { |
| 347 FX_BOOL LTP, SLTP, bVal; | 341 FX_BOOL LTP, SLTP, bVal; |
| 348 FX_DWORD CONTEXT; | 342 FX_DWORD CONTEXT; |
| 349 CJBig2_Image* GBREG; | |
| 350 FX_DWORD line1, line2; | 343 FX_DWORD line1, line2; |
| 351 uint8_t *pLine, *pLine1, *pLine2, cVal; | 344 uint8_t *pLine, *pLine1, *pLine2, cVal; |
| 352 int32_t nStride, nStride2, k; | 345 int32_t nStride, nStride2, k; |
| 353 int32_t nLineBytes, nBitsLeft, cc; | 346 int32_t nLineBytes, nBitsLeft, cc; |
| 354 LTP = 0; | 347 LTP = 0; |
| 355 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH)); | 348 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| 356 if (GBREG->m_pData == NULL) { | 349 if (GBREG->m_pData == NULL) { |
| 357 delete GBREG; | 350 delete GBREG; |
| 358 return NULL; | 351 return NULL; |
| 359 } | 352 } |
| 360 pLine = GBREG->m_pData; | 353 pLine = GBREG->m_pData; |
| 361 nStride = GBREG->m_nStride; | 354 nStride = GBREG->m_nStride; |
| 362 nStride2 = nStride << 1; | 355 nStride2 = nStride << 1; |
| 363 nLineBytes = ((GBW + 7) >> 3) - 1; | 356 nLineBytes = ((GBW + 7) >> 3) - 1; |
| 364 nBitsLeft = GBW - (nLineBytes << 3); | 357 nBitsLeft = GBW - (nLineBytes << 3); |
| 365 for (FX_DWORD h = 0; h < GBH; h++) { | 358 for (FX_DWORD h = 0; h < GBH; h++) { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 429 } | 422 } |
| 430 pLine += nStride; | 423 pLine += nStride; |
| 431 } | 424 } |
| 432 return GBREG; | 425 return GBREG; |
| 433 } | 426 } |
| 434 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_unopt( | 427 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_unopt( |
| 435 CJBig2_ArithDecoder* pArithDecoder, | 428 CJBig2_ArithDecoder* pArithDecoder, |
| 436 JBig2ArithCtx* gbContext) { | 429 JBig2ArithCtx* gbContext) { |
| 437 FX_BOOL LTP, SLTP, bVal; | 430 FX_BOOL LTP, SLTP, bVal; |
| 438 FX_DWORD CONTEXT; | 431 FX_DWORD CONTEXT; |
| 439 CJBig2_Image* GBREG; | |
| 440 FX_DWORD line1, line2, line3; | 432 FX_DWORD line1, line2, line3; |
| 441 LTP = 0; | 433 LTP = 0; |
| 442 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH)); | 434 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| 443 GBREG->fill(0); | 435 GBREG->fill(0); |
| 444 for (FX_DWORD h = 0; h < GBH; h++) { | 436 for (FX_DWORD h = 0; h < GBH; h++) { |
| 445 if (TPGDON) { | 437 if (TPGDON) { |
| 446 SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]); | 438 SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]); |
| 447 LTP = LTP ^ SLTP; | 439 LTP = LTP ^ SLTP; |
| 448 } | 440 } |
| 449 if (LTP == 1) { | 441 if (LTP == 1) { |
| 450 GBREG->copyLine(h, h - 1); | 442 GBREG->copyLine(h, h - 1); |
| 451 } else { | 443 } else { |
| 452 line1 = GBREG->getPixel(1, h - 2); | 444 line1 = GBREG->getPixel(1, h - 2); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 473 } | 465 } |
| 474 } | 466 } |
| 475 } | 467 } |
| 476 return GBREG; | 468 return GBREG; |
| 477 } | 469 } |
| 478 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3( | 470 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3( |
| 479 CJBig2_ArithDecoder* pArithDecoder, | 471 CJBig2_ArithDecoder* pArithDecoder, |
| 480 JBig2ArithCtx* gbContext) { | 472 JBig2ArithCtx* gbContext) { |
| 481 FX_BOOL LTP, SLTP, bVal; | 473 FX_BOOL LTP, SLTP, bVal; |
| 482 FX_DWORD CONTEXT; | 474 FX_DWORD CONTEXT; |
| 483 CJBig2_Image* GBREG; | |
| 484 FX_DWORD line1; | 475 FX_DWORD line1; |
| 485 uint8_t *pLine, *pLine1, cVal; | 476 uint8_t *pLine, *pLine1, cVal; |
| 486 int32_t nStride, k; | 477 int32_t nStride, k; |
| 487 int32_t nLineBytes, nBitsLeft, cc; | 478 int32_t nLineBytes, nBitsLeft, cc; |
| 488 LTP = 0; | 479 LTP = 0; |
| 489 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH)); | 480 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| 490 if (GBREG->m_pData == NULL) { | 481 if (GBREG->m_pData == NULL) { |
| 491 delete GBREG; | 482 delete GBREG; |
| 492 return NULL; | 483 return NULL; |
| 493 } | 484 } |
| 494 pLine = GBREG->m_pData; | 485 pLine = GBREG->m_pData; |
| 495 nStride = GBREG->m_nStride; | 486 nStride = GBREG->m_nStride; |
| 496 nLineBytes = ((GBW + 7) >> 3) - 1; | 487 nLineBytes = ((GBW + 7) >> 3) - 1; |
| 497 nBitsLeft = GBW - (nLineBytes << 3); | 488 nBitsLeft = GBW - (nLineBytes << 3); |
| 498 for (FX_DWORD h = 0; h < GBH; h++) { | 489 for (FX_DWORD h = 0; h < GBH; h++) { |
| 499 if (TPGDON) { | 490 if (TPGDON) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 549 } | 540 } |
| 550 pLine += nStride; | 541 pLine += nStride; |
| 551 } | 542 } |
| 552 return GBREG; | 543 return GBREG; |
| 553 } | 544 } |
| 554 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_unopt( | 545 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_unopt( |
| 555 CJBig2_ArithDecoder* pArithDecoder, | 546 CJBig2_ArithDecoder* pArithDecoder, |
| 556 JBig2ArithCtx* gbContext) { | 547 JBig2ArithCtx* gbContext) { |
| 557 FX_BOOL LTP, SLTP, bVal; | 548 FX_BOOL LTP, SLTP, bVal; |
| 558 FX_DWORD CONTEXT; | 549 FX_DWORD CONTEXT; |
| 559 CJBig2_Image* GBREG; | |
| 560 FX_DWORD line1, line2; | 550 FX_DWORD line1, line2; |
| 561 LTP = 0; | 551 LTP = 0; |
| 562 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH)); | 552 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); |
| 563 GBREG->fill(0); | 553 GBREG->fill(0); |
| 564 for (FX_DWORD h = 0; h < GBH; h++) { | 554 for (FX_DWORD h = 0; h < GBH; h++) { |
| 565 if (TPGDON) { | 555 if (TPGDON) { |
| 566 SLTP = pArithDecoder->DECODE(&gbContext[0x0195]); | 556 SLTP = pArithDecoder->DECODE(&gbContext[0x0195]); |
| 567 LTP = LTP ^ SLTP; | 557 LTP = LTP ^ SLTP; |
| 568 } | 558 } |
| 569 if (LTP == 1) { | 559 if (LTP == 1) { |
| 570 GBREG->copyLine(h, h - 1); | 560 GBREG->copyLine(h, h - 1); |
| 571 } else { | 561 } else { |
| 572 line1 = GBREG->getPixel(1, h - 1); | 562 line1 = GBREG->getPixel(1, h - 1); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 587 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x1f; | 577 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x1f; |
| 588 line2 = ((line2 << 1) | bVal) & 0x0f; | 578 line2 = ((line2 << 1) | bVal) & 0x0f; |
| 589 } | 579 } |
| 590 } | 580 } |
| 591 } | 581 } |
| 592 return GBREG; | 582 return GBREG; |
| 593 } | 583 } |
| 594 CJBig2_Image* CJBig2_GRRDProc::decode(CJBig2_ArithDecoder* pArithDecoder, | 584 CJBig2_Image* CJBig2_GRRDProc::decode(CJBig2_ArithDecoder* pArithDecoder, |
| 595 JBig2ArithCtx* grContext) { | 585 JBig2ArithCtx* grContext) { |
| 596 if (GRW == 0 || GRH == 0) { | 586 if (GRW == 0 || GRH == 0) { |
| 597 CJBig2_Image* pImage; | 587 return new CJBig2_Image(GRW, GRH); |
| 598 JBIG2_ALLOC(pImage, CJBig2_Image(GRW, GRH)); | |
| 599 return pImage; | |
| 600 } | 588 } |
| 601 if (GRTEMPLATE == 0) { | 589 if (GRTEMPLATE == 0) { |
| 602 if ((GRAT[0] == (int8_t)-1) && (GRAT[1] == (int8_t)-1) && | 590 if ((GRAT[0] == (int8_t)-1) && (GRAT[1] == (int8_t)-1) && |
| 603 (GRAT[2] == (int8_t)-1) && (GRAT[3] == (int8_t)-1) && | 591 (GRAT[2] == (int8_t)-1) && (GRAT[3] == (int8_t)-1) && |
| 604 (GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) { | 592 (GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) { |
| 605 return decode_Template0_opt(pArithDecoder, grContext); | 593 return decode_Template0_opt(pArithDecoder, grContext); |
| 606 } else { | 594 } else { |
| 607 return decode_Template0_unopt(pArithDecoder, grContext); | 595 return decode_Template0_unopt(pArithDecoder, grContext); |
| 608 } | 596 } |
| 609 } else { | 597 } else { |
| 610 if ((GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) { | 598 if ((GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) { |
| 611 return decode_Template1_opt(pArithDecoder, grContext); | 599 return decode_Template1_opt(pArithDecoder, grContext); |
| 612 } else { | 600 } else { |
| 613 return decode_Template1_unopt(pArithDecoder, grContext); | 601 return decode_Template1_unopt(pArithDecoder, grContext); |
| 614 } | 602 } |
| 615 } | 603 } |
| 616 } | 604 } |
| 617 CJBig2_Image* CJBig2_GRRDProc::decode_Template0_unopt( | 605 CJBig2_Image* CJBig2_GRRDProc::decode_Template0_unopt( |
| 618 CJBig2_ArithDecoder* pArithDecoder, | 606 CJBig2_ArithDecoder* pArithDecoder, |
| 619 JBig2ArithCtx* grContext) { | 607 JBig2ArithCtx* grContext) { |
| 620 FX_BOOL LTP, SLTP, bVal; | 608 FX_BOOL LTP, SLTP, bVal; |
| 621 FX_DWORD CONTEXT; | 609 FX_DWORD CONTEXT; |
| 622 CJBig2_Image* GRREG; | |
| 623 FX_DWORD line1, line2, line3, line4, line5; | 610 FX_DWORD line1, line2, line3, line4, line5; |
| 624 LTP = 0; | 611 LTP = 0; |
| 625 JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH)); | 612 CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); |
| 626 GRREG->fill(0); | 613 GRREG->fill(0); |
| 627 for (FX_DWORD h = 0; h < GRH; h++) { | 614 for (FX_DWORD h = 0; h < GRH; h++) { |
| 628 if (TPGRON) { | 615 if (TPGRON) { |
| 629 SLTP = pArithDecoder->DECODE(&grContext[0x0010]); | 616 SLTP = pArithDecoder->DECODE(&grContext[0x0010]); |
| 630 LTP = LTP ^ SLTP; | 617 LTP = LTP ^ SLTP; |
| 631 } | 618 } |
| 632 if (LTP == 0) { | 619 if (LTP == 0) { |
| 633 line1 = GRREG->getPixel(1, h - 1); | 620 line1 = GRREG->getPixel(1, h - 1); |
| 634 line1 |= GRREG->getPixel(0, h - 1) << 1; | 621 line1 |= GRREG->getPixel(0, h - 1) << 1; |
| 635 line2 = 0; | 622 line2 = 0; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 727 } | 714 } |
| 728 } | 715 } |
| 729 } | 716 } |
| 730 return GRREG; | 717 return GRREG; |
| 731 } | 718 } |
| 732 CJBig2_Image* CJBig2_GRRDProc::decode_Template0_opt( | 719 CJBig2_Image* CJBig2_GRRDProc::decode_Template0_opt( |
| 733 CJBig2_ArithDecoder* pArithDecoder, | 720 CJBig2_ArithDecoder* pArithDecoder, |
| 734 JBig2ArithCtx* grContext) { | 721 JBig2ArithCtx* grContext) { |
| 735 FX_BOOL LTP, SLTP, bVal; | 722 FX_BOOL LTP, SLTP, bVal; |
| 736 FX_DWORD CONTEXT; | 723 FX_DWORD CONTEXT; |
| 737 CJBig2_Image* GRREG; | |
| 738 FX_DWORD line1, line1_r, line2_r, line3_r; | 724 FX_DWORD line1, line1_r, line2_r, line3_r; |
| 739 uint8_t *pLine, *pLineR, cVal; | 725 uint8_t *pLine, *pLineR, cVal; |
| 740 intptr_t nStride, nStrideR, nOffset; | 726 intptr_t nStride, nStrideR, nOffset; |
| 741 int32_t k, nBits; | 727 int32_t k, nBits; |
| 742 int32_t GRWR, GRHR; | 728 int32_t GRWR, GRHR; |
| 743 int32_t GRW, GRH; | 729 int32_t GRW, GRH; |
| 744 GRW = (int32_t)CJBig2_GRRDProc::GRW; | 730 GRW = (int32_t)CJBig2_GRRDProc::GRW; |
| 745 GRH = (int32_t)CJBig2_GRRDProc::GRH; | 731 GRH = (int32_t)CJBig2_GRRDProc::GRH; |
| 746 LTP = 0; | 732 LTP = 0; |
| 747 JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH)); | 733 CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); |
| 748 if (GRREG->m_pData == NULL) { | 734 if (GRREG->m_pData == NULL) { |
| 749 delete GRREG; | 735 delete GRREG; |
| 750 return NULL; | 736 return NULL; |
| 751 } | 737 } |
| 752 pLine = GRREG->m_pData; | 738 pLine = GRREG->m_pData; |
| 753 pLineR = GRREFERENCE->m_pData; | 739 pLineR = GRREFERENCE->m_pData; |
| 754 nStride = GRREG->m_nStride; | 740 nStride = GRREG->m_nStride; |
| 755 nStrideR = GRREFERENCE->m_nStride; | 741 nStrideR = GRREFERENCE->m_nStride; |
| 756 GRWR = (int32_t)GRREFERENCE->m_nWidth; | 742 GRWR = (int32_t)GRREFERENCE->m_nWidth; |
| 757 GRHR = (int32_t)GRREFERENCE->m_nHeight; | 743 GRHR = (int32_t)GRREFERENCE->m_nHeight; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 862 pLineR += nStrideR; | 848 pLineR += nStrideR; |
| 863 } | 849 } |
| 864 } | 850 } |
| 865 return GRREG; | 851 return GRREG; |
| 866 } | 852 } |
| 867 CJBig2_Image* CJBig2_GRRDProc::decode_Template1_unopt( | 853 CJBig2_Image* CJBig2_GRRDProc::decode_Template1_unopt( |
| 868 CJBig2_ArithDecoder* pArithDecoder, | 854 CJBig2_ArithDecoder* pArithDecoder, |
| 869 JBig2ArithCtx* grContext) { | 855 JBig2ArithCtx* grContext) { |
| 870 FX_BOOL LTP, SLTP, bVal; | 856 FX_BOOL LTP, SLTP, bVal; |
| 871 FX_DWORD CONTEXT; | 857 FX_DWORD CONTEXT; |
| 872 CJBig2_Image* GRREG; | |
| 873 FX_DWORD line1, line2, line3, line4, line5; | 858 FX_DWORD line1, line2, line3, line4, line5; |
| 874 LTP = 0; | 859 LTP = 0; |
| 875 JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH)); | 860 CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); |
| 876 GRREG->fill(0); | 861 GRREG->fill(0); |
| 877 for (FX_DWORD h = 0; h < GRH; h++) { | 862 for (FX_DWORD h = 0; h < GRH; h++) { |
| 878 if (TPGRON) { | 863 if (TPGRON) { |
| 879 SLTP = pArithDecoder->DECODE(&grContext[0x0008]); | 864 SLTP = pArithDecoder->DECODE(&grContext[0x0008]); |
| 880 LTP = LTP ^ SLTP; | 865 LTP = LTP ^ SLTP; |
| 881 } | 866 } |
| 882 if (LTP == 0) { | 867 if (LTP == 0) { |
| 883 line1 = GRREG->getPixel(1, h - 1); | 868 line1 = GRREG->getPixel(1, h - 1); |
| 884 line1 |= GRREG->getPixel(0, h - 1) << 1; | 869 line1 |= GRREG->getPixel(0, h - 1) << 1; |
| 885 line1 |= GRREG->getPixel(-1, h - 1) << 2; | 870 line1 |= GRREG->getPixel(-1, h - 1) << 2; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 963 } | 948 } |
| 964 } | 949 } |
| 965 } | 950 } |
| 966 return GRREG; | 951 return GRREG; |
| 967 } | 952 } |
| 968 CJBig2_Image* CJBig2_GRRDProc::decode_Template1_opt( | 953 CJBig2_Image* CJBig2_GRRDProc::decode_Template1_opt( |
| 969 CJBig2_ArithDecoder* pArithDecoder, | 954 CJBig2_ArithDecoder* pArithDecoder, |
| 970 JBig2ArithCtx* grContext) { | 955 JBig2ArithCtx* grContext) { |
| 971 FX_BOOL LTP, SLTP, bVal; | 956 FX_BOOL LTP, SLTP, bVal; |
| 972 FX_DWORD CONTEXT; | 957 FX_DWORD CONTEXT; |
| 973 CJBig2_Image* GRREG; | |
| 974 FX_DWORD line1, line1_r, line2_r, line3_r; | 958 FX_DWORD line1, line1_r, line2_r, line3_r; |
| 975 uint8_t *pLine, *pLineR, cVal; | 959 uint8_t *pLine, *pLineR, cVal; |
| 976 intptr_t nStride, nStrideR, nOffset; | 960 intptr_t nStride, nStrideR, nOffset; |
| 977 int32_t k, nBits; | 961 int32_t k, nBits; |
| 978 int32_t GRWR, GRHR; | 962 int32_t GRWR, GRHR; |
| 979 int32_t GRW, GRH; | 963 int32_t GRW, GRH; |
| 980 GRW = (int32_t)CJBig2_GRRDProc::GRW; | 964 GRW = (int32_t)CJBig2_GRRDProc::GRW; |
| 981 GRH = (int32_t)CJBig2_GRRDProc::GRH; | 965 GRH = (int32_t)CJBig2_GRRDProc::GRH; |
| 982 LTP = 0; | 966 LTP = 0; |
| 983 JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH)); | 967 CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); |
| 984 if (GRREG->m_pData == NULL) { | 968 if (GRREG->m_pData == NULL) { |
| 985 delete GRREG; | 969 delete GRREG; |
| 986 return NULL; | 970 return NULL; |
| 987 } | 971 } |
| 988 pLine = GRREG->m_pData; | 972 pLine = GRREG->m_pData; |
| 989 pLineR = GRREFERENCE->m_pData; | 973 pLineR = GRREFERENCE->m_pData; |
| 990 nStride = GRREG->m_nStride; | 974 nStride = GRREG->m_nStride; |
| 991 nStrideR = GRREFERENCE->m_nStride; | 975 nStrideR = GRREFERENCE->m_nStride; |
| 992 GRWR = (int32_t)GRREFERENCE->m_nWidth; | 976 GRWR = (int32_t)GRREFERENCE->m_nWidth; |
| 993 GRHR = (int32_t)GRREFERENCE->m_nHeight; | 977 GRHR = (int32_t)GRREFERENCE->m_nHeight; |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1103 uint8_t CURT; | 1087 uint8_t CURT; |
| 1104 int32_t SI, TI; | 1088 int32_t SI, TI; |
| 1105 FX_DWORD IDI; | 1089 FX_DWORD IDI; |
| 1106 CJBig2_Image* IBI; | 1090 CJBig2_Image* IBI; |
| 1107 FX_DWORD WI, HI; | 1091 FX_DWORD WI, HI; |
| 1108 int32_t IDS; | 1092 int32_t IDS; |
| 1109 FX_BOOL RI; | 1093 FX_BOOL RI; |
| 1110 int32_t RDWI, RDHI, RDXI, RDYI; | 1094 int32_t RDWI, RDHI, RDXI, RDYI; |
| 1111 CJBig2_Image* IBOI; | 1095 CJBig2_Image* IBOI; |
| 1112 FX_DWORD WOI, HOI; | 1096 FX_DWORD WOI, HOI; |
| 1113 CJBig2_Image* SBREG; | |
| 1114 FX_BOOL bFirst; | 1097 FX_BOOL bFirst; |
| 1115 FX_DWORD nTmp; | 1098 FX_DWORD nTmp; |
| 1116 int32_t nVal, nBits; | 1099 int32_t nVal, nBits; |
| 1117 CJBig2_GRRDProc* pGRRD; | 1100 CJBig2_GRRDProc* pGRRD; |
| 1118 CJBig2_ArithDecoder* pArithDecoder; | 1101 CJBig2_ArithDecoder* pArithDecoder; |
| 1119 CJBig2_HuffmanDecoder* pHuffmanDecoder = new CJBig2_HuffmanDecoder(pStream); | 1102 CJBig2_HuffmanDecoder* pHuffmanDecoder = new CJBig2_HuffmanDecoder(pStream); |
| 1120 JBIG2_ALLOC(SBREG, CJBig2_Image(SBW, SBH)); | 1103 CJBig2_Image* SBREG = new CJBig2_Image(SBW, SBH); |
| 1121 SBREG->fill(SBDEFPIXEL); | 1104 SBREG->fill(SBDEFPIXEL); |
| 1122 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0) { | 1105 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0) { |
| 1123 goto failed; | 1106 goto failed; |
| 1124 } | 1107 } |
| 1125 STRIPT *= SBSTRIPS; | 1108 STRIPT *= SBSTRIPS; |
| 1126 STRIPT = -STRIPT; | 1109 STRIPT = -STRIPT; |
| 1127 FIRSTS = 0; | 1110 FIRSTS = 0; |
| 1128 NINSTANCES = 0; | 1111 NINSTANCES = 0; |
| 1129 while (NINSTANCES < SBNUMINSTANCES) { | 1112 while (NINSTANCES < SBNUMINSTANCES) { |
| 1130 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0) { | 1113 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1203 nTmp = pStream->getOffset(); | 1186 nTmp = pStream->getOffset(); |
| 1204 IBOI = SBSYMS[IDI]; | 1187 IBOI = SBSYMS[IDI]; |
| 1205 if (!IBOI) { | 1188 if (!IBOI) { |
| 1206 goto failed; | 1189 goto failed; |
| 1207 } | 1190 } |
| 1208 WOI = IBOI->m_nWidth; | 1191 WOI = IBOI->m_nWidth; |
| 1209 HOI = IBOI->m_nHeight; | 1192 HOI = IBOI->m_nHeight; |
| 1210 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) { | 1193 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) { |
| 1211 goto failed; | 1194 goto failed; |
| 1212 } | 1195 } |
| 1213 JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc()); | 1196 pGRRD = new CJBig2_GRRDProc(); |
| 1214 pGRRD->GRW = WOI + RDWI; | 1197 pGRRD->GRW = WOI + RDWI; |
| 1215 pGRRD->GRH = HOI + RDHI; | 1198 pGRRD->GRH = HOI + RDHI; |
| 1216 pGRRD->GRTEMPLATE = SBRTEMPLATE; | 1199 pGRRD->GRTEMPLATE = SBRTEMPLATE; |
| 1217 pGRRD->GRREFERENCE = IBOI; | 1200 pGRRD->GRREFERENCE = IBOI; |
| 1218 pGRRD->GRREFERENCEDX = (RDWI >> 2) + RDXI; | 1201 pGRRD->GRREFERENCEDX = (RDWI >> 2) + RDXI; |
| 1219 pGRRD->GRREFERENCEDY = (RDHI >> 2) + RDYI; | 1202 pGRRD->GRREFERENCEDY = (RDHI >> 2) + RDYI; |
| 1220 pGRRD->TPGRON = 0; | 1203 pGRRD->TPGRON = 0; |
| 1221 pGRRD->GRAT[0] = SBRAT[0]; | 1204 pGRRD->GRAT[0] = SBRAT[0]; |
| 1222 pGRRD->GRAT[1] = SBRAT[1]; | 1205 pGRRD->GRAT[1] = SBRAT[1]; |
| 1223 pGRRD->GRAT[2] = SBRAT[2]; | 1206 pGRRD->GRAT[2] = SBRAT[2]; |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1345 IADS = new CJBig2_ArithIntDecoder(); | 1328 IADS = new CJBig2_ArithIntDecoder(); |
| 1346 IAIT = new CJBig2_ArithIntDecoder(); | 1329 IAIT = new CJBig2_ArithIntDecoder(); |
| 1347 IARI = new CJBig2_ArithIntDecoder(); | 1330 IARI = new CJBig2_ArithIntDecoder(); |
| 1348 IARDW = new CJBig2_ArithIntDecoder(); | 1331 IARDW = new CJBig2_ArithIntDecoder(); |
| 1349 IARDH = new CJBig2_ArithIntDecoder(); | 1332 IARDH = new CJBig2_ArithIntDecoder(); |
| 1350 IARDX = new CJBig2_ArithIntDecoder(); | 1333 IARDX = new CJBig2_ArithIntDecoder(); |
| 1351 IARDY = new CJBig2_ArithIntDecoder(); | 1334 IARDY = new CJBig2_ArithIntDecoder(); |
| 1352 IAID = new CJBig2_ArithIaidDecoder(SBSYMCODELEN); | 1335 IAID = new CJBig2_ArithIaidDecoder(SBSYMCODELEN); |
| 1353 bRetained = FALSE; | 1336 bRetained = FALSE; |
| 1354 } | 1337 } |
| 1355 JBIG2_ALLOC(SBREG, CJBig2_Image(SBW, SBH)); | 1338 SBREG = new CJBig2_Image(SBW, SBH); |
| 1356 SBREG->fill(SBDEFPIXEL); | 1339 SBREG->fill(SBDEFPIXEL); |
| 1357 if (IADT->decode(pArithDecoder, &STRIPT) == -1) { | 1340 if (IADT->decode(pArithDecoder, &STRIPT) == -1) { |
| 1358 goto failed; | 1341 goto failed; |
| 1359 } | 1342 } |
| 1360 STRIPT *= SBSTRIPS; | 1343 STRIPT *= SBSTRIPS; |
| 1361 STRIPT = -STRIPT; | 1344 STRIPT = -STRIPT; |
| 1362 FIRSTS = 0; | 1345 FIRSTS = 0; |
| 1363 NINSTANCES = 0; | 1346 NINSTANCES = 0; |
| 1364 while (NINSTANCES < SBNUMINSTANCES) { | 1347 while (NINSTANCES < SBNUMINSTANCES) { |
| 1365 if (IADT->decode(pArithDecoder, &DT) == -1) { | 1348 if (IADT->decode(pArithDecoder, &DT) == -1) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1423 (IARDX->decode(pArithDecoder, &RDXI) == -1) || | 1406 (IARDX->decode(pArithDecoder, &RDXI) == -1) || |
| 1424 (IARDY->decode(pArithDecoder, &RDYI) == -1)) { | 1407 (IARDY->decode(pArithDecoder, &RDYI) == -1)) { |
| 1425 goto failed; | 1408 goto failed; |
| 1426 } | 1409 } |
| 1427 IBOI = SBSYMS[IDI]; | 1410 IBOI = SBSYMS[IDI]; |
| 1428 WOI = IBOI->m_nWidth; | 1411 WOI = IBOI->m_nWidth; |
| 1429 HOI = IBOI->m_nHeight; | 1412 HOI = IBOI->m_nHeight; |
| 1430 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) { | 1413 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) { |
| 1431 goto failed; | 1414 goto failed; |
| 1432 } | 1415 } |
| 1433 JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc()); | 1416 pGRRD = new CJBig2_GRRDProc(); |
| 1434 pGRRD->GRW = WOI + RDWI; | 1417 pGRRD->GRW = WOI + RDWI; |
| 1435 pGRRD->GRH = HOI + RDHI; | 1418 pGRRD->GRH = HOI + RDHI; |
| 1436 pGRRD->GRTEMPLATE = SBRTEMPLATE; | 1419 pGRRD->GRTEMPLATE = SBRTEMPLATE; |
| 1437 pGRRD->GRREFERENCE = IBOI; | 1420 pGRRD->GRREFERENCE = IBOI; |
| 1438 pGRRD->GRREFERENCEDX = (RDWI >> 1) + RDXI; | 1421 pGRRD->GRREFERENCEDX = (RDWI >> 1) + RDXI; |
| 1439 pGRRD->GRREFERENCEDY = (RDHI >> 1) + RDYI; | 1422 pGRRD->GRREFERENCEDY = (RDHI >> 1) + RDYI; |
| 1440 pGRRD->TPGRON = 0; | 1423 pGRRD->TPGRON = 0; |
| 1441 pGRRD->GRAT[0] = SBRAT[0]; | 1424 pGRRD->GRAT[0] = SBRAT[0]; |
| 1442 pGRRD->GRAT[1] = SBRAT[1]; | 1425 pGRRD->GRAT[1] = SBRAT[1]; |
| 1443 pGRRD->GRAT[2] = SBRAT[2]; | 1426 pGRRD->GRAT[2] = SBRAT[2]; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1573 IADS = new CJBig2_ArithIntDecoder(); | 1556 IADS = new CJBig2_ArithIntDecoder(); |
| 1574 IAIT = new CJBig2_ArithIntDecoder(); | 1557 IAIT = new CJBig2_ArithIntDecoder(); |
| 1575 IARI = new CJBig2_ArithIntDecoder(); | 1558 IARI = new CJBig2_ArithIntDecoder(); |
| 1576 IARDW = new CJBig2_ArithIntDecoder(); | 1559 IARDW = new CJBig2_ArithIntDecoder(); |
| 1577 IARDH = new CJBig2_ArithIntDecoder(); | 1560 IARDH = new CJBig2_ArithIntDecoder(); |
| 1578 nTmp = 0; | 1561 nTmp = 0; |
| 1579 while ((FX_DWORD)(1 << nTmp) < (SDNUMINSYMS + SDNUMNEWSYMS)) { | 1562 while ((FX_DWORD)(1 << nTmp) < (SDNUMINSYMS + SDNUMNEWSYMS)) { |
| 1580 nTmp++; | 1563 nTmp++; |
| 1581 } | 1564 } |
| 1582 IAID = new CJBig2_ArithIaidDecoder((uint8_t)nTmp); | 1565 IAID = new CJBig2_ArithIaidDecoder((uint8_t)nTmp); |
| 1583 SDNEWSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS, | 1566 SDNEWSYMS = |
| 1584 sizeof(CJBig2_Image*)); | 1567 (CJBig2_Image**)FX_Alloc2D(uint8_t, SDNUMNEWSYMS, sizeof(CJBig2_Image*)); |
|
Tom Sepez
2015/09/04 01:26:47
ditto
| |
| 1585 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); | 1568 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); |
| 1586 HCHEIGHT = 0; | 1569 HCHEIGHT = 0; |
| 1587 NSYMSDECODED = 0; | 1570 NSYMSDECODED = 0; |
| 1588 while (NSYMSDECODED < SDNUMNEWSYMS) { | 1571 while (NSYMSDECODED < SDNUMNEWSYMS) { |
| 1589 BS = NULL; | 1572 BS = NULL; |
| 1590 if (IADH->decode(pArithDecoder, &HCDH) == -1) { | 1573 if (IADH->decode(pArithDecoder, &HCDH) == -1) { |
| 1591 goto failed; | 1574 goto failed; |
| 1592 } | 1575 } |
| 1593 HCHEIGHT = HCHEIGHT + HCDH; | 1576 HCHEIGHT = HCHEIGHT + HCDH; |
| 1594 if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) { | 1577 if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) { |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 1611 goto failed; | 1594 goto failed; |
| 1612 } else if (HCHEIGHT == 0 || SYMWIDTH == 0) { | 1595 } else if (HCHEIGHT == 0 || SYMWIDTH == 0) { |
| 1613 TOTWIDTH = TOTWIDTH + SYMWIDTH; | 1596 TOTWIDTH = TOTWIDTH + SYMWIDTH; |
| 1614 SDNEWSYMS[NSYMSDECODED] = NULL; | 1597 SDNEWSYMS[NSYMSDECODED] = NULL; |
| 1615 NSYMSDECODED = NSYMSDECODED + 1; | 1598 NSYMSDECODED = NSYMSDECODED + 1; |
| 1616 continue; | 1599 continue; |
| 1617 } | 1600 } |
| 1618 TOTWIDTH = TOTWIDTH + SYMWIDTH; | 1601 TOTWIDTH = TOTWIDTH + SYMWIDTH; |
| 1619 } | 1602 } |
| 1620 if (SDREFAGG == 0) { | 1603 if (SDREFAGG == 0) { |
| 1621 JBIG2_ALLOC(pGRD, CJBig2_GRDProc()); | 1604 pGRD = new CJBig2_GRDProc(); |
| 1622 pGRD->MMR = 0; | 1605 pGRD->MMR = 0; |
| 1623 pGRD->GBW = SYMWIDTH; | 1606 pGRD->GBW = SYMWIDTH; |
| 1624 pGRD->GBH = HCHEIGHT; | 1607 pGRD->GBH = HCHEIGHT; |
| 1625 pGRD->GBTEMPLATE = SDTEMPLATE; | 1608 pGRD->GBTEMPLATE = SDTEMPLATE; |
| 1626 pGRD->TPGDON = 0; | 1609 pGRD->TPGDON = 0; |
| 1627 pGRD->USESKIP = 0; | 1610 pGRD->USESKIP = 0; |
| 1628 pGRD->GBAT[0] = SDAT[0]; | 1611 pGRD->GBAT[0] = SDAT[0]; |
| 1629 pGRD->GBAT[1] = SDAT[1]; | 1612 pGRD->GBAT[1] = SDAT[1]; |
| 1630 pGRD->GBAT[2] = SDAT[2]; | 1613 pGRD->GBAT[2] = SDAT[2]; |
| 1631 pGRD->GBAT[3] = SDAT[3]; | 1614 pGRD->GBAT[3] = SDAT[3]; |
| 1632 pGRD->GBAT[4] = SDAT[4]; | 1615 pGRD->GBAT[4] = SDAT[4]; |
| 1633 pGRD->GBAT[5] = SDAT[5]; | 1616 pGRD->GBAT[5] = SDAT[5]; |
| 1634 pGRD->GBAT[6] = SDAT[6]; | 1617 pGRD->GBAT[6] = SDAT[6]; |
| 1635 pGRD->GBAT[7] = SDAT[7]; | 1618 pGRD->GBAT[7] = SDAT[7]; |
| 1636 BS = pGRD->decode_Arith(pArithDecoder, gbContext); | 1619 BS = pGRD->decode_Arith(pArithDecoder, gbContext); |
| 1637 if (BS == NULL) { | 1620 if (BS == NULL) { |
| 1638 delete pGRD; | 1621 delete pGRD; |
| 1639 goto failed; | 1622 goto failed; |
| 1640 } | 1623 } |
| 1641 delete pGRD; | 1624 delete pGRD; |
| 1642 } else { | 1625 } else { |
| 1643 if (IAAI->decode(pArithDecoder, (int*)&REFAGGNINST) == -1) { | 1626 if (IAAI->decode(pArithDecoder, (int*)&REFAGGNINST) == -1) { |
| 1644 goto failed; | 1627 goto failed; |
| 1645 } | 1628 } |
| 1646 if (REFAGGNINST > 1) { | 1629 if (REFAGGNINST > 1) { |
| 1647 CJBig2_TRDProc* pDecoder; | 1630 CJBig2_TRDProc* pDecoder; |
| 1648 JBIG2_ALLOC(pDecoder, CJBig2_TRDProc()); | 1631 pDecoder = new CJBig2_TRDProc(); |
| 1649 pDecoder->SBHUFF = SDHUFF; | 1632 pDecoder->SBHUFF = SDHUFF; |
| 1650 pDecoder->SBREFINE = 1; | 1633 pDecoder->SBREFINE = 1; |
| 1651 pDecoder->SBW = SYMWIDTH; | 1634 pDecoder->SBW = SYMWIDTH; |
| 1652 pDecoder->SBH = HCHEIGHT; | 1635 pDecoder->SBH = HCHEIGHT; |
| 1653 pDecoder->SBNUMINSTANCES = REFAGGNINST; | 1636 pDecoder->SBNUMINSTANCES = REFAGGNINST; |
| 1654 pDecoder->SBSTRIPS = 1; | 1637 pDecoder->SBSTRIPS = 1; |
| 1655 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; | 1638 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; |
| 1656 SBNUMSYMS = pDecoder->SBNUMSYMS; | 1639 SBNUMSYMS = pDecoder->SBNUMSYMS; |
| 1657 nTmp = 0; | 1640 nTmp = 0; |
| 1658 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { | 1641 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { |
| 1659 nTmp++; | 1642 nTmp++; |
| 1660 } | 1643 } |
| 1661 SBSYMCODELEN = (uint8_t)nTmp; | 1644 SBSYMCODELEN = (uint8_t)nTmp; |
| 1662 pDecoder->SBSYMCODELEN = SBSYMCODELEN; | 1645 pDecoder->SBSYMCODELEN = SBSYMCODELEN; |
| 1663 SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 1646 SBSYMS = (CJBig2_Image**)FX_Alloc2D(uint8_t, SBNUMSYMS, |
|
Tom Sepez
2015/09/04 01:26:47
ditto ditto
| |
| 1664 SBNUMSYMS, sizeof(CJBig2_Image*)); | 1647 sizeof(CJBig2_Image*)); |
| 1665 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); | 1648 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); |
| 1666 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, | 1649 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, |
| 1667 NSYMSDECODED * sizeof(CJBig2_Image*)); | 1650 NSYMSDECODED * sizeof(CJBig2_Image*)); |
| 1668 pDecoder->SBSYMS = SBSYMS; | 1651 pDecoder->SBSYMS = SBSYMS; |
| 1669 pDecoder->SBDEFPIXEL = 0; | 1652 pDecoder->SBDEFPIXEL = 0; |
| 1670 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR; | 1653 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR; |
| 1671 pDecoder->TRANSPOSED = 0; | 1654 pDecoder->TRANSPOSED = 0; |
| 1672 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; | 1655 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; |
| 1673 pDecoder->SBDSOFFSET = 0; | 1656 pDecoder->SBDSOFFSET = 0; |
| 1674 SBHUFFFS = new CJBig2_HuffmanTable(HuffmanTable_B6, | 1657 SBHUFFFS = new CJBig2_HuffmanTable(HuffmanTable_B6, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1714 ids.IADS = IADS; | 1697 ids.IADS = IADS; |
| 1715 ids.IAIT = IAIT; | 1698 ids.IAIT = IAIT; |
| 1716 ids.IARI = IARI; | 1699 ids.IARI = IARI; |
| 1717 ids.IARDW = IARDW; | 1700 ids.IARDW = IARDW; |
| 1718 ids.IARDH = IARDH; | 1701 ids.IARDH = IARDH; |
| 1719 ids.IARDX = IARDX; | 1702 ids.IARDX = IARDX; |
| 1720 ids.IARDY = IARDY; | 1703 ids.IARDY = IARDY; |
| 1721 ids.IAID = IAID; | 1704 ids.IAID = IAID; |
| 1722 BS = pDecoder->decode_Arith(pArithDecoder, grContext, &ids); | 1705 BS = pDecoder->decode_Arith(pArithDecoder, grContext, &ids); |
| 1723 if (BS == NULL) { | 1706 if (BS == NULL) { |
| 1724 m_pModule->JBig2_Free(SBSYMS); | 1707 FX_Free(SBSYMS); |
| 1725 delete SBHUFFFS; | 1708 delete SBHUFFFS; |
| 1726 delete SBHUFFDS; | 1709 delete SBHUFFDS; |
| 1727 delete SBHUFFDT; | 1710 delete SBHUFFDT; |
| 1728 delete SBHUFFRDW; | 1711 delete SBHUFFRDW; |
| 1729 delete SBHUFFRDH; | 1712 delete SBHUFFRDH; |
| 1730 delete SBHUFFRDX; | 1713 delete SBHUFFRDX; |
| 1731 delete SBHUFFRDY; | 1714 delete SBHUFFRDY; |
| 1732 delete SBHUFFRSIZE; | 1715 delete SBHUFFRSIZE; |
| 1733 delete pDecoder; | 1716 delete pDecoder; |
| 1734 goto failed; | 1717 goto failed; |
| 1735 } | 1718 } |
| 1736 m_pModule->JBig2_Free(SBSYMS); | 1719 FX_Free(SBSYMS); |
| 1737 delete SBHUFFFS; | 1720 delete SBHUFFFS; |
| 1738 delete SBHUFFDS; | 1721 delete SBHUFFDS; |
| 1739 delete SBHUFFDT; | 1722 delete SBHUFFDT; |
| 1740 delete SBHUFFRDW; | 1723 delete SBHUFFRDW; |
| 1741 delete SBHUFFRDH; | 1724 delete SBHUFFRDH; |
| 1742 delete SBHUFFRDX; | 1725 delete SBHUFFRDX; |
| 1743 delete SBHUFFRDY; | 1726 delete SBHUFFRDY; |
| 1744 delete SBHUFFRSIZE; | 1727 delete SBHUFFRSIZE; |
| 1745 delete pDecoder; | 1728 delete pDecoder; |
| 1746 } else if (REFAGGNINST == 1) { | 1729 } else if (REFAGGNINST == 1) { |
| 1747 SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; | 1730 SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; |
| 1748 if (IAID->decode(pArithDecoder, (int*)&IDI) == -1) { | 1731 if (IAID->decode(pArithDecoder, (int*)&IDI) == -1) { |
| 1749 goto failed; | 1732 goto failed; |
| 1750 } | 1733 } |
| 1751 if ((IARDX->decode(pArithDecoder, &RDXI) == -1) || | 1734 if ((IARDX->decode(pArithDecoder, &RDXI) == -1) || |
| 1752 (IARDY->decode(pArithDecoder, &RDYI) == -1)) { | 1735 (IARDY->decode(pArithDecoder, &RDYI) == -1)) { |
| 1753 goto failed; | 1736 goto failed; |
| 1754 } | 1737 } |
| 1755 if (IDI >= SBNUMSYMS) { | 1738 if (IDI >= SBNUMSYMS) { |
| 1756 goto failed; | 1739 goto failed; |
| 1757 } | 1740 } |
| 1758 SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 1741 SBSYMS = (CJBig2_Image**)FX_Alloc2D(uint8_t, SBNUMSYMS, |
|
Tom Sepez
2015/09/04 01:26:47
ditto ditto ditto
(Many other places in the CL).
| |
| 1759 SBNUMSYMS, sizeof(CJBig2_Image*)); | 1742 sizeof(CJBig2_Image*)); |
| 1760 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); | 1743 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); |
| 1761 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, | 1744 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, |
| 1762 NSYMSDECODED * sizeof(CJBig2_Image*)); | 1745 NSYMSDECODED * sizeof(CJBig2_Image*)); |
| 1763 if (!SBSYMS[IDI]) { | 1746 if (!SBSYMS[IDI]) { |
| 1764 m_pModule->JBig2_Free(SBSYMS); | 1747 FX_Free(SBSYMS); |
| 1765 goto failed; | 1748 goto failed; |
| 1766 } | 1749 } |
| 1767 JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc()); | 1750 pGRRD = new CJBig2_GRRDProc(); |
| 1768 pGRRD->GRW = SYMWIDTH; | 1751 pGRRD->GRW = SYMWIDTH; |
| 1769 pGRRD->GRH = HCHEIGHT; | 1752 pGRRD->GRH = HCHEIGHT; |
| 1770 pGRRD->GRTEMPLATE = SDRTEMPLATE; | 1753 pGRRD->GRTEMPLATE = SDRTEMPLATE; |
| 1771 pGRRD->GRREFERENCE = SBSYMS[IDI]; | 1754 pGRRD->GRREFERENCE = SBSYMS[IDI]; |
| 1772 pGRRD->GRREFERENCEDX = RDXI; | 1755 pGRRD->GRREFERENCEDX = RDXI; |
| 1773 pGRRD->GRREFERENCEDY = RDYI; | 1756 pGRRD->GRREFERENCEDY = RDYI; |
| 1774 pGRRD->TPGRON = 0; | 1757 pGRRD->TPGRON = 0; |
| 1775 pGRRD->GRAT[0] = SDRAT[0]; | 1758 pGRRD->GRAT[0] = SDRAT[0]; |
| 1776 pGRRD->GRAT[1] = SDRAT[1]; | 1759 pGRRD->GRAT[1] = SDRAT[1]; |
| 1777 pGRRD->GRAT[2] = SDRAT[2]; | 1760 pGRRD->GRAT[2] = SDRAT[2]; |
| 1778 pGRRD->GRAT[3] = SDRAT[3]; | 1761 pGRRD->GRAT[3] = SDRAT[3]; |
| 1779 BS = pGRRD->decode(pArithDecoder, grContext); | 1762 BS = pGRRD->decode(pArithDecoder, grContext); |
| 1780 if (BS == NULL) { | 1763 if (BS == NULL) { |
| 1781 m_pModule->JBig2_Free(SBSYMS); | 1764 FX_Free(SBSYMS); |
| 1782 delete pGRRD; | 1765 delete pGRRD; |
| 1783 goto failed; | 1766 goto failed; |
| 1784 } | 1767 } |
| 1785 m_pModule->JBig2_Free(SBSYMS); | 1768 FX_Free(SBSYMS); |
| 1786 delete pGRRD; | 1769 delete pGRRD; |
| 1787 } | 1770 } |
| 1788 } | 1771 } |
| 1789 SDNEWSYMS[NSYMSDECODED] = BS; | 1772 SDNEWSYMS[NSYMSDECODED] = BS; |
| 1790 BS = NULL; | 1773 BS = NULL; |
| 1791 NSYMSDECODED = NSYMSDECODED + 1; | 1774 NSYMSDECODED = NSYMSDECODED + 1; |
| 1792 } | 1775 } |
| 1793 } | 1776 } |
| 1794 EXINDEX = 0; | 1777 EXINDEX = 0; |
| 1795 CUREXFLAG = 0; | 1778 CUREXFLAG = 0; |
| 1796 EXFLAGS = (FX_BOOL*)m_pModule->JBig2_Malloc2(sizeof(FX_BOOL), | 1779 EXFLAGS = (FX_BOOL*)FX_Alloc2D(uint8_t, sizeof(FX_BOOL), |
| 1797 (SDNUMINSYMS + SDNUMNEWSYMS)); | 1780 (SDNUMINSYMS + SDNUMNEWSYMS)); |
| 1798 while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) { | 1781 while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) { |
| 1799 if (IAEX->decode(pArithDecoder, (int*)&EXRUNLENGTH) == -1) { | 1782 if (IAEX->decode(pArithDecoder, (int*)&EXRUNLENGTH) == -1) { |
| 1800 m_pModule->JBig2_Free(EXFLAGS); | 1783 FX_Free(EXFLAGS); |
| 1801 goto failed; | 1784 goto failed; |
| 1802 } | 1785 } |
| 1803 if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) { | 1786 if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) { |
| 1804 m_pModule->JBig2_Free(EXFLAGS); | 1787 FX_Free(EXFLAGS); |
| 1805 goto failed; | 1788 goto failed; |
| 1806 } | 1789 } |
| 1807 if (EXRUNLENGTH != 0) { | 1790 if (EXRUNLENGTH != 0) { |
| 1808 for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) { | 1791 for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) { |
| 1809 EXFLAGS[I] = CUREXFLAG; | 1792 EXFLAGS[I] = CUREXFLAG; |
| 1810 } | 1793 } |
| 1811 } | 1794 } |
| 1812 EXINDEX = EXINDEX + EXRUNLENGTH; | 1795 EXINDEX = EXINDEX + EXRUNLENGTH; |
| 1813 CUREXFLAG = !CUREXFLAG; | 1796 CUREXFLAG = !CUREXFLAG; |
| 1814 } | 1797 } |
| 1815 JBIG2_ALLOC(pDict, CJBig2_SymbolDict()); | 1798 pDict = new CJBig2_SymbolDict(); |
| 1816 pDict->SDNUMEXSYMS = SDNUMEXSYMS; | 1799 pDict->SDNUMEXSYMS = SDNUMEXSYMS; |
| 1817 pDict->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 1800 pDict->SDEXSYMS = |
| 1818 sizeof(CJBig2_Image*), SDNUMEXSYMS); | 1801 (CJBig2_Image**)FX_Alloc2D(uint8_t, sizeof(CJBig2_Image*), SDNUMEXSYMS); |
| 1819 I = J = 0; | 1802 I = J = 0; |
| 1820 for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) { | 1803 for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) { |
| 1821 if (EXFLAGS[I] && J < SDNUMEXSYMS) { | 1804 if (EXFLAGS[I] && J < SDNUMEXSYMS) { |
| 1822 if (I < SDNUMINSYMS) { | 1805 if (I < SDNUMINSYMS) { |
| 1823 JBIG2_ALLOC(pDict->SDEXSYMS[J], CJBig2_Image(*SDINSYMS[I])); | 1806 pDict->SDEXSYMS[J] = new CJBig2_Image(*SDINSYMS[I]); |
| 1824 } else { | 1807 } else { |
| 1825 pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS]; | 1808 pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS]; |
| 1826 } | 1809 } |
| 1827 J = J + 1; | 1810 J = J + 1; |
| 1828 } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) { | 1811 } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) { |
| 1829 delete SDNEWSYMS[I - SDNUMINSYMS]; | 1812 delete SDNEWSYMS[I - SDNUMINSYMS]; |
| 1830 } | 1813 } |
| 1831 } | 1814 } |
| 1832 if (J < SDNUMEXSYMS) { | 1815 if (J < SDNUMEXSYMS) { |
| 1833 pDict->SDNUMEXSYMS = J; | 1816 pDict->SDNUMEXSYMS = J; |
| 1834 } | 1817 } |
| 1835 m_pModule->JBig2_Free(EXFLAGS); | 1818 FX_Free(EXFLAGS); |
| 1836 m_pModule->JBig2_Free(SDNEWSYMS); | 1819 FX_Free(SDNEWSYMS); |
| 1837 delete IADH; | 1820 delete IADH; |
|
Tom Sepez
2015/09/04 01:26:47
nit: someone needs an unique_ptr.
Lei Zhang
2015/09/04 21:35:00
Planned in a follow-up, and getting rid of all the
| |
| 1838 delete IADW; | 1821 delete IADW; |
| 1839 delete IAAI; | 1822 delete IAAI; |
| 1840 delete IARDX; | 1823 delete IARDX; |
| 1841 delete IARDY; | 1824 delete IARDY; |
| 1842 delete IAEX; | 1825 delete IAEX; |
| 1843 delete IAID; | 1826 delete IAID; |
| 1844 delete IADT; | 1827 delete IADT; |
| 1845 delete IAFS; | 1828 delete IAFS; |
| 1846 delete IADS; | 1829 delete IADS; |
| 1847 delete IAIT; | 1830 delete IAIT; |
| 1848 delete IARI; | 1831 delete IARI; |
| 1849 delete IARDW; | 1832 delete IARDW; |
| 1850 delete IARDH; | 1833 delete IARDH; |
| 1851 return pDict; | 1834 return pDict; |
| 1852 failed: | 1835 failed: |
| 1853 for (I = 0; I < NSYMSDECODED; I++) { | 1836 for (I = 0; I < NSYMSDECODED; I++) { |
| 1854 if (SDNEWSYMS[I]) { | 1837 if (SDNEWSYMS[I]) { |
| 1855 delete SDNEWSYMS[I]; | 1838 delete SDNEWSYMS[I]; |
| 1856 SDNEWSYMS[I] = NULL; | 1839 SDNEWSYMS[I] = NULL; |
| 1857 } | 1840 } |
| 1858 } | 1841 } |
| 1859 m_pModule->JBig2_Free(SDNEWSYMS); | 1842 FX_Free(SDNEWSYMS); |
| 1860 delete IADH; | 1843 delete IADH; |
| 1861 delete IADW; | 1844 delete IADW; |
| 1862 delete IAAI; | 1845 delete IAAI; |
| 1863 delete IARDX; | 1846 delete IARDX; |
| 1864 delete IARDY; | 1847 delete IARDY; |
| 1865 delete IAEX; | 1848 delete IAEX; |
| 1866 delete IAID; | 1849 delete IAID; |
| 1867 delete IADT; | 1850 delete IADT; |
| 1868 delete IAFS; | 1851 delete IAFS; |
| 1869 delete IADS; | 1852 delete IADS; |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 1900 FX_DWORD stride; | 1883 FX_DWORD stride; |
| 1901 CJBig2_Image** SBSYMS; | 1884 CJBig2_Image** SBSYMS; |
| 1902 CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH, | 1885 CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH, |
| 1903 *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE, *pTable; | 1886 *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE, *pTable; |
| 1904 CJBig2_HuffmanDecoder* pHuffmanDecoder; | 1887 CJBig2_HuffmanDecoder* pHuffmanDecoder; |
| 1905 CJBig2_GRRDProc* pGRRD; | 1888 CJBig2_GRRDProc* pGRRD; |
| 1906 CJBig2_ArithDecoder* pArithDecoder; | 1889 CJBig2_ArithDecoder* pArithDecoder; |
| 1907 CJBig2_GRDProc* pGRD; | 1890 CJBig2_GRDProc* pGRD; |
| 1908 CJBig2_SymbolDict* pDict; | 1891 CJBig2_SymbolDict* pDict; |
| 1909 pHuffmanDecoder = new CJBig2_HuffmanDecoder(pStream); | 1892 pHuffmanDecoder = new CJBig2_HuffmanDecoder(pStream); |
| 1910 SDNEWSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS, | 1893 SDNEWSYMS = |
| 1911 sizeof(CJBig2_Image*)); | 1894 (CJBig2_Image**)FX_Alloc2D(uint8_t, SDNUMNEWSYMS, sizeof(CJBig2_Image*)); |
| 1912 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); | 1895 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); |
| 1913 SDNEWSYMWIDTHS = NULL; | 1896 SDNEWSYMWIDTHS = NULL; |
| 1914 BHC = NULL; | 1897 BHC = NULL; |
| 1915 if (SDREFAGG == 0) { | 1898 if (SDREFAGG == 0) { |
| 1916 SDNEWSYMWIDTHS = | 1899 SDNEWSYMWIDTHS = |
| 1917 (FX_DWORD*)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS, sizeof(FX_DWORD)); | 1900 (FX_DWORD*)FX_Alloc2D(uint8_t, SDNUMNEWSYMS, sizeof(FX_DWORD)); |
| 1918 FXSYS_memset(SDNEWSYMWIDTHS, 0, SDNUMNEWSYMS * sizeof(FX_DWORD)); | 1901 FXSYS_memset(SDNEWSYMWIDTHS, 0, SDNUMNEWSYMS * sizeof(FX_DWORD)); |
| 1919 } | 1902 } |
| 1920 HCHEIGHT = 0; | 1903 HCHEIGHT = 0; |
| 1921 NSYMSDECODED = 0; | 1904 NSYMSDECODED = 0; |
| 1922 BS = NULL; | 1905 BS = NULL; |
| 1923 while (NSYMSDECODED < SDNUMNEWSYMS) { | 1906 while (NSYMSDECODED < SDNUMNEWSYMS) { |
| 1924 if (pHuffmanDecoder->decodeAValue(SDHUFFDH, &HCDH) != 0) { | 1907 if (pHuffmanDecoder->decodeAValue(SDHUFFDH, &HCDH) != 0) { |
| 1925 goto failed; | 1908 goto failed; |
| 1926 } | 1909 } |
| 1927 HCHEIGHT = HCHEIGHT + HCDH; | 1910 HCHEIGHT = HCHEIGHT + HCDH; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 1952 } | 1935 } |
| 1953 TOTWIDTH = TOTWIDTH + SYMWIDTH; | 1936 TOTWIDTH = TOTWIDTH + SYMWIDTH; |
| 1954 } | 1937 } |
| 1955 if (SDREFAGG == 1) { | 1938 if (SDREFAGG == 1) { |
| 1956 if (pHuffmanDecoder->decodeAValue(SDHUFFAGGINST, (int*)&REFAGGNINST) != | 1939 if (pHuffmanDecoder->decodeAValue(SDHUFFAGGINST, (int*)&REFAGGNINST) != |
| 1957 0) { | 1940 0) { |
| 1958 goto failed; | 1941 goto failed; |
| 1959 } | 1942 } |
| 1960 BS = NULL; | 1943 BS = NULL; |
| 1961 if (REFAGGNINST > 1) { | 1944 if (REFAGGNINST > 1) { |
| 1962 CJBig2_TRDProc* pDecoder; | 1945 CJBig2_TRDProc* pDecoder = new CJBig2_TRDProc(); |
| 1963 JBIG2_ALLOC(pDecoder, CJBig2_TRDProc()); | |
| 1964 pDecoder->SBHUFF = SDHUFF; | 1946 pDecoder->SBHUFF = SDHUFF; |
| 1965 pDecoder->SBREFINE = 1; | 1947 pDecoder->SBREFINE = 1; |
| 1966 pDecoder->SBW = SYMWIDTH; | 1948 pDecoder->SBW = SYMWIDTH; |
| 1967 pDecoder->SBH = HCHEIGHT; | 1949 pDecoder->SBH = HCHEIGHT; |
| 1968 pDecoder->SBNUMINSTANCES = REFAGGNINST; | 1950 pDecoder->SBNUMINSTANCES = REFAGGNINST; |
| 1969 pDecoder->SBSTRIPS = 1; | 1951 pDecoder->SBSTRIPS = 1; |
| 1970 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; | 1952 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; |
| 1971 SBNUMSYMS = pDecoder->SBNUMSYMS; | 1953 SBNUMSYMS = pDecoder->SBNUMSYMS; |
| 1972 SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2( | 1954 SBSYMCODES = (JBig2HuffmanCode*)FX_Alloc2D(uint8_t, SBNUMSYMS, |
| 1973 SBNUMSYMS, sizeof(JBig2HuffmanCode)); | 1955 sizeof(JBig2HuffmanCode)); |
| 1974 nTmp = 1; | 1956 nTmp = 1; |
| 1975 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { | 1957 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { |
| 1976 nTmp++; | 1958 nTmp++; |
| 1977 } | 1959 } |
| 1978 for (I = 0; I < SBNUMSYMS; I++) { | 1960 for (I = 0; I < SBNUMSYMS; I++) { |
| 1979 SBSYMCODES[I].codelen = nTmp; | 1961 SBSYMCODES[I].codelen = nTmp; |
| 1980 SBSYMCODES[I].code = I; | 1962 SBSYMCODES[I].code = I; |
| 1981 } | 1963 } |
| 1982 pDecoder->SBSYMCODES = SBSYMCODES; | 1964 pDecoder->SBSYMCODES = SBSYMCODES; |
| 1983 SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 1965 SBSYMS = (CJBig2_Image**)FX_Alloc2D(uint8_t, SBNUMSYMS, |
| 1984 SBNUMSYMS, sizeof(CJBig2_Image*)); | 1966 sizeof(CJBig2_Image*)); |
| 1985 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); | 1967 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); |
| 1986 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, | 1968 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, |
| 1987 NSYMSDECODED * sizeof(CJBig2_Image*)); | 1969 NSYMSDECODED * sizeof(CJBig2_Image*)); |
| 1988 pDecoder->SBSYMS = SBSYMS; | 1970 pDecoder->SBSYMS = SBSYMS; |
| 1989 pDecoder->SBDEFPIXEL = 0; | 1971 pDecoder->SBDEFPIXEL = 0; |
| 1990 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR; | 1972 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR; |
| 1991 pDecoder->TRANSPOSED = 0; | 1973 pDecoder->TRANSPOSED = 0; |
| 1992 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; | 1974 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; |
| 1993 pDecoder->SBDSOFFSET = 0; | 1975 pDecoder->SBDSOFFSET = 0; |
| 1994 SBHUFFFS = new CJBig2_HuffmanTable(HuffmanTable_B6, | 1976 SBHUFFFS = new CJBig2_HuffmanTable(HuffmanTable_B6, |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 2023 pDecoder->SBHUFFRDX = SBHUFFRDX; | 2005 pDecoder->SBHUFFRDX = SBHUFFRDX; |
| 2024 pDecoder->SBHUFFRDY = SBHUFFRDY; | 2006 pDecoder->SBHUFFRDY = SBHUFFRDY; |
| 2025 pDecoder->SBHUFFRSIZE = SBHUFFRSIZE; | 2007 pDecoder->SBHUFFRSIZE = SBHUFFRSIZE; |
| 2026 pDecoder->SBRTEMPLATE = SDRTEMPLATE; | 2008 pDecoder->SBRTEMPLATE = SDRTEMPLATE; |
| 2027 pDecoder->SBRAT[0] = SDRAT[0]; | 2009 pDecoder->SBRAT[0] = SDRAT[0]; |
| 2028 pDecoder->SBRAT[1] = SDRAT[1]; | 2010 pDecoder->SBRAT[1] = SDRAT[1]; |
| 2029 pDecoder->SBRAT[2] = SDRAT[2]; | 2011 pDecoder->SBRAT[2] = SDRAT[2]; |
| 2030 pDecoder->SBRAT[3] = SDRAT[3]; | 2012 pDecoder->SBRAT[3] = SDRAT[3]; |
| 2031 BS = pDecoder->decode_Huffman(pStream, grContext); | 2013 BS = pDecoder->decode_Huffman(pStream, grContext); |
| 2032 if (BS == NULL) { | 2014 if (BS == NULL) { |
| 2033 m_pModule->JBig2_Free(SBSYMCODES); | 2015 FX_Free(SBSYMCODES); |
| 2034 m_pModule->JBig2_Free(SBSYMS); | 2016 FX_Free(SBSYMS); |
| 2035 delete SBHUFFFS; | 2017 delete SBHUFFFS; |
| 2036 delete SBHUFFDS; | 2018 delete SBHUFFDS; |
| 2037 delete SBHUFFDT; | 2019 delete SBHUFFDT; |
| 2038 delete SBHUFFRDW; | 2020 delete SBHUFFRDW; |
| 2039 delete SBHUFFRDH; | 2021 delete SBHUFFRDH; |
| 2040 delete SBHUFFRDX; | 2022 delete SBHUFFRDX; |
| 2041 delete SBHUFFRDY; | 2023 delete SBHUFFRDY; |
| 2042 delete SBHUFFRSIZE; | 2024 delete SBHUFFRSIZE; |
| 2043 delete pDecoder; | 2025 delete pDecoder; |
| 2044 goto failed; | 2026 goto failed; |
| 2045 } | 2027 } |
| 2046 m_pModule->JBig2_Free(SBSYMCODES); | 2028 FX_Free(SBSYMCODES); |
| 2047 m_pModule->JBig2_Free(SBSYMS); | 2029 FX_Free(SBSYMS); |
| 2048 delete SBHUFFFS; | 2030 delete SBHUFFFS; |
| 2049 delete SBHUFFDS; | 2031 delete SBHUFFDS; |
| 2050 delete SBHUFFDT; | 2032 delete SBHUFFDT; |
| 2051 delete SBHUFFRDW; | 2033 delete SBHUFFRDW; |
| 2052 delete SBHUFFRDH; | 2034 delete SBHUFFRDH; |
| 2053 delete SBHUFFRDX; | 2035 delete SBHUFFRDX; |
| 2054 delete SBHUFFRDY; | 2036 delete SBHUFFRDY; |
| 2055 delete SBHUFFRSIZE; | 2037 delete SBHUFFRSIZE; |
| 2056 delete pDecoder; | 2038 delete pDecoder; |
| 2057 } else if (REFAGGNINST == 1) { | 2039 } else if (REFAGGNINST == 1) { |
| 2058 SBNUMSYMS = SDNUMINSYMS + SDNUMNEWSYMS; | 2040 SBNUMSYMS = SDNUMINSYMS + SDNUMNEWSYMS; |
| 2059 nTmp = 1; | 2041 nTmp = 1; |
| 2060 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { | 2042 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { |
| 2061 nTmp++; | 2043 nTmp++; |
| 2062 } | 2044 } |
| 2063 SBSYMCODELEN = (uint8_t)nTmp; | 2045 SBSYMCODELEN = (uint8_t)nTmp; |
| 2064 SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2( | 2046 SBSYMCODES = (JBig2HuffmanCode*)FX_Alloc2D(uint8_t, SBNUMSYMS, |
| 2065 SBNUMSYMS, sizeof(JBig2HuffmanCode)); | 2047 sizeof(JBig2HuffmanCode)); |
| 2066 for (I = 0; I < SBNUMSYMS; I++) { | 2048 for (I = 0; I < SBNUMSYMS; I++) { |
| 2067 SBSYMCODES[I].codelen = SBSYMCODELEN; | 2049 SBSYMCODES[I].codelen = SBSYMCODELEN; |
| 2068 SBSYMCODES[I].code = I; | 2050 SBSYMCODES[I].code = I; |
| 2069 } | 2051 } |
| 2070 nVal = 0; | 2052 nVal = 0; |
| 2071 nBits = 0; | 2053 nBits = 0; |
| 2072 for (;;) { | 2054 for (;;) { |
| 2073 if (pStream->read1Bit(&nTmp) != 0) { | 2055 if (pStream->read1Bit(&nTmp) != 0) { |
| 2074 m_pModule->JBig2_Free(SBSYMCODES); | 2056 FX_Free(SBSYMCODES); |
| 2075 goto failed; | 2057 goto failed; |
| 2076 } | 2058 } |
| 2077 nVal = (nVal << 1) | nTmp; | 2059 nVal = (nVal << 1) | nTmp; |
| 2078 for (IDI = 0; IDI < SBNUMSYMS; IDI++) { | 2060 for (IDI = 0; IDI < SBNUMSYMS; IDI++) { |
| 2079 if ((nVal == SBSYMCODES[IDI].code) && | 2061 if ((nVal == SBSYMCODES[IDI].code) && |
| 2080 (nBits == SBSYMCODES[IDI].codelen)) { | 2062 (nBits == SBSYMCODES[IDI].codelen)) { |
| 2081 break; | 2063 break; |
| 2082 } | 2064 } |
| 2083 } | 2065 } |
| 2084 if (IDI < SBNUMSYMS) { | 2066 if (IDI < SBNUMSYMS) { |
| 2085 break; | 2067 break; |
| 2086 } | 2068 } |
| 2087 } | 2069 } |
| 2088 m_pModule->JBig2_Free(SBSYMCODES); | 2070 FX_Free(SBSYMCODES); |
| 2089 SBHUFFRDX = new CJBig2_HuffmanTable(HuffmanTable_B15, | 2071 SBHUFFRDX = new CJBig2_HuffmanTable(HuffmanTable_B15, |
| 2090 FX_ArraySize(HuffmanTable_B15), | 2072 FX_ArraySize(HuffmanTable_B15), |
| 2091 HuffmanTable_HTOOB_B15); | 2073 HuffmanTable_HTOOB_B15); |
| 2092 SBHUFFRSIZE = new CJBig2_HuffmanTable(HuffmanTable_B1, | 2074 SBHUFFRSIZE = new CJBig2_HuffmanTable(HuffmanTable_B1, |
| 2093 FX_ArraySize(HuffmanTable_B1), | 2075 FX_ArraySize(HuffmanTable_B1), |
| 2094 HuffmanTable_HTOOB_B1); | 2076 HuffmanTable_HTOOB_B1); |
| 2095 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) || | 2077 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) || |
| 2096 (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDYI) != 0) || | 2078 (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDYI) != 0) || |
| 2097 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) { | 2079 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) { |
| 2098 delete SBHUFFRDX; | 2080 delete SBHUFFRDX; |
| 2099 delete SBHUFFRSIZE; | 2081 delete SBHUFFRSIZE; |
| 2100 goto failed; | 2082 goto failed; |
| 2101 } | 2083 } |
| 2102 delete SBHUFFRDX; | 2084 delete SBHUFFRDX; |
| 2103 delete SBHUFFRSIZE; | 2085 delete SBHUFFRSIZE; |
| 2104 pStream->alignByte(); | 2086 pStream->alignByte(); |
| 2105 nTmp = pStream->getOffset(); | 2087 nTmp = pStream->getOffset(); |
| 2106 SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 2088 SBSYMS = (CJBig2_Image**)FX_Alloc2D(uint8_t, SBNUMSYMS, |
| 2107 SBNUMSYMS, sizeof(CJBig2_Image*)); | 2089 sizeof(CJBig2_Image*)); |
| 2108 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); | 2090 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); |
| 2109 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, | 2091 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, |
| 2110 NSYMSDECODED * sizeof(CJBig2_Image*)); | 2092 NSYMSDECODED * sizeof(CJBig2_Image*)); |
| 2111 JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc()); | 2093 pGRRD = new CJBig2_GRRDProc(); |
| 2112 pGRRD->GRW = SYMWIDTH; | 2094 pGRRD->GRW = SYMWIDTH; |
| 2113 pGRRD->GRH = HCHEIGHT; | 2095 pGRRD->GRH = HCHEIGHT; |
| 2114 pGRRD->GRTEMPLATE = SDRTEMPLATE; | 2096 pGRRD->GRTEMPLATE = SDRTEMPLATE; |
| 2115 pGRRD->GRREFERENCE = SBSYMS[IDI]; | 2097 pGRRD->GRREFERENCE = SBSYMS[IDI]; |
| 2116 pGRRD->GRREFERENCEDX = RDXI; | 2098 pGRRD->GRREFERENCEDX = RDXI; |
| 2117 pGRRD->GRREFERENCEDY = RDYI; | 2099 pGRRD->GRREFERENCEDY = RDYI; |
| 2118 pGRRD->TPGRON = 0; | 2100 pGRRD->TPGRON = 0; |
| 2119 pGRRD->GRAT[0] = SDRAT[0]; | 2101 pGRRD->GRAT[0] = SDRAT[0]; |
| 2120 pGRRD->GRAT[1] = SDRAT[1]; | 2102 pGRRD->GRAT[1] = SDRAT[1]; |
| 2121 pGRRD->GRAT[2] = SDRAT[2]; | 2103 pGRRD->GRAT[2] = SDRAT[2]; |
| 2122 pGRRD->GRAT[3] = SDRAT[3]; | 2104 pGRRD->GRAT[3] = SDRAT[3]; |
| 2123 pArithDecoder = new CJBig2_ArithDecoder(pStream); | 2105 pArithDecoder = new CJBig2_ArithDecoder(pStream); |
| 2124 BS = pGRRD->decode(pArithDecoder, grContext); | 2106 BS = pGRRD->decode(pArithDecoder, grContext); |
| 2125 if (BS == NULL) { | 2107 if (BS == NULL) { |
| 2126 m_pModule->JBig2_Free(SBSYMS); | 2108 FX_Free(SBSYMS); |
| 2127 delete pGRRD; | 2109 delete pGRRD; |
| 2128 delete pArithDecoder; | 2110 delete pArithDecoder; |
| 2129 goto failed; | 2111 goto failed; |
| 2130 } | 2112 } |
| 2131 pStream->alignByte(); | 2113 pStream->alignByte(); |
| 2132 pStream->offset(2); | 2114 pStream->offset(2); |
| 2133 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) { | 2115 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) { |
| 2134 delete BS; | 2116 delete BS; |
| 2135 m_pModule->JBig2_Free(SBSYMS); | 2117 FX_Free(SBSYMS); |
| 2136 delete pGRRD; | 2118 delete pGRRD; |
| 2137 delete pArithDecoder; | 2119 delete pArithDecoder; |
| 2138 goto failed; | 2120 goto failed; |
| 2139 } | 2121 } |
| 2140 m_pModule->JBig2_Free(SBSYMS); | 2122 FX_Free(SBSYMS); |
| 2141 delete pGRRD; | 2123 delete pGRRD; |
| 2142 delete pArithDecoder; | 2124 delete pArithDecoder; |
| 2143 } | 2125 } |
| 2144 SDNEWSYMS[NSYMSDECODED] = BS; | 2126 SDNEWSYMS[NSYMSDECODED] = BS; |
| 2145 } | 2127 } |
| 2146 if (SDREFAGG == 0) { | 2128 if (SDREFAGG == 0) { |
| 2147 SDNEWSYMWIDTHS[NSYMSDECODED] = SYMWIDTH; | 2129 SDNEWSYMWIDTHS[NSYMSDECODED] = SYMWIDTH; |
| 2148 } | 2130 } |
| 2149 NSYMSDECODED = NSYMSDECODED + 1; | 2131 NSYMSDECODED = NSYMSDECODED + 1; |
| 2150 } | 2132 } |
| 2151 if (SDREFAGG == 0) { | 2133 if (SDREFAGG == 0) { |
| 2152 if (pHuffmanDecoder->decodeAValue(SDHUFFBMSIZE, (int32_t*)&BMSIZE) != 0) { | 2134 if (pHuffmanDecoder->decodeAValue(SDHUFFBMSIZE, (int32_t*)&BMSIZE) != 0) { |
| 2153 goto failed; | 2135 goto failed; |
| 2154 } | 2136 } |
| 2155 pStream->alignByte(); | 2137 pStream->alignByte(); |
| 2156 if (BMSIZE == 0) { | 2138 if (BMSIZE == 0) { |
| 2157 stride = (TOTWIDTH + 7) >> 3; | 2139 stride = (TOTWIDTH + 7) >> 3; |
| 2158 if (pStream->getByteLeft() >= stride * HCHEIGHT) { | 2140 if (pStream->getByteLeft() >= stride * HCHEIGHT) { |
| 2159 JBIG2_ALLOC(BHC, CJBig2_Image(TOTWIDTH, HCHEIGHT)); | 2141 BHC = new CJBig2_Image(TOTWIDTH, HCHEIGHT); |
| 2160 for (I = 0; I < HCHEIGHT; I++) { | 2142 for (I = 0; I < HCHEIGHT; I++) { |
| 2161 JBIG2_memcpy(BHC->m_pData + I * BHC->m_nStride, | 2143 JBIG2_memcpy(BHC->m_pData + I * BHC->m_nStride, |
| 2162 pStream->getPointer(), stride); | 2144 pStream->getPointer(), stride); |
| 2163 pStream->offset(stride); | 2145 pStream->offset(stride); |
| 2164 } | 2146 } |
| 2165 } else { | 2147 } else { |
| 2166 goto failed; | 2148 goto failed; |
| 2167 } | 2149 } |
| 2168 } else { | 2150 } else { |
| 2169 JBIG2_ALLOC(pGRD, CJBig2_GRDProc()); | 2151 pGRD = new CJBig2_GRDProc(); |
| 2170 pGRD->MMR = 1; | 2152 pGRD->MMR = 1; |
| 2171 pGRD->GBW = TOTWIDTH; | 2153 pGRD->GBW = TOTWIDTH; |
| 2172 pGRD->GBH = HCHEIGHT; | 2154 pGRD->GBH = HCHEIGHT; |
| 2173 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHC, pStream); | 2155 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHC, pStream); |
| 2174 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { | 2156 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
| 2175 pGRD->Continue_decode(pPause); | 2157 pGRD->Continue_decode(pPause); |
| 2176 } | 2158 } |
| 2177 delete pGRD; | 2159 delete pGRD; |
| 2178 pStream->alignByte(); | 2160 pStream->alignByte(); |
| 2179 } | 2161 } |
| 2180 nTmp = 0; | 2162 nTmp = 0; |
| 2181 if (!BHC) { | 2163 if (!BHC) { |
| 2182 continue; | 2164 continue; |
| 2183 } | 2165 } |
| 2184 for (I = HCFIRSTSYM; I < NSYMSDECODED; I++) { | 2166 for (I = HCFIRSTSYM; I < NSYMSDECODED; I++) { |
| 2185 SDNEWSYMS[I] = BHC->subImage(nTmp, 0, SDNEWSYMWIDTHS[I], HCHEIGHT); | 2167 SDNEWSYMS[I] = BHC->subImage(nTmp, 0, SDNEWSYMWIDTHS[I], HCHEIGHT); |
| 2186 nTmp += SDNEWSYMWIDTHS[I]; | 2168 nTmp += SDNEWSYMWIDTHS[I]; |
| 2187 } | 2169 } |
| 2188 delete BHC; | 2170 delete BHC; |
| 2189 BHC = NULL; | 2171 BHC = NULL; |
| 2190 } | 2172 } |
| 2191 } | 2173 } |
| 2192 EXINDEX = 0; | 2174 EXINDEX = 0; |
| 2193 CUREXFLAG = 0; | 2175 CUREXFLAG = 0; |
| 2194 pTable = new CJBig2_HuffmanTable( | 2176 pTable = new CJBig2_HuffmanTable( |
| 2195 HuffmanTable_B1, FX_ArraySize(HuffmanTable_B1), HuffmanTable_HTOOB_B1); | 2177 HuffmanTable_B1, FX_ArraySize(HuffmanTable_B1), HuffmanTable_HTOOB_B1); |
| 2196 EXFLAGS = (FX_BOOL*)m_pModule->JBig2_Malloc2(sizeof(FX_BOOL), | 2178 EXFLAGS = (FX_BOOL*)FX_Alloc2D(uint8_t, sizeof(FX_BOOL), |
| 2197 (SDNUMINSYMS + SDNUMNEWSYMS)); | 2179 (SDNUMINSYMS + SDNUMNEWSYMS)); |
| 2198 while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) { | 2180 while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) { |
| 2199 if (pHuffmanDecoder->decodeAValue(pTable, (int*)&EXRUNLENGTH) != 0) { | 2181 if (pHuffmanDecoder->decodeAValue(pTable, (int*)&EXRUNLENGTH) != 0) { |
| 2200 delete pTable; | 2182 delete pTable; |
| 2201 m_pModule->JBig2_Free(EXFLAGS); | 2183 FX_Free(EXFLAGS); |
| 2202 goto failed; | 2184 goto failed; |
| 2203 } | 2185 } |
| 2204 if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) { | 2186 if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) { |
| 2205 delete pTable; | 2187 delete pTable; |
| 2206 m_pModule->JBig2_Free(EXFLAGS); | 2188 FX_Free(EXFLAGS); |
| 2207 goto failed; | 2189 goto failed; |
| 2208 } | 2190 } |
| 2209 if (EXRUNLENGTH != 0) { | 2191 if (EXRUNLENGTH != 0) { |
| 2210 for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) { | 2192 for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) { |
| 2211 EXFLAGS[I] = CUREXFLAG; | 2193 EXFLAGS[I] = CUREXFLAG; |
| 2212 } | 2194 } |
| 2213 } | 2195 } |
| 2214 EXINDEX = EXINDEX + EXRUNLENGTH; | 2196 EXINDEX = EXINDEX + EXRUNLENGTH; |
| 2215 CUREXFLAG = !CUREXFLAG; | 2197 CUREXFLAG = !CUREXFLAG; |
| 2216 } | 2198 } |
| 2217 delete pTable; | 2199 delete pTable; |
| 2218 JBIG2_ALLOC(pDict, CJBig2_SymbolDict()); | 2200 pDict = new CJBig2_SymbolDict(); |
| 2219 pDict->SDNUMEXSYMS = SDNUMEXSYMS; | 2201 pDict->SDNUMEXSYMS = SDNUMEXSYMS; |
| 2220 pDict->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 2202 pDict->SDEXSYMS = |
| 2221 sizeof(CJBig2_Image*), SDNUMEXSYMS); | 2203 (CJBig2_Image**)FX_Alloc2D(uint8_t, sizeof(CJBig2_Image*), SDNUMEXSYMS); |
| 2222 I = J = 0; | 2204 I = J = 0; |
| 2223 for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) { | 2205 for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) { |
| 2224 if (EXFLAGS[I] && J < SDNUMEXSYMS) { | 2206 if (EXFLAGS[I] && J < SDNUMEXSYMS) { |
| 2225 if (I < SDNUMINSYMS) { | 2207 if (I < SDNUMINSYMS) { |
| 2226 JBIG2_ALLOC(pDict->SDEXSYMS[J], CJBig2_Image(*SDINSYMS[I])); | 2208 pDict->SDEXSYMS[J] = new CJBig2_Image(*SDINSYMS[I]); |
| 2227 } else { | 2209 } else { |
| 2228 pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS]; | 2210 pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS]; |
| 2229 } | 2211 } |
| 2230 J = J + 1; | 2212 J = J + 1; |
| 2231 } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) { | 2213 } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) { |
| 2232 delete SDNEWSYMS[I - SDNUMINSYMS]; | 2214 delete SDNEWSYMS[I - SDNUMINSYMS]; |
| 2233 } | 2215 } |
| 2234 } | 2216 } |
| 2235 if (J < SDNUMEXSYMS) { | 2217 if (J < SDNUMEXSYMS) { |
| 2236 pDict->SDNUMEXSYMS = J; | 2218 pDict->SDNUMEXSYMS = J; |
| 2237 } | 2219 } |
| 2238 m_pModule->JBig2_Free(EXFLAGS); | 2220 FX_Free(EXFLAGS); |
| 2239 m_pModule->JBig2_Free(SDNEWSYMS); | 2221 FX_Free(SDNEWSYMS); |
| 2240 if (SDREFAGG == 0) { | 2222 if (SDREFAGG == 0) { |
| 2241 m_pModule->JBig2_Free(SDNEWSYMWIDTHS); | 2223 FX_Free(SDNEWSYMWIDTHS); |
| 2242 } | 2224 } |
| 2243 delete pHuffmanDecoder; | 2225 delete pHuffmanDecoder; |
| 2244 return pDict; | 2226 return pDict; |
| 2245 failed: | 2227 failed: |
| 2246 for (I = 0; I < NSYMSDECODED; I++) { | 2228 for (I = 0; I < NSYMSDECODED; I++) { |
| 2247 delete SDNEWSYMS[I]; | 2229 delete SDNEWSYMS[I]; |
| 2248 } | 2230 } |
| 2249 m_pModule->JBig2_Free(SDNEWSYMS); | 2231 FX_Free(SDNEWSYMS); |
| 2250 if (SDREFAGG == 0) { | 2232 if (SDREFAGG == 0) { |
| 2251 m_pModule->JBig2_Free(SDNEWSYMWIDTHS); | 2233 FX_Free(SDNEWSYMWIDTHS); |
| 2252 } | 2234 } |
| 2253 delete pHuffmanDecoder; | 2235 delete pHuffmanDecoder; |
| 2254 return NULL; | 2236 return NULL; |
| 2255 } | 2237 } |
| 2256 CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | 2238 CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| 2257 JBig2ArithCtx* gbContext, | 2239 JBig2ArithCtx* gbContext, |
| 2258 IFX_Pause* pPause) { | 2240 IFX_Pause* pPause) { |
| 2259 FX_DWORD ng, mg; | 2241 FX_DWORD ng, mg; |
| 2260 int32_t x, y; | 2242 int32_t x, y; |
| 2261 CJBig2_Image* HSKIP; | |
| 2262 FX_DWORD HBPP; | 2243 FX_DWORD HBPP; |
| 2263 FX_DWORD* GI; | 2244 FX_DWORD* GI; |
| 2264 CJBig2_Image* HTREG; | 2245 CJBig2_Image* HSKIP = nullptr; |
| 2265 CJBig2_GSIDProc* pGID; | 2246 CJBig2_Image* HTREG = new CJBig2_Image(HBW, HBH); |
| 2266 JBIG2_ALLOC(HTREG, CJBig2_Image(HBW, HBH)); | |
| 2267 HTREG->fill(HDEFPIXEL); | 2247 HTREG->fill(HDEFPIXEL); |
| 2268 HSKIP = NULL; | |
| 2269 if (HENABLESKIP == 1) { | 2248 if (HENABLESKIP == 1) { |
| 2270 JBIG2_ALLOC(HSKIP, CJBig2_Image(HGW, HGH)); | 2249 HSKIP = new CJBig2_Image(HGW, HGH); |
| 2271 for (mg = 0; mg < HGH; mg++) { | 2250 for (mg = 0; mg < HGH; mg++) { |
| 2272 for (ng = 0; ng < HGW; ng++) { | 2251 for (ng = 0; ng < HGW; ng++) { |
| 2273 x = (HGX + mg * HRY + ng * HRX) >> 8; | 2252 x = (HGX + mg * HRY + ng * HRX) >> 8; |
| 2274 y = (HGY + mg * HRX - ng * HRY) >> 8; | 2253 y = (HGY + mg * HRX - ng * HRY) >> 8; |
| 2275 if ((x + HPW <= 0) | (x >= (int32_t)HBW) | (y + HPH <= 0) | | 2254 if ((x + HPW <= 0) | (x >= (int32_t)HBW) | (y + HPH <= 0) | |
| 2276 (y >= (int32_t)HPH)) { | 2255 (y >= (int32_t)HPH)) { |
| 2277 HSKIP->setPixel(ng, mg, 1); | 2256 HSKIP->setPixel(ng, mg, 1); |
| 2278 } else { | 2257 } else { |
| 2279 HSKIP->setPixel(ng, mg, 0); | 2258 HSKIP->setPixel(ng, mg, 0); |
| 2280 } | 2259 } |
| 2281 } | 2260 } |
| 2282 } | 2261 } |
| 2283 } | 2262 } |
| 2284 HBPP = 1; | 2263 HBPP = 1; |
| 2285 while ((FX_DWORD)(1 << HBPP) < HNUMPATS) { | 2264 while ((FX_DWORD)(1 << HBPP) < HNUMPATS) { |
| 2286 HBPP++; | 2265 HBPP++; |
| 2287 } | 2266 } |
| 2288 JBIG2_ALLOC(pGID, CJBig2_GSIDProc()); | 2267 CJBig2_GSIDProc* pGID = new CJBig2_GSIDProc(); |
| 2289 pGID->GSMMR = HMMR; | 2268 pGID->GSMMR = HMMR; |
| 2290 pGID->GSW = HGW; | 2269 pGID->GSW = HGW; |
| 2291 pGID->GSH = HGH; | 2270 pGID->GSH = HGH; |
| 2292 pGID->GSBPP = (uint8_t)HBPP; | 2271 pGID->GSBPP = (uint8_t)HBPP; |
| 2293 pGID->GSUSESKIP = HENABLESKIP; | 2272 pGID->GSUSESKIP = HENABLESKIP; |
| 2294 pGID->GSKIP = HSKIP; | 2273 pGID->GSKIP = HSKIP; |
| 2295 pGID->GSTEMPLATE = HTEMPLATE; | 2274 pGID->GSTEMPLATE = HTEMPLATE; |
| 2296 GI = pGID->decode_Arith(pArithDecoder, gbContext, pPause); | 2275 GI = pGID->decode_Arith(pArithDecoder, gbContext, pPause); |
| 2297 if (GI == NULL) { | 2276 if (GI == NULL) { |
| 2298 goto failed; | 2277 goto failed; |
| 2299 } | 2278 } |
| 2300 for (mg = 0; mg < HGH; mg++) { | 2279 for (mg = 0; mg < HGH; mg++) { |
| 2301 for (ng = 0; ng < HGW; ng++) { | 2280 for (ng = 0; ng < HGW; ng++) { |
| 2302 x = (HGX + mg * HRY + ng * HRX) >> 8; | 2281 x = (HGX + mg * HRY + ng * HRX) >> 8; |
| 2303 y = (HGY + mg * HRX - ng * HRY) >> 8; | 2282 y = (HGY + mg * HRX - ng * HRY) >> 8; |
| 2304 FX_DWORD pat_index = GI[mg * HGW + ng]; | 2283 FX_DWORD pat_index = GI[mg * HGW + ng]; |
| 2305 if (pat_index >= HNUMPATS) { | 2284 if (pat_index >= HNUMPATS) { |
| 2306 pat_index = HNUMPATS - 1; | 2285 pat_index = HNUMPATS - 1; |
| 2307 } | 2286 } |
| 2308 HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP); | 2287 HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP); |
| 2309 } | 2288 } |
| 2310 } | 2289 } |
| 2311 m_pModule->JBig2_Free(GI); | 2290 FX_Free(GI); |
| 2312 delete HSKIP; | 2291 delete HSKIP; |
| 2313 delete pGID; | 2292 delete pGID; |
| 2314 return HTREG; | 2293 return HTREG; |
| 2315 failed: | 2294 failed: |
| 2316 delete HSKIP; | 2295 delete HSKIP; |
| 2317 delete pGID; | 2296 delete pGID; |
| 2318 delete HTREG; | 2297 delete HTREG; |
| 2319 return NULL; | 2298 return NULL; |
| 2320 } | 2299 } |
| 2321 CJBig2_Image* CJBig2_HTRDProc::decode_MMR(CJBig2_BitStream* pStream, | 2300 CJBig2_Image* CJBig2_HTRDProc::decode_MMR(CJBig2_BitStream* pStream, |
| 2322 IFX_Pause* pPause) { | 2301 IFX_Pause* pPause) { |
| 2323 FX_DWORD ng, mg; | 2302 FX_DWORD ng, mg; |
| 2324 int32_t x, y; | 2303 int32_t x, y; |
| 2325 FX_DWORD HBPP; | |
| 2326 FX_DWORD* GI; | 2304 FX_DWORD* GI; |
| 2327 CJBig2_Image* HTREG; | 2305 CJBig2_Image* HTREG = new CJBig2_Image(HBW, HBH); |
| 2328 CJBig2_GSIDProc* pGID; | |
| 2329 JBIG2_ALLOC(HTREG, CJBig2_Image(HBW, HBH)); | |
| 2330 HTREG->fill(HDEFPIXEL); | 2306 HTREG->fill(HDEFPIXEL); |
| 2331 HBPP = 1; | 2307 FX_DWORD HBPP = 1; |
| 2332 while ((FX_DWORD)(1 << HBPP) < HNUMPATS) { | 2308 while ((FX_DWORD)(1 << HBPP) < HNUMPATS) { |
| 2333 HBPP++; | 2309 HBPP++; |
| 2334 } | 2310 } |
| 2335 JBIG2_ALLOC(pGID, CJBig2_GSIDProc()); | 2311 CJBig2_GSIDProc* pGID = new CJBig2_GSIDProc(); |
| 2336 pGID->GSMMR = HMMR; | 2312 pGID->GSMMR = HMMR; |
| 2337 pGID->GSW = HGW; | 2313 pGID->GSW = HGW; |
| 2338 pGID->GSH = HGH; | 2314 pGID->GSH = HGH; |
| 2339 pGID->GSBPP = (uint8_t)HBPP; | 2315 pGID->GSBPP = (uint8_t)HBPP; |
| 2340 pGID->GSUSESKIP = 0; | 2316 pGID->GSUSESKIP = 0; |
| 2341 GI = pGID->decode_MMR(pStream, pPause); | 2317 GI = pGID->decode_MMR(pStream, pPause); |
| 2342 if (GI == NULL) { | 2318 if (GI == NULL) { |
| 2343 goto failed; | 2319 goto failed; |
| 2344 } | 2320 } |
| 2345 for (mg = 0; mg < HGH; mg++) { | 2321 for (mg = 0; mg < HGH; mg++) { |
| 2346 for (ng = 0; ng < HGW; ng++) { | 2322 for (ng = 0; ng < HGW; ng++) { |
| 2347 x = (HGX + mg * HRY + ng * HRX) >> 8; | 2323 x = (HGX + mg * HRY + ng * HRX) >> 8; |
| 2348 y = (HGY + mg * HRX - ng * HRY) >> 8; | 2324 y = (HGY + mg * HRX - ng * HRY) >> 8; |
| 2349 FX_DWORD pat_index = GI[mg * HGW + ng]; | 2325 FX_DWORD pat_index = GI[mg * HGW + ng]; |
| 2350 if (pat_index >= HNUMPATS) { | 2326 if (pat_index >= HNUMPATS) { |
| 2351 pat_index = HNUMPATS - 1; | 2327 pat_index = HNUMPATS - 1; |
| 2352 } | 2328 } |
| 2353 HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP); | 2329 HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP); |
| 2354 } | 2330 } |
| 2355 } | 2331 } |
| 2356 m_pModule->JBig2_Free(GI); | 2332 FX_Free(GI); |
| 2357 delete pGID; | 2333 delete pGID; |
| 2358 return HTREG; | 2334 return HTREG; |
| 2359 failed: | 2335 failed: |
| 2360 delete pGID; | 2336 delete pGID; |
| 2361 delete HTREG; | 2337 delete HTREG; |
| 2362 return NULL; | 2338 return NULL; |
| 2363 } | 2339 } |
| 2364 CJBig2_PatternDict* CJBig2_PDDProc::decode_Arith( | 2340 CJBig2_PatternDict* CJBig2_PDDProc::decode_Arith( |
| 2365 CJBig2_ArithDecoder* pArithDecoder, | 2341 CJBig2_ArithDecoder* pArithDecoder, |
| 2366 JBig2ArithCtx* gbContext, | 2342 JBig2ArithCtx* gbContext, |
| 2367 IFX_Pause* pPause) { | 2343 IFX_Pause* pPause) { |
| 2368 FX_DWORD GRAY; | 2344 FX_DWORD GRAY; |
| 2369 CJBig2_Image* BHDC = NULL; | 2345 CJBig2_Image* BHDC = NULL; |
| 2370 CJBig2_PatternDict* pDict; | 2346 CJBig2_PatternDict* pDict = new CJBig2_PatternDict(); |
| 2371 CJBig2_GRDProc* pGRD; | |
| 2372 pDict = new CJBig2_PatternDict(); | |
| 2373 pDict->NUMPATS = GRAYMAX + 1; | 2347 pDict->NUMPATS = GRAYMAX + 1; |
| 2374 pDict->HDPATS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 2348 pDict->HDPATS = (CJBig2_Image**)FX_Alloc2D(uint8_t, sizeof(CJBig2_Image*), |
| 2375 sizeof(CJBig2_Image*), pDict->NUMPATS); | 2349 pDict->NUMPATS); |
| 2376 JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS); | 2350 JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS); |
| 2377 JBIG2_ALLOC(pGRD, CJBig2_GRDProc()); | 2351 CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); |
| 2378 pGRD->MMR = HDMMR; | 2352 pGRD->MMR = HDMMR; |
| 2379 pGRD->GBW = (GRAYMAX + 1) * HDPW; | 2353 pGRD->GBW = (GRAYMAX + 1) * HDPW; |
| 2380 pGRD->GBH = HDPH; | 2354 pGRD->GBH = HDPH; |
| 2381 pGRD->GBTEMPLATE = HDTEMPLATE; | 2355 pGRD->GBTEMPLATE = HDTEMPLATE; |
| 2382 pGRD->TPGDON = 0; | 2356 pGRD->TPGDON = 0; |
| 2383 pGRD->USESKIP = 0; | 2357 pGRD->USESKIP = 0; |
| 2384 pGRD->GBAT[0] = -(int32_t)HDPW; | 2358 pGRD->GBAT[0] = -(int32_t)HDPW; |
| 2385 pGRD->GBAT[1] = 0; | 2359 pGRD->GBAT[1] = 0; |
| 2386 if (pGRD->GBTEMPLATE == 0) { | 2360 if (pGRD->GBTEMPLATE == 0) { |
| 2387 pGRD->GBAT[2] = -3; | 2361 pGRD->GBAT[2] = -3; |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 2410 return pDict; | 2384 return pDict; |
| 2411 failed: | 2385 failed: |
| 2412 delete pDict; | 2386 delete pDict; |
| 2413 return NULL; | 2387 return NULL; |
| 2414 } | 2388 } |
| 2415 | 2389 |
| 2416 CJBig2_PatternDict* CJBig2_PDDProc::decode_MMR(CJBig2_BitStream* pStream, | 2390 CJBig2_PatternDict* CJBig2_PDDProc::decode_MMR(CJBig2_BitStream* pStream, |
| 2417 IFX_Pause* pPause) { | 2391 IFX_Pause* pPause) { |
| 2418 FX_DWORD GRAY; | 2392 FX_DWORD GRAY; |
| 2419 CJBig2_Image* BHDC = NULL; | 2393 CJBig2_Image* BHDC = NULL; |
| 2420 CJBig2_GRDProc* pGRD; | |
| 2421 CJBig2_PatternDict* pDict = new CJBig2_PatternDict(); | 2394 CJBig2_PatternDict* pDict = new CJBig2_PatternDict(); |
| 2422 pDict->NUMPATS = GRAYMAX + 1; | 2395 pDict->NUMPATS = GRAYMAX + 1; |
| 2423 pDict->HDPATS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 2396 pDict->HDPATS = (CJBig2_Image**)FX_Alloc2D(uint8_t, sizeof(CJBig2_Image*), |
| 2424 sizeof(CJBig2_Image*), pDict->NUMPATS); | 2397 pDict->NUMPATS); |
| 2425 JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS); | 2398 JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS); |
| 2426 JBIG2_ALLOC(pGRD, CJBig2_GRDProc()); | 2399 CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); |
| 2427 pGRD->MMR = HDMMR; | 2400 pGRD->MMR = HDMMR; |
| 2428 pGRD->GBW = (GRAYMAX + 1) * HDPW; | 2401 pGRD->GBW = (GRAYMAX + 1) * HDPW; |
| 2429 pGRD->GBH = HDPH; | 2402 pGRD->GBH = HDPH; |
| 2430 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHDC, pStream); | 2403 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHDC, pStream); |
| 2431 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { | 2404 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
| 2432 pGRD->Continue_decode(pPause); | 2405 pGRD->Continue_decode(pPause); |
| 2433 } | 2406 } |
| 2434 if (BHDC == NULL) { | 2407 if (BHDC == NULL) { |
| 2435 delete pGRD; | 2408 delete pGRD; |
| 2436 goto failed; | 2409 goto failed; |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 2447 delete pDict; | 2420 delete pDict; |
| 2448 return NULL; | 2421 return NULL; |
| 2449 } | 2422 } |
| 2450 FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | 2423 FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, |
| 2451 JBig2ArithCtx* gbContext, | 2424 JBig2ArithCtx* gbContext, |
| 2452 IFX_Pause* pPause) { | 2425 IFX_Pause* pPause) { |
| 2453 CJBig2_Image** GSPLANES; | 2426 CJBig2_Image** GSPLANES; |
| 2454 int32_t J, K; | 2427 int32_t J, K; |
| 2455 FX_DWORD x, y; | 2428 FX_DWORD x, y; |
| 2456 FX_DWORD* GSVALS; | 2429 FX_DWORD* GSVALS; |
| 2457 CJBig2_GRDProc* pGRD; | 2430 GSPLANES = (CJBig2_Image**)FX_Alloc2D(uint8_t, sizeof(CJBig2_Image*), GSBPP); |
| 2458 GSPLANES = | |
| 2459 (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), GSBPP); | |
| 2460 if (!GSPLANES) { | 2431 if (!GSPLANES) { |
| 2461 return NULL; | 2432 return NULL; |
| 2462 } | 2433 } |
| 2463 GSVALS = (FX_DWORD*)m_pModule->JBig2_Malloc3(sizeof(FX_DWORD), GSW, GSH); | 2434 GSVALS = (FX_DWORD*)FX_Alloc3D(uint8_t, sizeof(FX_DWORD), GSW, GSH); |
| 2464 if (!GSVALS) { | 2435 if (!GSVALS) { |
| 2465 m_pModule->JBig2_Free(GSPLANES); | 2436 FX_Free(GSPLANES); |
| 2466 return NULL; | 2437 return NULL; |
| 2467 } | 2438 } |
| 2468 JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP); | 2439 JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP); |
| 2469 JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH); | 2440 JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH); |
| 2470 JBIG2_ALLOC(pGRD, CJBig2_GRDProc()); | 2441 CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); |
| 2471 pGRD->MMR = GSMMR; | 2442 pGRD->MMR = GSMMR; |
| 2472 pGRD->GBW = GSW; | 2443 pGRD->GBW = GSW; |
| 2473 pGRD->GBH = GSH; | 2444 pGRD->GBH = GSH; |
| 2474 pGRD->GBTEMPLATE = GSTEMPLATE; | 2445 pGRD->GBTEMPLATE = GSTEMPLATE; |
| 2475 pGRD->TPGDON = 0; | 2446 pGRD->TPGDON = 0; |
| 2476 pGRD->USESKIP = GSUSESKIP; | 2447 pGRD->USESKIP = GSUSESKIP; |
| 2477 pGRD->SKIP = GSKIP; | 2448 pGRD->SKIP = GSKIP; |
| 2478 if (GSTEMPLATE <= 1) { | 2449 if (GSTEMPLATE <= 1) { |
| 2479 pGRD->GBAT[0] = 3; | 2450 pGRD->GBAT[0] = 3; |
| 2480 } else { | 2451 } else { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2516 for (y = 0; y < GSH; y++) { | 2487 for (y = 0; y < GSH; y++) { |
| 2517 for (x = 0; x < GSW; x++) { | 2488 for (x = 0; x < GSW; x++) { |
| 2518 for (J = 0; J < GSBPP; J++) { | 2489 for (J = 0; J < GSBPP; J++) { |
| 2519 GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J; | 2490 GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J; |
| 2520 } | 2491 } |
| 2521 } | 2492 } |
| 2522 } | 2493 } |
| 2523 for (J = 0; J < GSBPP; J++) { | 2494 for (J = 0; J < GSBPP; J++) { |
| 2524 delete GSPLANES[J]; | 2495 delete GSPLANES[J]; |
| 2525 } | 2496 } |
| 2526 m_pModule->JBig2_Free(GSPLANES); | 2497 FX_Free(GSPLANES); |
| 2527 delete pGRD; | 2498 delete pGRD; |
| 2528 return GSVALS; | 2499 return GSVALS; |
| 2529 failed: | 2500 failed: |
| 2530 m_pModule->JBig2_Free(GSPLANES); | 2501 FX_Free(GSPLANES); |
| 2531 delete pGRD; | 2502 delete pGRD; |
| 2532 m_pModule->JBig2_Free(GSVALS); | 2503 FX_Free(GSVALS); |
| 2533 return NULL; | 2504 return NULL; |
| 2534 } | 2505 } |
| 2535 FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream, | 2506 FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream, |
| 2536 IFX_Pause* pPause) { | 2507 IFX_Pause* pPause) { |
| 2537 CJBig2_Image** GSPLANES; | 2508 CJBig2_Image** GSPLANES; |
| 2538 int32_t J, K; | 2509 int32_t J, K; |
| 2539 FX_DWORD x, y; | 2510 FX_DWORD x, y; |
| 2540 FX_DWORD* GSVALS; | 2511 FX_DWORD* GSVALS; |
| 2541 CJBig2_GRDProc* pGRD; | 2512 GSPLANES = (CJBig2_Image**)FX_Alloc2D(uint8_t, sizeof(CJBig2_Image*), GSBPP); |
| 2542 GSPLANES = | |
| 2543 (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), GSBPP); | |
| 2544 if (!GSPLANES) { | 2513 if (!GSPLANES) { |
| 2545 return NULL; | 2514 return NULL; |
| 2546 } | 2515 } |
| 2547 GSVALS = (FX_DWORD*)m_pModule->JBig2_Malloc3(sizeof(FX_DWORD), GSW, GSH); | 2516 GSVALS = (FX_DWORD*)FX_Alloc3D(uint8_t, sizeof(FX_DWORD), GSW, GSH); |
| 2548 if (!GSVALS) { | 2517 if (!GSVALS) { |
| 2549 if (GSPLANES) { | 2518 FX_Free(GSPLANES); |
| 2550 m_pModule->JBig2_Free(GSPLANES); | |
| 2551 } | |
| 2552 return NULL; | 2519 return NULL; |
| 2553 } | 2520 } |
| 2554 JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP); | 2521 JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP); |
| 2555 JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH); | 2522 JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH); |
| 2556 JBIG2_ALLOC(pGRD, CJBig2_GRDProc()); | 2523 CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); |
| 2557 pGRD->MMR = GSMMR; | 2524 pGRD->MMR = GSMMR; |
| 2558 pGRD->GBW = GSW; | 2525 pGRD->GBW = GSW; |
| 2559 pGRD->GBH = GSH; | 2526 pGRD->GBH = GSH; |
| 2560 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&GSPLANES[GSBPP - 1], pStream); | 2527 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&GSPLANES[GSBPP - 1], pStream); |
| 2561 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { | 2528 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
| 2562 pGRD->Continue_decode(pPause); | 2529 pGRD->Continue_decode(pPause); |
| 2563 } | 2530 } |
| 2564 if (GSPLANES[GSBPP - 1] == NULL) { | 2531 if (GSPLANES[GSBPP - 1] == NULL) { |
| 2565 goto failed; | 2532 goto failed; |
| 2566 } | 2533 } |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 2586 for (y = 0; y < GSH; y++) { | 2553 for (y = 0; y < GSH; y++) { |
| 2587 for (x = 0; x < GSW; x++) { | 2554 for (x = 0; x < GSW; x++) { |
| 2588 for (J = 0; J < GSBPP; J++) { | 2555 for (J = 0; J < GSBPP; J++) { |
| 2589 GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J; | 2556 GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J; |
| 2590 } | 2557 } |
| 2591 } | 2558 } |
| 2592 } | 2559 } |
| 2593 for (J = 0; J < GSBPP; J++) { | 2560 for (J = 0; J < GSBPP; J++) { |
| 2594 delete GSPLANES[J]; | 2561 delete GSPLANES[J]; |
| 2595 } | 2562 } |
| 2596 m_pModule->JBig2_Free(GSPLANES); | 2563 FX_Free(GSPLANES); |
| 2597 delete pGRD; | 2564 delete pGRD; |
| 2598 return GSVALS; | 2565 return GSVALS; |
| 2599 failed: | 2566 failed: |
| 2600 m_pModule->JBig2_Free(GSPLANES); | 2567 FX_Free(GSPLANES); |
| 2601 delete pGRD; | 2568 delete pGRD; |
| 2602 m_pModule->JBig2_Free(GSVALS); | 2569 FX_Free(GSVALS); |
| 2603 return NULL; | 2570 return NULL; |
| 2604 } | 2571 } |
| 2605 FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith( | 2572 FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith( |
| 2606 CJBig2_Image** pImage, | 2573 CJBig2_Image** pImage, |
| 2607 CJBig2_ArithDecoder* pArithDecoder, | 2574 CJBig2_ArithDecoder* pArithDecoder, |
| 2608 JBig2ArithCtx* gbContext, | 2575 JBig2ArithCtx* gbContext, |
| 2609 IFX_Pause* pPause) { | 2576 IFX_Pause* pPause) { |
| 2610 if (GBW == 0 || GBH == 0) { | 2577 if (GBW == 0 || GBH == 0) { |
| 2611 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; | 2578 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; |
| 2612 return FXCODEC_STATUS_DECODE_FINISH; | 2579 return FXCODEC_STATUS_DECODE_FINISH; |
| 2613 } | 2580 } |
| 2614 m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY; | 2581 m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY; |
| 2615 m_pPause = pPause; | 2582 m_pPause = pPause; |
| 2616 if (*pImage == NULL) { | 2583 if (!*pImage) |
| 2617 JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH)); | 2584 *pImage = new CJBig2_Image(GBW, GBH); |
| 2618 } | |
| 2619 if ((*pImage)->m_pData == NULL) { | 2585 if ((*pImage)->m_pData == NULL) { |
| 2620 delete *pImage; | 2586 delete *pImage; |
| 2621 *pImage = NULL; | 2587 *pImage = NULL; |
| 2622 m_ProssiveStatus = FXCODEC_STATUS_ERROR; | 2588 m_ProssiveStatus = FXCODEC_STATUS_ERROR; |
| 2623 return FXCODEC_STATUS_ERROR; | 2589 return FXCODEC_STATUS_ERROR; |
| 2624 } | 2590 } |
| 2625 m_DecodeType = 1; | 2591 m_DecodeType = 1; |
| 2626 m_pImage = pImage; | 2592 m_pImage = pImage; |
| 2627 (*m_pImage)->fill(0); | 2593 (*m_pImage)->fill(0); |
| 2628 m_pArithDecoder = pArithDecoder; | 2594 m_pArithDecoder = pArithDecoder; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2676 m_ReplaceRect.bottom = m_loopIndex; | 2642 m_ReplaceRect.bottom = m_loopIndex; |
| 2677 if (m_ProssiveStatus == FXCODEC_STATUS_DECODE_FINISH) { | 2643 if (m_ProssiveStatus == FXCODEC_STATUS_DECODE_FINISH) { |
| 2678 m_loopIndex = 0; | 2644 m_loopIndex = 0; |
| 2679 } | 2645 } |
| 2680 return m_ProssiveStatus; | 2646 return m_ProssiveStatus; |
| 2681 } | 2647 } |
| 2682 FXCODEC_STATUS CJBig2_GRDProc::Start_decode_MMR(CJBig2_Image** pImage, | 2648 FXCODEC_STATUS CJBig2_GRDProc::Start_decode_MMR(CJBig2_Image** pImage, |
| 2683 CJBig2_BitStream* pStream, | 2649 CJBig2_BitStream* pStream, |
| 2684 IFX_Pause* pPause) { | 2650 IFX_Pause* pPause) { |
| 2685 int bitpos, i; | 2651 int bitpos, i; |
| 2686 JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH)); | 2652 *pImage = new CJBig2_Image(GBW, GBH); |
| 2687 if ((*pImage)->m_pData == NULL) { | 2653 if ((*pImage)->m_pData == NULL) { |
| 2688 delete (*pImage); | 2654 delete (*pImage); |
| 2689 (*pImage) = NULL; | 2655 (*pImage) = NULL; |
| 2690 m_ProssiveStatus = FXCODEC_STATUS_ERROR; | 2656 m_ProssiveStatus = FXCODEC_STATUS_ERROR; |
| 2691 return m_ProssiveStatus; | 2657 return m_ProssiveStatus; |
| 2692 } | 2658 } |
| 2693 bitpos = (int)pStream->getBitPos(); | 2659 bitpos = (int)pStream->getBitPos(); |
| 2694 _FaxG4Decode(m_pModule, pStream->getBuf(), pStream->getLength(), &bitpos, | 2660 _FaxG4Decode(pStream->getBuf(), pStream->getLength(), &bitpos, |
| 2695 (*pImage)->m_pData, GBW, GBH, (*pImage)->m_nStride); | 2661 (*pImage)->m_pData, GBW, GBH, (*pImage)->m_nStride); |
| 2696 pStream->setBitPos(bitpos); | 2662 pStream->setBitPos(bitpos); |
| 2697 for (i = 0; (FX_DWORD)i < (*pImage)->m_nStride * GBH; i++) { | 2663 for (i = 0; (FX_DWORD)i < (*pImage)->m_nStride * GBH; i++) { |
| 2698 (*pImage)->m_pData[i] = ~(*pImage)->m_pData[i]; | 2664 (*pImage)->m_pData[i] = ~(*pImage)->m_pData[i]; |
| 2699 } | 2665 } |
| 2700 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; | 2666 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; |
| 2701 return m_ProssiveStatus; | 2667 return m_ProssiveStatus; |
| 2702 } | 2668 } |
| 2703 | 2669 |
| 2704 FXCODEC_STATUS CJBig2_GRDProc::Continue_decode(IFX_Pause* pPause) { | 2670 FXCODEC_STATUS CJBig2_GRDProc::Continue_decode(IFX_Pause* pPause) { |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3264 } | 3230 } |
| 3265 if (pPause && pPause->NeedToPauseNow()) { | 3231 if (pPause && pPause->NeedToPauseNow()) { |
| 3266 m_loopIndex++; | 3232 m_loopIndex++; |
| 3267 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; | 3233 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; |
| 3268 return FXCODEC_STATUS_DECODE_TOBECONTINUE; | 3234 return FXCODEC_STATUS_DECODE_TOBECONTINUE; |
| 3269 } | 3235 } |
| 3270 } | 3236 } |
| 3271 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; | 3237 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; |
| 3272 return FXCODEC_STATUS_DECODE_FINISH; | 3238 return FXCODEC_STATUS_DECODE_FINISH; |
| 3273 } | 3239 } |
| OLD | NEW |