Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp

Issue 1337823003: Cleanup JBig2_GeneralDecoder.cpp. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: FX_Alloc() can't fail and return, unique_ptr Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
9 #include "../../../../third_party/base/nonstd_unique_ptr.h"
8 #include "JBig2_ArithDecoder.h" 10 #include "JBig2_ArithDecoder.h"
9 #include "JBig2_ArithIntDecoder.h" 11 #include "JBig2_ArithIntDecoder.h"
10 #include "JBig2_HuffmanDecoder.h" 12 #include "JBig2_HuffmanDecoder.h"
11 #include "JBig2_HuffmanTable.h" 13 #include "JBig2_HuffmanTable.h"
12 #include "JBig2_PatternDict.h" 14 #include "JBig2_PatternDict.h"
13 15
14 extern const JBig2ArithQe QeTable[] = { 16 extern const JBig2ArithQe QeTable[] = {
15 {0x5601, 1, 1, 1}, {0x3401, 2, 6, 0}, {0x1801, 3, 9, 0}, 17 {0x5601, 1, 1, 1}, {0x3401, 2, 6, 0}, {0x1801, 3, 9, 0},
16 {0x0AC1, 4, 12, 0}, {0x0521, 5, 29, 0}, {0x0221, 38, 33, 0}, 18 {0x0AC1, 4, 12, 0}, {0x0521, 5, 29, 0}, {0x0221, 38, 33, 0},
17 {0x5601, 7, 6, 1}, {0x5401, 8, 14, 0}, {0x4801, 9, 14, 0}, 19 {0x5601, 7, 6, 1}, {0x5401, 8, 14, 0}, {0x4801, 9, 14, 0},
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3( 69 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3(
68 CJBig2_ArithDecoder* pArithDecoder, 70 CJBig2_ArithDecoder* pArithDecoder,
69 JBig2ArithCtx* gbContext) { 71 JBig2ArithCtx* gbContext) {
70 FX_BOOL LTP, SLTP, bVal; 72 FX_BOOL LTP, SLTP, bVal;
71 FX_DWORD CONTEXT; 73 FX_DWORD CONTEXT;
72 FX_DWORD line1, line2; 74 FX_DWORD line1, line2;
73 uint8_t *pLine, *pLine1, *pLine2, cVal; 75 uint8_t *pLine, *pLine1, *pLine2, cVal;
74 int32_t nStride, nStride2, k; 76 int32_t nStride, nStride2, k;
75 int32_t nLineBytes, nBitsLeft, cc; 77 int32_t nLineBytes, nBitsLeft, cc;
76 LTP = 0; 78 LTP = 0;
77 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); 79 nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH));
78 if (GBREG->m_pData == NULL) { 80 if (GBREG->m_pData == NULL) {
79 delete GBREG;
80 return NULL; 81 return NULL;
81 } 82 }
82 pLine = GBREG->m_pData; 83 pLine = GBREG->m_pData;
83 nStride = GBREG->m_nStride; 84 nStride = GBREG->m_nStride;
84 nStride2 = nStride << 1; 85 nStride2 = nStride << 1;
85 nLineBytes = ((GBW + 7) >> 3) - 1; 86 nLineBytes = ((GBW + 7) >> 3) - 1;
86 nBitsLeft = GBW - (nLineBytes << 3); 87 nBitsLeft = GBW - (nLineBytes << 3);
87 FX_DWORD height = GBH & 0x7fffffff; 88 FX_DWORD height = GBH & 0x7fffffff;
88 for (FX_DWORD h = 0; h < height; h++) { 89 for (FX_DWORD h = 0; h < height; h++) {
89 if (TPGDON) { 90 if (TPGDON) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]); 146 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
146 cVal |= bVal << (7 - k); 147 cVal |= bVal << (7 - k);
147 CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal | 148 CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal |
148 (((line2 >> (7 - k))) & 0x0010)); 149 (((line2 >> (7 - k))) & 0x0010));
149 } 150 }
150 pLine[nLineBytes] = cVal; 151 pLine[nLineBytes] = cVal;
151 } 152 }
152 } 153 }
153 pLine += nStride; 154 pLine += nStride;
154 } 155 }
155 return GBREG; 156 return GBREG.release();
156 } 157 }
158
157 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_unopt( 159 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_unopt(
158 CJBig2_ArithDecoder* pArithDecoder, 160 CJBig2_ArithDecoder* pArithDecoder,
159 JBig2ArithCtx* gbContext) { 161 JBig2ArithCtx* gbContext) {
160 FX_BOOL LTP, SLTP, bVal; 162 FX_BOOL LTP, SLTP, bVal;
161 FX_DWORD CONTEXT; 163 FX_DWORD CONTEXT;
162 FX_DWORD line1, line2, line3; 164 FX_DWORD line1, line2, line3;
163 LTP = 0; 165 LTP = 0;
164 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); 166 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.
165 GBREG->fill(0); 167 GBREG->fill(0);
166 for (FX_DWORD h = 0; h < GBH; h++) { 168 for (FX_DWORD h = 0; h < GBH; h++) {
167 if (TPGDON) { 169 if (TPGDON) {
168 SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]); 170 SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
169 LTP = LTP ^ SLTP; 171 LTP = LTP ^ SLTP;
170 } 172 }
171 if (LTP == 1) { 173 if (LTP == 1) {
172 GBREG->copyLine(h, h - 1); 174 GBREG->copyLine(h, h - 1);
173 } else { 175 } else {
174 line1 = GBREG->getPixel(1, h - 2); 176 line1 = GBREG->getPixel(1, h - 2);
(...skipping 17 matching lines...) Expand all
192 } 194 }
193 if (bVal) { 195 if (bVal) {
194 GBREG->setPixel(w, h, bVal); 196 GBREG->setPixel(w, h, bVal);
195 } 197 }
196 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07; 198 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
197 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f; 199 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
198 line3 = ((line3 << 1) | bVal) & 0x0f; 200 line3 = ((line3 << 1) | bVal) & 0x0f;
199 } 201 }
200 } 202 }
201 } 203 }
202 return GBREG; 204 return GBREG.release();
203 } 205 }
206
204 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3( 207 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3(
205 CJBig2_ArithDecoder* pArithDecoder, 208 CJBig2_ArithDecoder* pArithDecoder,
206 JBig2ArithCtx* gbContext) { 209 JBig2ArithCtx* gbContext) {
207 FX_BOOL LTP, SLTP, bVal; 210 FX_BOOL LTP, SLTP, bVal;
208 FX_DWORD CONTEXT; 211 FX_DWORD CONTEXT;
209 FX_DWORD line1, line2; 212 FX_DWORD line1, line2;
210 uint8_t *pLine, *pLine1, *pLine2, cVal; 213 uint8_t *pLine, *pLine1, *pLine2, cVal;
211 int32_t nStride, nStride2, k; 214 int32_t nStride, nStride2, k;
212 int32_t nLineBytes, nBitsLeft, cc; 215 int32_t nLineBytes, nBitsLeft, cc;
213 LTP = 0; 216 LTP = 0;
214 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); 217 nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH));
215 if (GBREG->m_pData == NULL) { 218 if (GBREG->m_pData == NULL) {
216 delete GBREG;
217 return NULL; 219 return NULL;
218 } 220 }
219 pLine = GBREG->m_pData; 221 pLine = GBREG->m_pData;
220 nStride = GBREG->m_nStride; 222 nStride = GBREG->m_nStride;
221 nStride2 = nStride << 1; 223 nStride2 = nStride << 1;
222 nLineBytes = ((GBW + 7) >> 3) - 1; 224 nLineBytes = ((GBW + 7) >> 3) - 1;
223 nBitsLeft = GBW - (nLineBytes << 3); 225 nBitsLeft = GBW - (nLineBytes << 3);
224 for (FX_DWORD h = 0; h < GBH; h++) { 226 for (FX_DWORD h = 0; h < GBH; h++) {
225 if (TPGDON) { 227 if (TPGDON) {
226 SLTP = pArithDecoder->DECODE(&gbContext[0x0795]); 228 SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]); 283 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
282 cVal |= bVal << (7 - k); 284 cVal |= bVal << (7 - k);
283 CONTEXT = 285 CONTEXT =
284 ((CONTEXT & 0x0efb) << 1) | bVal | ((line2 >> (8 - k)) & 0x0008); 286 ((CONTEXT & 0x0efb) << 1) | bVal | ((line2 >> (8 - k)) & 0x0008);
285 } 287 }
286 pLine[nLineBytes] = cVal; 288 pLine[nLineBytes] = cVal;
287 } 289 }
288 } 290 }
289 pLine += nStride; 291 pLine += nStride;
290 } 292 }
291 return GBREG; 293 return GBREG.release();
292 } 294 }
295
293 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_unopt( 296 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_unopt(
294 CJBig2_ArithDecoder* pArithDecoder, 297 CJBig2_ArithDecoder* pArithDecoder,
295 JBig2ArithCtx* gbContext) { 298 JBig2ArithCtx* gbContext) {
296 FX_BOOL LTP, SLTP, bVal; 299 FX_BOOL LTP, SLTP, bVal;
297 FX_DWORD CONTEXT; 300 FX_DWORD CONTEXT;
298 FX_DWORD line1, line2, line3; 301 FX_DWORD line1, line2, line3;
299 LTP = 0; 302 LTP = 0;
300 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); 303 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.
301 GBREG->fill(0); 304 GBREG->fill(0);
302 for (FX_DWORD h = 0; h < GBH; h++) { 305 for (FX_DWORD h = 0; h < GBH; h++) {
303 if (TPGDON) { 306 if (TPGDON) {
304 SLTP = pArithDecoder->DECODE(&gbContext[0x0795]); 307 SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
305 LTP = LTP ^ SLTP; 308 LTP = LTP ^ SLTP;
306 } 309 }
307 if (LTP == 1) { 310 if (LTP == 1) {
308 GBREG->copyLine(h, h - 1); 311 GBREG->copyLine(h, h - 1);
309 } else { 312 } else {
310 line1 = GBREG->getPixel(2, h - 2); 313 line1 = GBREG->getPixel(2, h - 2);
(...skipping 15 matching lines...) Expand all
326 } 329 }
327 if (bVal) { 330 if (bVal) {
328 GBREG->setPixel(w, h, bVal); 331 GBREG->setPixel(w, h, bVal);
329 } 332 }
330 line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f; 333 line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
331 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f; 334 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
332 line3 = ((line3 << 1) | bVal) & 0x07; 335 line3 = ((line3 << 1) | bVal) & 0x07;
333 } 336 }
334 } 337 }
335 } 338 }
336 return GBREG; 339 return GBREG.release();
337 } 340 }
338 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3( 341 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3(
339 CJBig2_ArithDecoder* pArithDecoder, 342 CJBig2_ArithDecoder* pArithDecoder,
340 JBig2ArithCtx* gbContext) { 343 JBig2ArithCtx* gbContext) {
341 FX_BOOL LTP, SLTP, bVal; 344 FX_BOOL LTP, SLTP, bVal;
342 FX_DWORD CONTEXT; 345 FX_DWORD CONTEXT;
343 FX_DWORD line1, line2; 346 FX_DWORD line1, line2;
344 uint8_t *pLine, *pLine1, *pLine2, cVal; 347 uint8_t *pLine, *pLine1, *pLine2, cVal;
345 int32_t nStride, nStride2, k; 348 int32_t nStride, nStride2, k;
346 int32_t nLineBytes, nBitsLeft, cc; 349 int32_t nLineBytes, nBitsLeft, cc;
347 LTP = 0; 350 LTP = 0;
348 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); 351 nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH));
349 if (GBREG->m_pData == NULL) { 352 if (GBREG->m_pData == NULL) {
350 delete GBREG;
351 return NULL; 353 return NULL;
352 } 354 }
353 pLine = GBREG->m_pData; 355 pLine = GBREG->m_pData;
354 nStride = GBREG->m_nStride; 356 nStride = GBREG->m_nStride;
355 nStride2 = nStride << 1; 357 nStride2 = nStride << 1;
356 nLineBytes = ((GBW + 7) >> 3) - 1; 358 nLineBytes = ((GBW + 7) >> 3) - 1;
357 nBitsLeft = GBW - (nLineBytes << 3); 359 nBitsLeft = GBW - (nLineBytes << 3);
358 for (FX_DWORD h = 0; h < GBH; h++) { 360 for (FX_DWORD h = 0; h < GBH; h++) {
359 if (TPGDON) { 361 if (TPGDON) {
360 SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]); 362 SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]); 417 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
416 cVal |= bVal << (7 - k); 418 cVal |= bVal << (7 - k);
417 CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal | 419 CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
418 (((line2 >> (10 - k))) & 0x0004); 420 (((line2 >> (10 - k))) & 0x0004);
419 } 421 }
420 pLine[nLineBytes] = cVal; 422 pLine[nLineBytes] = cVal;
421 } 423 }
422 } 424 }
423 pLine += nStride; 425 pLine += nStride;
424 } 426 }
425 return GBREG; 427 return GBREG.release();
426 } 428 }
429
427 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_unopt( 430 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_unopt(
428 CJBig2_ArithDecoder* pArithDecoder, 431 CJBig2_ArithDecoder* pArithDecoder,
429 JBig2ArithCtx* gbContext) { 432 JBig2ArithCtx* gbContext) {
430 FX_BOOL LTP, SLTP, bVal; 433 FX_BOOL LTP, SLTP, bVal;
431 FX_DWORD CONTEXT; 434 FX_DWORD CONTEXT;
432 FX_DWORD line1, line2, line3; 435 FX_DWORD line1, line2, line3;
433 LTP = 0; 436 LTP = 0;
434 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); 437 nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH));
435 GBREG->fill(0); 438 GBREG->fill(0);
436 for (FX_DWORD h = 0; h < GBH; h++) { 439 for (FX_DWORD h = 0; h < GBH; h++) {
437 if (TPGDON) { 440 if (TPGDON) {
438 SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]); 441 SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
439 LTP = LTP ^ SLTP; 442 LTP = LTP ^ SLTP;
440 } 443 }
441 if (LTP == 1) { 444 if (LTP == 1) {
442 GBREG->copyLine(h, h - 1); 445 GBREG->copyLine(h, h - 1);
443 } else { 446 } else {
444 line1 = GBREG->getPixel(1, h - 2); 447 line1 = GBREG->getPixel(1, h - 2);
(...skipping 13 matching lines...) Expand all
458 } 461 }
459 if (bVal) { 462 if (bVal) {
460 GBREG->setPixel(w, h, bVal); 463 GBREG->setPixel(w, h, bVal);
461 } 464 }
462 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07; 465 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
463 line2 = ((line2 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x0f; 466 line2 = ((line2 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x0f;
464 line3 = ((line3 << 1) | bVal) & 0x03; 467 line3 = ((line3 << 1) | bVal) & 0x03;
465 } 468 }
466 } 469 }
467 } 470 }
468 return GBREG; 471 return GBREG.release();
469 } 472 }
473
470 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3( 474 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3(
471 CJBig2_ArithDecoder* pArithDecoder, 475 CJBig2_ArithDecoder* pArithDecoder,
472 JBig2ArithCtx* gbContext) { 476 JBig2ArithCtx* gbContext) {
473 FX_BOOL LTP, SLTP, bVal; 477 FX_BOOL LTP, SLTP, bVal;
474 FX_DWORD CONTEXT; 478 FX_DWORD CONTEXT;
475 FX_DWORD line1; 479 FX_DWORD line1;
476 uint8_t *pLine, *pLine1, cVal; 480 uint8_t *pLine, *pLine1, cVal;
477 int32_t nStride, k; 481 int32_t nStride, k;
478 int32_t nLineBytes, nBitsLeft, cc; 482 int32_t nLineBytes, nBitsLeft, cc;
479 LTP = 0; 483 LTP = 0;
480 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); 484 nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH));
481 if (GBREG->m_pData == NULL) { 485 if (GBREG->m_pData == NULL) {
482 delete GBREG;
483 return NULL; 486 return NULL;
484 } 487 }
485 pLine = GBREG->m_pData; 488 pLine = GBREG->m_pData;
486 nStride = GBREG->m_nStride; 489 nStride = GBREG->m_nStride;
487 nLineBytes = ((GBW + 7) >> 3) - 1; 490 nLineBytes = ((GBW + 7) >> 3) - 1;
488 nBitsLeft = GBW - (nLineBytes << 3); 491 nBitsLeft = GBW - (nLineBytes << 3);
489 for (FX_DWORD h = 0; h < GBH; h++) { 492 for (FX_DWORD h = 0; h < GBH; h++) {
490 if (TPGDON) { 493 if (TPGDON) {
491 SLTP = pArithDecoder->DECODE(&gbContext[0x0195]); 494 SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
492 LTP = LTP ^ SLTP; 495 LTP = LTP ^ SLTP;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 for (k = 0; k < nBitsLeft; k++) { 536 for (k = 0; k < nBitsLeft; k++) {
534 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]); 537 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
535 cVal |= bVal << (7 - k); 538 cVal |= bVal << (7 - k);
536 CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal; 539 CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
537 } 540 }
538 pLine[nLineBytes] = cVal; 541 pLine[nLineBytes] = cVal;
539 } 542 }
540 } 543 }
541 pLine += nStride; 544 pLine += nStride;
542 } 545 }
543 return GBREG; 546 return GBREG.release();
544 } 547 }
548
545 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_unopt( 549 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_unopt(
546 CJBig2_ArithDecoder* pArithDecoder, 550 CJBig2_ArithDecoder* pArithDecoder,
547 JBig2ArithCtx* gbContext) { 551 JBig2ArithCtx* gbContext) {
548 FX_BOOL LTP, SLTP, bVal; 552 FX_BOOL LTP, SLTP, bVal;
549 FX_DWORD CONTEXT; 553 FX_DWORD CONTEXT;
550 FX_DWORD line1, line2; 554 FX_DWORD line1, line2;
551 LTP = 0; 555 LTP = 0;
552 CJBig2_Image* GBREG = new CJBig2_Image(GBW, GBH); 556 nonstd::unique_ptr<CJBig2_Image> GBREG(new CJBig2_Image(GBW, GBH));
553 GBREG->fill(0); 557 GBREG->fill(0);
554 for (FX_DWORD h = 0; h < GBH; h++) { 558 for (FX_DWORD h = 0; h < GBH; h++) {
555 if (TPGDON) { 559 if (TPGDON) {
556 SLTP = pArithDecoder->DECODE(&gbContext[0x0195]); 560 SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
557 LTP = LTP ^ SLTP; 561 LTP = LTP ^ SLTP;
558 } 562 }
559 if (LTP == 1) { 563 if (LTP == 1) {
560 GBREG->copyLine(h, h - 1); 564 GBREG->copyLine(h, h - 1);
561 } else { 565 } else {
562 line1 = GBREG->getPixel(1, h - 1); 566 line1 = GBREG->getPixel(1, h - 1);
563 line1 |= GBREG->getPixel(0, h - 1) << 1; 567 line1 |= GBREG->getPixel(0, h - 1) << 1;
564 line2 = 0; 568 line2 = 0;
565 for (FX_DWORD w = 0; w < GBW; w++) { 569 for (FX_DWORD w = 0; w < GBW; w++) {
566 if (USESKIP && SKIP->getPixel(w, h)) { 570 if (USESKIP && SKIP->getPixel(w, h)) {
567 bVal = 0; 571 bVal = 0;
568 } else { 572 } else {
569 CONTEXT = line2; 573 CONTEXT = line2;
570 CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4; 574 CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
571 CONTEXT |= line1 << 5; 575 CONTEXT |= line1 << 5;
572 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]); 576 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
573 } 577 }
574 if (bVal) { 578 if (bVal) {
575 GBREG->setPixel(w, h, bVal); 579 GBREG->setPixel(w, h, bVal);
576 } 580 }
577 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x1f; 581 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x1f;
578 line2 = ((line2 << 1) | bVal) & 0x0f; 582 line2 = ((line2 << 1) | bVal) & 0x0f;
579 } 583 }
580 } 584 }
581 } 585 }
582 return GBREG; 586 return GBREG.release();
583 } 587 }
588
584 CJBig2_Image* CJBig2_GRRDProc::decode(CJBig2_ArithDecoder* pArithDecoder, 589 CJBig2_Image* CJBig2_GRRDProc::decode(CJBig2_ArithDecoder* pArithDecoder,
585 JBig2ArithCtx* grContext) { 590 JBig2ArithCtx* grContext) {
586 if (GRW == 0 || GRH == 0) { 591 if (GRW == 0 || GRH == 0) {
587 return new CJBig2_Image(GRW, GRH); 592 return new CJBig2_Image(GRW, GRH);
588 } 593 }
589 if (GRTEMPLATE == 0) { 594 if (GRTEMPLATE == 0) {
590 if ((GRAT[0] == (int8_t)-1) && (GRAT[1] == (int8_t)-1) && 595 if ((GRAT[0] == (int8_t)-1) && (GRAT[1] == (int8_t)-1) &&
591 (GRAT[2] == (int8_t)-1) && (GRAT[3] == (int8_t)-1) && 596 (GRAT[2] == (int8_t)-1) && (GRAT[3] == (int8_t)-1) &&
592 (GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) { 597 (GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) {
593 return decode_Template0_opt(pArithDecoder, grContext); 598 return decode_Template0_opt(pArithDecoder, grContext);
594 } else { 599 } else {
595 return decode_Template0_unopt(pArithDecoder, grContext); 600 return decode_Template0_unopt(pArithDecoder, grContext);
596 } 601 }
597 } else { 602 } else {
598 if ((GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) { 603 if ((GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) {
599 return decode_Template1_opt(pArithDecoder, grContext); 604 return decode_Template1_opt(pArithDecoder, grContext);
600 } else { 605 } else {
601 return decode_Template1_unopt(pArithDecoder, grContext); 606 return decode_Template1_unopt(pArithDecoder, grContext);
602 } 607 }
603 } 608 }
604 } 609 }
610
605 CJBig2_Image* CJBig2_GRRDProc::decode_Template0_unopt( 611 CJBig2_Image* CJBig2_GRRDProc::decode_Template0_unopt(
606 CJBig2_ArithDecoder* pArithDecoder, 612 CJBig2_ArithDecoder* pArithDecoder,
607 JBig2ArithCtx* grContext) { 613 JBig2ArithCtx* grContext) {
608 FX_BOOL LTP, SLTP, bVal; 614 FX_BOOL LTP, SLTP, bVal;
609 FX_DWORD CONTEXT; 615 FX_DWORD CONTEXT;
610 FX_DWORD line1, line2, line3, line4, line5; 616 FX_DWORD line1, line2, line3, line4, line5;
611 LTP = 0; 617 LTP = 0;
612 CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); 618 nonstd::unique_ptr<CJBig2_Image> GRREG(new CJBig2_Image(GRW, GRH));
613 GRREG->fill(0); 619 GRREG->fill(0);
614 for (FX_DWORD h = 0; h < GRH; h++) { 620 for (FX_DWORD h = 0; h < GRH; h++) {
615 if (TPGRON) { 621 if (TPGRON) {
616 SLTP = pArithDecoder->DECODE(&grContext[0x0010]); 622 SLTP = pArithDecoder->DECODE(&grContext[0x0010]);
617 LTP = LTP ^ SLTP; 623 LTP = LTP ^ SLTP;
618 } 624 }
619 if (LTP == 0) { 625 if (LTP == 0) {
620 line1 = GRREG->getPixel(1, h - 1); 626 line1 = GRREG->getPixel(1, h - 1);
621 line1 |= GRREG->getPixel(0, h - 1) << 1; 627 line1 |= GRREG->getPixel(0, h - 1) << 1;
622 line2 = 0; 628 line2 = 0;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 ((line4 << 1) | 713 ((line4 << 1) |
708 GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) & 714 GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) &
709 0x07; 715 0x07;
710 line5 = ((line5 << 1) | 716 line5 = ((line5 << 1) |
711 GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, 717 GRREFERENCE->getPixel(w - GRREFERENCEDX + 2,
712 h - GRREFERENCEDY + 1)) & 718 h - GRREFERENCEDY + 1)) &
713 0x07; 719 0x07;
714 } 720 }
715 } 721 }
716 } 722 }
717 return GRREG; 723 return GRREG.release();
718 } 724 }
725
719 CJBig2_Image* CJBig2_GRRDProc::decode_Template0_opt( 726 CJBig2_Image* CJBig2_GRRDProc::decode_Template0_opt(
720 CJBig2_ArithDecoder* pArithDecoder, 727 CJBig2_ArithDecoder* pArithDecoder,
721 JBig2ArithCtx* grContext) { 728 JBig2ArithCtx* grContext) {
722 if (!GRREFERENCE->m_pData) 729 if (!GRREFERENCE->m_pData)
723 return nullptr; 730 return nullptr;
724 731
725 FX_BOOL LTP, SLTP, bVal; 732 FX_BOOL LTP, SLTP, bVal;
726 FX_DWORD CONTEXT; 733 FX_DWORD CONTEXT;
727 FX_DWORD line1, line1_r, line2_r, line3_r; 734 FX_DWORD line1, line1_r, line2_r, line3_r;
728 uint8_t *pLine, *pLineR, cVal; 735 uint8_t *pLine, *pLineR, cVal;
729 intptr_t nStride, nStrideR, nOffset; 736 intptr_t nStride, nStrideR, nOffset;
730 int32_t k, nBits; 737 int32_t k, nBits;
731 int32_t GRWR, GRHR; 738 int32_t GRWR, GRHR;
732 int32_t GRW, GRH; 739 int32_t GRW, GRH;
733 GRW = (int32_t)CJBig2_GRRDProc::GRW; 740 GRW = (int32_t)CJBig2_GRRDProc::GRW;
734 GRH = (int32_t)CJBig2_GRRDProc::GRH; 741 GRH = (int32_t)CJBig2_GRRDProc::GRH;
735 LTP = 0; 742 LTP = 0;
736 CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); 743 nonstd::unique_ptr<CJBig2_Image> GRREG(new CJBig2_Image(GRW, GRH));
737 if (GRREG->m_pData == NULL) { 744 if (GRREG->m_pData == NULL) {
738 delete GRREG;
739 return NULL; 745 return NULL;
740 } 746 }
741 pLine = GRREG->m_pData; 747 pLine = GRREG->m_pData;
742 pLineR = GRREFERENCE->m_pData; 748 pLineR = GRREFERENCE->m_pData;
743 nStride = GRREG->m_nStride; 749 nStride = GRREG->m_nStride;
744 nStrideR = GRREFERENCE->m_nStride; 750 nStrideR = GRREFERENCE->m_nStride;
745 GRWR = (int32_t)GRREFERENCE->m_nWidth; 751 GRWR = (int32_t)GRREFERENCE->m_nWidth;
746 GRHR = (int32_t)GRREFERENCE->m_nHeight; 752 GRHR = (int32_t)GRREFERENCE->m_nHeight;
747 if (GRREFERENCEDY < -GRHR + 1 || GRREFERENCEDY > GRHR - 1) { 753 if (GRREFERENCEDY < -GRHR + 1 || GRREFERENCEDY > GRHR - 1) {
748 GRREFERENCEDY = 0; 754 GRREFERENCEDY = 0;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 ((line3_r >> (13 - k)) & 0x0001); 850 ((line3_r >> (13 - k)) & 0x0001);
845 } 851 }
846 pLine[w >> 3] = cVal; 852 pLine[w >> 3] = cVal;
847 } 853 }
848 } 854 }
849 pLine += nStride; 855 pLine += nStride;
850 if (h < GRHR + GRREFERENCEDY) { 856 if (h < GRHR + GRREFERENCEDY) {
851 pLineR += nStrideR; 857 pLineR += nStrideR;
852 } 858 }
853 } 859 }
854 return GRREG; 860 return GRREG.release();
855 } 861 }
862
856 CJBig2_Image* CJBig2_GRRDProc::decode_Template1_unopt( 863 CJBig2_Image* CJBig2_GRRDProc::decode_Template1_unopt(
857 CJBig2_ArithDecoder* pArithDecoder, 864 CJBig2_ArithDecoder* pArithDecoder,
858 JBig2ArithCtx* grContext) { 865 JBig2ArithCtx* grContext) {
859 FX_BOOL LTP, SLTP, bVal; 866 FX_BOOL LTP, SLTP, bVal;
860 FX_DWORD CONTEXT; 867 FX_DWORD CONTEXT;
861 FX_DWORD line1, line2, line3, line4, line5; 868 FX_DWORD line1, line2, line3, line4, line5;
862 LTP = 0; 869 LTP = 0;
863 CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); 870 nonstd::unique_ptr<CJBig2_Image> GRREG(new CJBig2_Image(GRW, GRH));
864 GRREG->fill(0); 871 GRREG->fill(0);
865 for (FX_DWORD h = 0; h < GRH; h++) { 872 for (FX_DWORD h = 0; h < GRH; h++) {
866 if (TPGRON) { 873 if (TPGRON) {
867 SLTP = pArithDecoder->DECODE(&grContext[0x0008]); 874 SLTP = pArithDecoder->DECODE(&grContext[0x0008]);
868 LTP = LTP ^ SLTP; 875 LTP = LTP ^ SLTP;
869 } 876 }
870 if (LTP == 0) { 877 if (LTP == 0) {
871 line1 = GRREG->getPixel(1, h - 1); 878 line1 = GRREG->getPixel(1, h - 1);
872 line1 |= GRREG->getPixel(0, h - 1) << 1; 879 line1 |= GRREG->getPixel(0, h - 1) << 1;
873 line1 |= GRREG->getPixel(-1, h - 1) << 2; 880 line1 |= GRREG->getPixel(-1, h - 1) << 2;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 ((line4 << 1) | 951 ((line4 << 1) |
945 GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) & 952 GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) &
946 0x07; 953 0x07;
947 line5 = ((line5 << 1) | 954 line5 = ((line5 << 1) |
948 GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, 955 GRREFERENCE->getPixel(w - GRREFERENCEDX + 2,
949 h - GRREFERENCEDY + 1)) & 956 h - GRREFERENCEDY + 1)) &
950 0x03; 957 0x03;
951 } 958 }
952 } 959 }
953 } 960 }
954 return GRREG; 961 return GRREG.release();
955 } 962 }
963
956 CJBig2_Image* CJBig2_GRRDProc::decode_Template1_opt( 964 CJBig2_Image* CJBig2_GRRDProc::decode_Template1_opt(
957 CJBig2_ArithDecoder* pArithDecoder, 965 CJBig2_ArithDecoder* pArithDecoder,
958 JBig2ArithCtx* grContext) { 966 JBig2ArithCtx* grContext) {
959 if (!GRREFERENCE->m_pData) 967 if (!GRREFERENCE->m_pData)
960 return nullptr; 968 return nullptr;
961 969
962 FX_BOOL LTP, SLTP, bVal; 970 FX_BOOL LTP, SLTP, bVal;
963 FX_DWORD CONTEXT; 971 FX_DWORD CONTEXT;
964 FX_DWORD line1, line1_r, line2_r, line3_r; 972 FX_DWORD line1, line1_r, line2_r, line3_r;
965 uint8_t *pLine, *pLineR, cVal; 973 uint8_t *pLine, *pLineR, cVal;
966 intptr_t nStride, nStrideR, nOffset; 974 intptr_t nStride, nStrideR, nOffset;
967 int32_t k, nBits; 975 int32_t k, nBits;
968 int32_t GRWR, GRHR; 976 int32_t GRWR, GRHR;
969 int32_t GRW, GRH; 977 int32_t GRW, GRH;
970 GRW = (int32_t)CJBig2_GRRDProc::GRW; 978 GRW = (int32_t)CJBig2_GRRDProc::GRW;
971 GRH = (int32_t)CJBig2_GRRDProc::GRH; 979 GRH = (int32_t)CJBig2_GRRDProc::GRH;
972 LTP = 0; 980 LTP = 0;
973 CJBig2_Image* GRREG = new CJBig2_Image(GRW, GRH); 981 nonstd::unique_ptr<CJBig2_Image> GRREG(new CJBig2_Image(GRW, GRH));
974 if (GRREG->m_pData == NULL) { 982 if (GRREG->m_pData == NULL) {
975 delete GRREG;
976 return NULL; 983 return NULL;
977 } 984 }
978 pLine = GRREG->m_pData; 985 pLine = GRREG->m_pData;
979 pLineR = GRREFERENCE->m_pData; 986 pLineR = GRREFERENCE->m_pData;
980 nStride = GRREG->m_nStride; 987 nStride = GRREG->m_nStride;
981 nStrideR = GRREFERENCE->m_nStride; 988 nStrideR = GRREFERENCE->m_nStride;
982 GRWR = (int32_t)GRREFERENCE->m_nWidth; 989 GRWR = (int32_t)GRREFERENCE->m_nWidth;
983 GRHR = (int32_t)GRREFERENCE->m_nHeight; 990 GRHR = (int32_t)GRREFERENCE->m_nHeight;
984 if (GRREFERENCEDY < -GRHR + 1 || GRREFERENCEDY > GRHR - 1) { 991 if (GRREFERENCEDY < -GRHR + 1 || GRREFERENCEDY > GRHR - 1) {
985 GRREFERENCEDY = 0; 992 GRREFERENCEDY = 0;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1075 ((line3_r >> (13 - k)) & 0x0001); 1082 ((line3_r >> (13 - k)) & 0x0001);
1076 } 1083 }
1077 pLine[w >> 3] = cVal; 1084 pLine[w >> 3] = cVal;
1078 } 1085 }
1079 } 1086 }
1080 pLine += nStride; 1087 pLine += nStride;
1081 if (h < GRHR + GRREFERENCEDY) { 1088 if (h < GRHR + GRREFERENCEDY) {
1082 pLineR += nStrideR; 1089 pLineR += nStrideR;
1083 } 1090 }
1084 } 1091 }
1085 return GRREG; 1092 return GRREG.release();
1086 } 1093 }
1087 1094
1088 CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, 1095 CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream,
1089 JBig2ArithCtx* grContext) { 1096 JBig2ArithCtx* grContext) {
1090 int32_t STRIPT, FIRSTS; 1097 int32_t STRIPT, FIRSTS;
1091 FX_DWORD NINSTANCES; 1098 FX_DWORD NINSTANCES;
1092 int32_t DT, DFS, CURS; 1099 int32_t DT, DFS, CURS;
1093 uint8_t CURT; 1100 uint8_t CURT;
1094 int32_t SI, TI; 1101 int32_t SI, TI;
1095 FX_DWORD IDI; 1102 FX_DWORD IDI;
1096 CJBig2_Image* IBI; 1103 CJBig2_Image* IBI;
1097 FX_DWORD WI, HI; 1104 FX_DWORD WI, HI;
1098 int32_t IDS; 1105 int32_t IDS;
1099 FX_BOOL RI; 1106 FX_BOOL RI;
1100 int32_t RDWI, RDHI, RDXI, RDYI; 1107 int32_t RDWI, RDHI, RDXI, RDYI;
1101 CJBig2_Image* IBOI; 1108 CJBig2_Image* IBOI;
1102 FX_DWORD WOI, HOI; 1109 FX_DWORD WOI, HOI;
1103 FX_BOOL bFirst; 1110 FX_BOOL bFirst;
1104 FX_DWORD nTmp; 1111 FX_DWORD nTmp;
1105 int32_t nVal, nBits; 1112 int32_t nVal, nBits;
1106 CJBig2_GRRDProc* pGRRD; 1113 nonstd::unique_ptr<CJBig2_HuffmanDecoder> pHuffmanDecoder(
1107 CJBig2_ArithDecoder* pArithDecoder; 1114 new CJBig2_HuffmanDecoder(pStream));
1108 CJBig2_HuffmanDecoder* pHuffmanDecoder = new CJBig2_HuffmanDecoder(pStream); 1115 nonstd::unique_ptr<CJBig2_Image> SBREG(new CJBig2_Image(SBW, SBH));
1109 CJBig2_Image* SBREG = new CJBig2_Image(SBW, SBH);
1110 SBREG->fill(SBDEFPIXEL); 1116 SBREG->fill(SBDEFPIXEL);
1111 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0) { 1117 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0)
1112 goto failed; 1118 return nullptr;
1113 } 1119
1114 STRIPT *= SBSTRIPS; 1120 STRIPT *= SBSTRIPS;
1115 STRIPT = -STRIPT; 1121 STRIPT = -STRIPT;
1116 FIRSTS = 0; 1122 FIRSTS = 0;
1117 NINSTANCES = 0; 1123 NINSTANCES = 0;
1118 while (NINSTANCES < SBNUMINSTANCES) { 1124 while (NINSTANCES < SBNUMINSTANCES) {
1119 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0) { 1125 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0)
1120 goto failed; 1126 return nullptr;
1121 } 1127
1122 DT *= SBSTRIPS; 1128 DT *= SBSTRIPS;
1123 STRIPT = STRIPT + DT; 1129 STRIPT = STRIPT + DT;
1124 bFirst = TRUE; 1130 bFirst = TRUE;
1125 for (;;) { 1131 for (;;) {
1126 if (bFirst) { 1132 if (bFirst) {
1127 if (pHuffmanDecoder->decodeAValue(SBHUFFFS, &DFS) != 0) { 1133 if (pHuffmanDecoder->decodeAValue(SBHUFFFS, &DFS) != 0)
1128 goto failed; 1134 return nullptr;
1129 } 1135
1130 FIRSTS = FIRSTS + DFS; 1136 FIRSTS = FIRSTS + DFS;
1131 CURS = FIRSTS; 1137 CURS = FIRSTS;
1132 bFirst = FALSE; 1138 bFirst = FALSE;
1133 } else { 1139 } else {
1134 nVal = pHuffmanDecoder->decodeAValue(SBHUFFDS, &IDS); 1140 nVal = pHuffmanDecoder->decodeAValue(SBHUFFDS, &IDS);
1135 if (nVal == JBIG2_OOB) { 1141 if (nVal == JBIG2_OOB) {
1136 break; 1142 break;
1137 } else if (nVal != 0) { 1143 } else if (nVal != 0) {
1138 goto failed; 1144 return nullptr;
1139 } else { 1145 } else {
1140 CURS = CURS + IDS + SBDSOFFSET; 1146 CURS = CURS + IDS + SBDSOFFSET;
1141 } 1147 }
1142 } 1148 }
1143 if (SBSTRIPS == 1) { 1149 if (SBSTRIPS == 1) {
1144 CURT = 0; 1150 CURT = 0;
1145 } else { 1151 } else {
1146 nTmp = 1; 1152 nTmp = 1;
1147 while ((FX_DWORD)(1 << nTmp) < SBSTRIPS) { 1153 while ((FX_DWORD)(1 << nTmp) < SBSTRIPS) {
1148 nTmp++; 1154 nTmp++;
1149 } 1155 }
1150 if (pStream->readNBits(nTmp, &nVal) != 0) { 1156 if (pStream->readNBits(nTmp, &nVal) != 0)
1151 goto failed; 1157 return nullptr;
1152 } 1158
1153 CURT = nVal; 1159 CURT = nVal;
1154 } 1160 }
1155 TI = STRIPT + CURT; 1161 TI = STRIPT + CURT;
1156 nVal = 0; 1162 nVal = 0;
1157 nBits = 0; 1163 nBits = 0;
1158 for (;;) { 1164 for (;;) {
1159 if (pStream->read1Bit(&nTmp) != 0) { 1165 if (pStream->read1Bit(&nTmp) != 0)
1160 goto failed; 1166 return nullptr;
1161 } 1167
1162 nVal = (nVal << 1) | nTmp; 1168 nVal = (nVal << 1) | nTmp;
1163 nBits++; 1169 nBits++;
1164 for (IDI = 0; IDI < SBNUMSYMS; IDI++) { 1170 for (IDI = 0; IDI < SBNUMSYMS; IDI++) {
1165 if ((nBits == SBSYMCODES[IDI].codelen) && 1171 if ((nBits == SBSYMCODES[IDI].codelen) &&
1166 (nVal == SBSYMCODES[IDI].code)) { 1172 (nVal == SBSYMCODES[IDI].code)) {
1167 break; 1173 break;
1168 } 1174 }
1169 } 1175 }
1170 if (IDI < SBNUMSYMS) { 1176 if (IDI < SBNUMSYMS) {
1171 break; 1177 break;
1172 } 1178 }
1173 } 1179 }
1174 if (SBREFINE == 0) { 1180 if (SBREFINE == 0) {
1175 RI = 0; 1181 RI = 0;
1176 } else { 1182 } else {
1177 if (pStream->read1Bit(&RI) != 0) { 1183 if (pStream->read1Bit(&RI) != 0) {
1178 goto failed; 1184 return nullptr;
1179 } 1185 }
1180 } 1186 }
1181 if (RI == 0) { 1187 if (RI == 0) {
1182 IBI = SBSYMS[IDI]; 1188 IBI = SBSYMS[IDI];
1183 } else { 1189 } else {
1184 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDW, &RDWI) != 0) || 1190 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDW, &RDWI) != 0) ||
1185 (pHuffmanDecoder->decodeAValue(SBHUFFRDH, &RDHI) != 0) || 1191 (pHuffmanDecoder->decodeAValue(SBHUFFRDH, &RDHI) != 0) ||
1186 (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) || 1192 (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) ||
1187 (pHuffmanDecoder->decodeAValue(SBHUFFRDY, &RDYI) != 0) || 1193 (pHuffmanDecoder->decodeAValue(SBHUFFRDY, &RDYI) != 0) ||
1188 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) { 1194 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) {
1189 goto failed; 1195 return nullptr;
1190 } 1196 }
1191 pStream->alignByte(); 1197 pStream->alignByte();
1192 nTmp = pStream->getOffset(); 1198 nTmp = pStream->getOffset();
1193 IBOI = SBSYMS[IDI]; 1199 IBOI = SBSYMS[IDI];
1194 if (!IBOI) { 1200 if (!IBOI)
1195 goto failed; 1201 return nullptr;
1196 } 1202
1197 WOI = IBOI->m_nWidth; 1203 WOI = IBOI->m_nWidth;
1198 HOI = IBOI->m_nHeight; 1204 HOI = IBOI->m_nHeight;
1199 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) { 1205 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0)
1200 goto failed; 1206 return nullptr;
1201 } 1207
1202 pGRRD = new CJBig2_GRRDProc(); 1208 nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc());
1203 pGRRD->GRW = WOI + RDWI; 1209 pGRRD->GRW = WOI + RDWI;
1204 pGRRD->GRH = HOI + RDHI; 1210 pGRRD->GRH = HOI + RDHI;
1205 pGRRD->GRTEMPLATE = SBRTEMPLATE; 1211 pGRRD->GRTEMPLATE = SBRTEMPLATE;
1206 pGRRD->GRREFERENCE = IBOI; 1212 pGRRD->GRREFERENCE = IBOI;
1207 pGRRD->GRREFERENCEDX = (RDWI >> 2) + RDXI; 1213 pGRRD->GRREFERENCEDX = (RDWI >> 2) + RDXI;
1208 pGRRD->GRREFERENCEDY = (RDHI >> 2) + RDYI; 1214 pGRRD->GRREFERENCEDY = (RDHI >> 2) + RDYI;
1209 pGRRD->TPGRON = 0; 1215 pGRRD->TPGRON = 0;
1210 pGRRD->GRAT[0] = SBRAT[0]; 1216 pGRRD->GRAT[0] = SBRAT[0];
1211 pGRRD->GRAT[1] = SBRAT[1]; 1217 pGRRD->GRAT[1] = SBRAT[1];
1212 pGRRD->GRAT[2] = SBRAT[2]; 1218 pGRRD->GRAT[2] = SBRAT[2];
1213 pGRRD->GRAT[3] = SBRAT[3]; 1219 pGRRD->GRAT[3] = SBRAT[3];
1214 pArithDecoder = new CJBig2_ArithDecoder(pStream); 1220 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.
1215 IBI = pGRRD->decode(pArithDecoder, grContext); 1221 new CJBig2_ArithDecoder(pStream));
1216 if (IBI == NULL) { 1222 IBI = pGRRD->decode(pArithDecoder.get(), grContext);
1217 delete pGRRD; 1223 if (IBI == NULL)
1218 delete pArithDecoder; 1224 return nullptr;
1219 goto failed; 1225
1220 }
1221 delete pArithDecoder;
1222 pStream->alignByte(); 1226 pStream->alignByte();
1223 pStream->offset(2); 1227 pStream->offset(2);
1224 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) { 1228 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) {
1225 delete IBI; 1229 delete IBI;
1226 delete pGRRD; 1230 return nullptr;
1227 goto failed;
1228 } 1231 }
1229 delete pGRRD;
1230 } 1232 }
1231 if (!IBI) { 1233 if (!IBI) {
1232 continue; 1234 continue;
1233 } 1235 }
1234 WI = IBI->m_nWidth; 1236 WI = IBI->m_nWidth;
1235 HI = IBI->m_nHeight; 1237 HI = IBI->m_nHeight;
1236 if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT) || 1238 if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT) ||
1237 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) { 1239 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
1238 CURS = CURS + WI - 1; 1240 CURS = CURS + WI - 1;
1239 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT) || 1241 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT) ||
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) || 1280 if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) ||
1279 (REFCORNER == JBIG2_CORNER_BOTTOMLEFT))) { 1281 (REFCORNER == JBIG2_CORNER_BOTTOMLEFT))) {
1280 CURS = CURS + WI - 1; 1282 CURS = CURS + WI - 1;
1281 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) || 1283 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) ||
1282 (REFCORNER == JBIG2_CORNER_TOPRIGHT))) { 1284 (REFCORNER == JBIG2_CORNER_TOPRIGHT))) {
1283 CURS = CURS + HI - 1; 1285 CURS = CURS + HI - 1;
1284 } 1286 }
1285 NINSTANCES = NINSTANCES + 1; 1287 NINSTANCES = NINSTANCES + 1;
1286 } 1288 }
1287 } 1289 }
1288 delete pHuffmanDecoder; 1290 return SBREG.release();
1289 return SBREG;
1290 failed:
1291 delete pHuffmanDecoder;
1292 delete SBREG;
1293 return NULL;
1294 } 1291 }
1292
1295 CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, 1293 CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
1296 JBig2ArithCtx* grContext, 1294 JBig2ArithCtx* grContext,
1297 JBig2IntDecoderState* pIDS) { 1295 JBig2IntDecoderState* pIDS) {
1298 int32_t STRIPT, FIRSTS; 1296 int32_t STRIPT, FIRSTS;
1299 FX_DWORD NINSTANCES; 1297 FX_DWORD NINSTANCES;
1300 int32_t DT, DFS, CURS; 1298 int32_t DT, DFS, CURS;
1301 int32_t CURT; 1299 int32_t CURT;
1302 int32_t SI, TI; 1300 int32_t SI, TI;
1303 FX_DWORD IDI; 1301 FX_DWORD IDI;
1304 CJBig2_Image* IBI; 1302 CJBig2_Image* IBI;
1305 FX_DWORD WI, HI; 1303 FX_DWORD WI, HI;
1306 int32_t IDS; 1304 int32_t IDS;
1307 int RI; 1305 int RI;
1308 int32_t RDWI, RDHI, RDXI, RDYI; 1306 int32_t RDWI, RDHI, RDXI, RDYI;
1309 CJBig2_Image* IBOI; 1307 CJBig2_Image* IBOI;
1310 FX_DWORD WOI, HOI; 1308 FX_DWORD WOI, HOI;
1311 CJBig2_Image* SBREG;
1312 FX_BOOL bFirst; 1309 FX_BOOL bFirst;
1313 int32_t nRet, nVal; 1310 int32_t nRet, nVal;
1314 int32_t bRetained; 1311 int32_t bRetained;
1315 CJBig2_ArithIntDecoder *IADT, *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH, 1312 CJBig2_ArithIntDecoder *IADT, *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH,
1316 *IARDX, *IARDY; 1313 *IARDX, *IARDY;
1317 CJBig2_ArithIaidDecoder* IAID; 1314 CJBig2_ArithIaidDecoder* IAID;
1318 CJBig2_GRRDProc* pGRRD;
1319 if (pIDS) { 1315 if (pIDS) {
1320 IADT = pIDS->IADT; 1316 IADT = pIDS->IADT;
1321 IAFS = pIDS->IAFS; 1317 IAFS = pIDS->IAFS;
1322 IADS = pIDS->IADS; 1318 IADS = pIDS->IADS;
1323 IAIT = pIDS->IAIT; 1319 IAIT = pIDS->IAIT;
1324 IARI = pIDS->IARI; 1320 IARI = pIDS->IARI;
1325 IARDW = pIDS->IARDW; 1321 IARDW = pIDS->IARDW;
1326 IARDH = pIDS->IARDH; 1322 IARDH = pIDS->IARDH;
1327 IARDX = pIDS->IARDX; 1323 IARDX = pIDS->IARDX;
1328 IARDY = pIDS->IARDY; 1324 IARDY = pIDS->IARDY;
1329 IAID = pIDS->IAID; 1325 IAID = pIDS->IAID;
1330 bRetained = TRUE; 1326 bRetained = TRUE;
1331 } else { 1327 } else {
1332 IADT = new CJBig2_ArithIntDecoder(); 1328 IADT = new CJBig2_ArithIntDecoder();
1333 IAFS = new CJBig2_ArithIntDecoder(); 1329 IAFS = new CJBig2_ArithIntDecoder();
1334 IADS = new CJBig2_ArithIntDecoder(); 1330 IADS = new CJBig2_ArithIntDecoder();
1335 IAIT = new CJBig2_ArithIntDecoder(); 1331 IAIT = new CJBig2_ArithIntDecoder();
1336 IARI = new CJBig2_ArithIntDecoder(); 1332 IARI = new CJBig2_ArithIntDecoder();
1337 IARDW = new CJBig2_ArithIntDecoder(); 1333 IARDW = new CJBig2_ArithIntDecoder();
1338 IARDH = new CJBig2_ArithIntDecoder(); 1334 IARDH = new CJBig2_ArithIntDecoder();
1339 IARDX = new CJBig2_ArithIntDecoder(); 1335 IARDX = new CJBig2_ArithIntDecoder();
1340 IARDY = new CJBig2_ArithIntDecoder(); 1336 IARDY = new CJBig2_ArithIntDecoder();
1341 IAID = new CJBig2_ArithIaidDecoder(SBSYMCODELEN); 1337 IAID = new CJBig2_ArithIaidDecoder(SBSYMCODELEN);
1342 bRetained = FALSE; 1338 bRetained = FALSE;
1343 } 1339 }
1344 SBREG = new CJBig2_Image(SBW, SBH); 1340 nonstd::unique_ptr<CJBig2_Image> SBREG(new CJBig2_Image(SBW, SBH));
1345 SBREG->fill(SBDEFPIXEL); 1341 SBREG->fill(SBDEFPIXEL);
1346 if (IADT->decode(pArithDecoder, &STRIPT) == -1) { 1342 if (IADT->decode(pArithDecoder, &STRIPT) == -1) {
1347 goto failed; 1343 goto failed;
1348 } 1344 }
1349 STRIPT *= SBSTRIPS; 1345 STRIPT *= SBSTRIPS;
1350 STRIPT = -STRIPT; 1346 STRIPT = -STRIPT;
1351 FIRSTS = 0; 1347 FIRSTS = 0;
1352 NINSTANCES = 0; 1348 NINSTANCES = 0;
1353 while (NINSTANCES < SBNUMINSTANCES) { 1349 while (NINSTANCES < SBNUMINSTANCES) {
1354 if (IADT->decode(pArithDecoder, &DT) == -1) { 1350 if (IADT->decode(pArithDecoder, &DT) == -1) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 (IARDX->decode(pArithDecoder, &RDXI) == -1) || 1408 (IARDX->decode(pArithDecoder, &RDXI) == -1) ||
1413 (IARDY->decode(pArithDecoder, &RDYI) == -1)) { 1409 (IARDY->decode(pArithDecoder, &RDYI) == -1)) {
1414 goto failed; 1410 goto failed;
1415 } 1411 }
1416 IBOI = SBSYMS[IDI]; 1412 IBOI = SBSYMS[IDI];
1417 WOI = IBOI->m_nWidth; 1413 WOI = IBOI->m_nWidth;
1418 HOI = IBOI->m_nHeight; 1414 HOI = IBOI->m_nHeight;
1419 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) { 1415 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) {
1420 goto failed; 1416 goto failed;
1421 } 1417 }
1422 pGRRD = new CJBig2_GRRDProc(); 1418 nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc());
1423 pGRRD->GRW = WOI + RDWI; 1419 pGRRD->GRW = WOI + RDWI;
1424 pGRRD->GRH = HOI + RDHI; 1420 pGRRD->GRH = HOI + RDHI;
1425 pGRRD->GRTEMPLATE = SBRTEMPLATE; 1421 pGRRD->GRTEMPLATE = SBRTEMPLATE;
1426 pGRRD->GRREFERENCE = IBOI; 1422 pGRRD->GRREFERENCE = IBOI;
1427 pGRRD->GRREFERENCEDX = (RDWI >> 1) + RDXI; 1423 pGRRD->GRREFERENCEDX = (RDWI >> 1) + RDXI;
1428 pGRRD->GRREFERENCEDY = (RDHI >> 1) + RDYI; 1424 pGRRD->GRREFERENCEDY = (RDHI >> 1) + RDYI;
1429 pGRRD->TPGRON = 0; 1425 pGRRD->TPGRON = 0;
1430 pGRRD->GRAT[0] = SBRAT[0]; 1426 pGRRD->GRAT[0] = SBRAT[0];
1431 pGRRD->GRAT[1] = SBRAT[1]; 1427 pGRRD->GRAT[1] = SBRAT[1];
1432 pGRRD->GRAT[2] = SBRAT[2]; 1428 pGRRD->GRAT[2] = SBRAT[2];
1433 pGRRD->GRAT[3] = SBRAT[3]; 1429 pGRRD->GRAT[3] = SBRAT[3];
1434 IBI = pGRRD->decode(pArithDecoder, grContext); 1430 IBI = pGRRD->decode(pArithDecoder, grContext);
1435 if (IBI == NULL) { 1431 if (IBI == NULL)
1436 delete pGRRD;
1437 goto failed; 1432 goto failed;
1438 }
1439 delete pGRRD;
1440 } 1433 }
1441 WI = IBI->m_nWidth; 1434 WI = IBI->m_nWidth;
1442 HI = IBI->m_nHeight; 1435 HI = IBI->m_nHeight;
1443 if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT) || 1436 if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT) ||
1444 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) { 1437 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
1445 CURS = CURS + WI - 1; 1438 CURS = CURS + WI - 1;
1446 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT) || 1439 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT) ||
1447 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) { 1440 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
1448 CURS = CURS + HI - 1; 1441 CURS = CURS + HI - 1;
1449 } 1442 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 delete IAFS; 1490 delete IAFS;
1498 delete IADS; 1491 delete IADS;
1499 delete IAIT; 1492 delete IAIT;
1500 delete IARI; 1493 delete IARI;
1501 delete IARDW; 1494 delete IARDW;
1502 delete IARDH; 1495 delete IARDH;
1503 delete IARDX; 1496 delete IARDX;
1504 delete IARDY; 1497 delete IARDY;
1505 delete IAID; 1498 delete IAID;
1506 } 1499 }
1507 return SBREG; 1500 return SBREG.release();
1508 failed: 1501 failed:
1509 if (bRetained == FALSE) { 1502 if (bRetained == FALSE) {
1510 delete IADT; 1503 delete IADT;
1511 delete IAFS; 1504 delete IAFS;
1512 delete IADS; 1505 delete IADS;
1513 delete IAIT; 1506 delete IAIT;
1514 delete IARI; 1507 delete IARI;
1515 delete IARDW; 1508 delete IARDW;
1516 delete IARDH; 1509 delete IARDH;
1517 delete IARDX; 1510 delete IARDX;
1518 delete IARDY; 1511 delete IARDY;
1519 delete IAID; 1512 delete IAID;
1520 } 1513 }
1521 delete SBREG;
1522 return NULL; 1514 return NULL;
1523 } 1515 }
1516
1524 CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( 1517 CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith(
1525 CJBig2_ArithDecoder* pArithDecoder, 1518 CJBig2_ArithDecoder* pArithDecoder,
1526 JBig2ArithCtx* gbContext, 1519 JBig2ArithCtx* gbContext,
1527 JBig2ArithCtx* grContext) { 1520 JBig2ArithCtx* grContext) {
1528 CJBig2_Image** SDNEWSYMS; 1521 CJBig2_Image** SDNEWSYMS;
1529 FX_DWORD HCHEIGHT, NSYMSDECODED; 1522 FX_DWORD HCHEIGHT, NSYMSDECODED;
1530 int32_t HCDH; 1523 int32_t HCDH;
1531 FX_DWORD SYMWIDTH, TOTWIDTH; 1524 FX_DWORD SYMWIDTH, TOTWIDTH;
1532 int32_t DW; 1525 int32_t DW;
1533 CJBig2_Image* BS; 1526 CJBig2_Image* BS;
1534 FX_DWORD I, J, REFAGGNINST; 1527 FX_DWORD I, J, REFAGGNINST;
1535 FX_BOOL* EXFLAGS; 1528 FX_BOOL* EXFLAGS;
1536 FX_DWORD EXINDEX; 1529 FX_DWORD EXINDEX;
1537 FX_BOOL CUREXFLAG; 1530 FX_BOOL CUREXFLAG;
1538 FX_DWORD EXRUNLENGTH; 1531 FX_DWORD EXRUNLENGTH;
1539 int32_t nVal; 1532 int32_t nVal;
1540 FX_DWORD nTmp; 1533 FX_DWORD nTmp;
1541 FX_DWORD SBNUMSYMS; 1534 FX_DWORD SBNUMSYMS;
1542 uint8_t SBSYMCODELEN; 1535 uint8_t SBSYMCODELEN;
1543 FX_DWORD IDI; 1536 FX_DWORD IDI;
1544 int32_t RDXI, RDYI; 1537 int32_t RDXI, RDYI;
1545 CJBig2_Image** SBSYMS; 1538 CJBig2_Image** SBSYMS;
1546 CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH,
1547 *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE;
1548 CJBig2_GRRDProc* pGRRD;
1549 CJBig2_GRDProc* pGRD;
1550 CJBig2_ArithIntDecoder *IADH, *IADW, *IAAI, *IARDX, *IARDY, *IAEX, *IADT, 1539 CJBig2_ArithIntDecoder *IADH, *IADW, *IAAI, *IARDX, *IARDY, *IAEX, *IADT,
1551 *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH; 1540 *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH;
1552 CJBig2_ArithIaidDecoder* IAID; 1541 CJBig2_ArithIaidDecoder* IAID;
1553 CJBig2_SymbolDict* pDict;
1554 IADH = new CJBig2_ArithIntDecoder(); 1542 IADH = new CJBig2_ArithIntDecoder();
1555 IADW = new CJBig2_ArithIntDecoder(); 1543 IADW = new CJBig2_ArithIntDecoder();
1556 IAAI = new CJBig2_ArithIntDecoder(); 1544 IAAI = new CJBig2_ArithIntDecoder();
1557 IARDX = new CJBig2_ArithIntDecoder(); 1545 IARDX = new CJBig2_ArithIntDecoder();
1558 IARDY = new CJBig2_ArithIntDecoder(); 1546 IARDY = new CJBig2_ArithIntDecoder();
1559 IAEX = new CJBig2_ArithIntDecoder(); 1547 IAEX = new CJBig2_ArithIntDecoder();
1560 IADT = new CJBig2_ArithIntDecoder(); 1548 IADT = new CJBig2_ArithIntDecoder();
1561 IAFS = new CJBig2_ArithIntDecoder(); 1549 IAFS = new CJBig2_ArithIntDecoder();
1562 IADS = new CJBig2_ArithIntDecoder(); 1550 IADS = new CJBig2_ArithIntDecoder();
1563 IAIT = new CJBig2_ArithIntDecoder(); 1551 IAIT = new CJBig2_ArithIntDecoder();
1564 IARI = new CJBig2_ArithIntDecoder(); 1552 IARI = new CJBig2_ArithIntDecoder();
1565 IARDW = new CJBig2_ArithIntDecoder(); 1553 IARDW = new CJBig2_ArithIntDecoder();
1566 IARDH = new CJBig2_ArithIntDecoder(); 1554 IARDH = new CJBig2_ArithIntDecoder();
1567 nTmp = 0; 1555 nTmp = 0;
1568 while ((FX_DWORD)(1 << nTmp) < (SDNUMINSYMS + SDNUMNEWSYMS)) { 1556 while ((FX_DWORD)(1 << nTmp) < (SDNUMINSYMS + SDNUMNEWSYMS)) {
1569 nTmp++; 1557 nTmp++;
1570 } 1558 }
1571 IAID = new CJBig2_ArithIaidDecoder((uint8_t)nTmp); 1559 IAID = new CJBig2_ArithIaidDecoder((uint8_t)nTmp);
1572 SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS); 1560 SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS);
1573 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); 1561 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*));
1562 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
1563
1574 HCHEIGHT = 0; 1564 HCHEIGHT = 0;
1575 NSYMSDECODED = 0; 1565 NSYMSDECODED = 0;
1576 while (NSYMSDECODED < SDNUMNEWSYMS) { 1566 while (NSYMSDECODED < SDNUMNEWSYMS) {
1577 BS = NULL; 1567 BS = NULL;
1578 if (IADH->decode(pArithDecoder, &HCDH) == -1) { 1568 if (IADH->decode(pArithDecoder, &HCDH) == -1) {
1579 goto failed; 1569 goto failed;
1580 } 1570 }
1581 HCHEIGHT = HCHEIGHT + HCDH; 1571 HCHEIGHT = HCHEIGHT + HCDH;
1582 if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) { 1572 if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) {
1583 goto failed; 1573 goto failed;
(...skipping 15 matching lines...) Expand all
1599 goto failed; 1589 goto failed;
1600 } else if (HCHEIGHT == 0 || SYMWIDTH == 0) { 1590 } else if (HCHEIGHT == 0 || SYMWIDTH == 0) {
1601 TOTWIDTH = TOTWIDTH + SYMWIDTH; 1591 TOTWIDTH = TOTWIDTH + SYMWIDTH;
1602 SDNEWSYMS[NSYMSDECODED] = NULL; 1592 SDNEWSYMS[NSYMSDECODED] = NULL;
1603 NSYMSDECODED = NSYMSDECODED + 1; 1593 NSYMSDECODED = NSYMSDECODED + 1;
1604 continue; 1594 continue;
1605 } 1595 }
1606 TOTWIDTH = TOTWIDTH + SYMWIDTH; 1596 TOTWIDTH = TOTWIDTH + SYMWIDTH;
1607 } 1597 }
1608 if (SDREFAGG == 0) { 1598 if (SDREFAGG == 0) {
1609 pGRD = new CJBig2_GRDProc(); 1599 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
1610 pGRD->MMR = 0; 1600 pGRD->MMR = 0;
1611 pGRD->GBW = SYMWIDTH; 1601 pGRD->GBW = SYMWIDTH;
1612 pGRD->GBH = HCHEIGHT; 1602 pGRD->GBH = HCHEIGHT;
1613 pGRD->GBTEMPLATE = SDTEMPLATE; 1603 pGRD->GBTEMPLATE = SDTEMPLATE;
1614 pGRD->TPGDON = 0; 1604 pGRD->TPGDON = 0;
1615 pGRD->USESKIP = 0; 1605 pGRD->USESKIP = 0;
1616 pGRD->GBAT[0] = SDAT[0]; 1606 pGRD->GBAT[0] = SDAT[0];
1617 pGRD->GBAT[1] = SDAT[1]; 1607 pGRD->GBAT[1] = SDAT[1];
1618 pGRD->GBAT[2] = SDAT[2]; 1608 pGRD->GBAT[2] = SDAT[2];
1619 pGRD->GBAT[3] = SDAT[3]; 1609 pGRD->GBAT[3] = SDAT[3];
1620 pGRD->GBAT[4] = SDAT[4]; 1610 pGRD->GBAT[4] = SDAT[4];
1621 pGRD->GBAT[5] = SDAT[5]; 1611 pGRD->GBAT[5] = SDAT[5];
1622 pGRD->GBAT[6] = SDAT[6]; 1612 pGRD->GBAT[6] = SDAT[6];
1623 pGRD->GBAT[7] = SDAT[7]; 1613 pGRD->GBAT[7] = SDAT[7];
1624 BS = pGRD->decode_Arith(pArithDecoder, gbContext); 1614 BS = pGRD->decode_Arith(pArithDecoder, gbContext);
1625 if (BS == NULL) { 1615 if (BS == NULL) {
1626 delete pGRD;
1627 goto failed; 1616 goto failed;
1628 } 1617 }
1629 delete pGRD;
1630 } else { 1618 } else {
1631 if (IAAI->decode(pArithDecoder, (int*)&REFAGGNINST) == -1) { 1619 if (IAAI->decode(pArithDecoder, (int*)&REFAGGNINST) == -1) {
1632 goto failed; 1620 goto failed;
1633 } 1621 }
1634 if (REFAGGNINST > 1) { 1622 if (REFAGGNINST > 1) {
1635 CJBig2_TRDProc* pDecoder; 1623 nonstd::unique_ptr<CJBig2_TRDProc> pDecoder(new CJBig2_TRDProc());
1636 pDecoder = new CJBig2_TRDProc();
1637 pDecoder->SBHUFF = SDHUFF; 1624 pDecoder->SBHUFF = SDHUFF;
1638 pDecoder->SBREFINE = 1; 1625 pDecoder->SBREFINE = 1;
1639 pDecoder->SBW = SYMWIDTH; 1626 pDecoder->SBW = SYMWIDTH;
1640 pDecoder->SBH = HCHEIGHT; 1627 pDecoder->SBH = HCHEIGHT;
1641 pDecoder->SBNUMINSTANCES = REFAGGNINST; 1628 pDecoder->SBNUMINSTANCES = REFAGGNINST;
1642 pDecoder->SBSTRIPS = 1; 1629 pDecoder->SBSTRIPS = 1;
1643 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; 1630 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
1644 SBNUMSYMS = pDecoder->SBNUMSYMS; 1631 SBNUMSYMS = pDecoder->SBNUMSYMS;
1645 nTmp = 0; 1632 nTmp = 0;
1646 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { 1633 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
1647 nTmp++; 1634 nTmp++;
1648 } 1635 }
1649 SBSYMCODELEN = (uint8_t)nTmp; 1636 SBSYMCODELEN = (uint8_t)nTmp;
1650 pDecoder->SBSYMCODELEN = SBSYMCODELEN; 1637 pDecoder->SBSYMCODELEN = SBSYMCODELEN;
1651 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); 1638 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS);
1652 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); 1639 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
1653 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, 1640 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
1654 NSYMSDECODED * sizeof(CJBig2_Image*)); 1641 NSYMSDECODED * sizeof(CJBig2_Image*));
1655 pDecoder->SBSYMS = SBSYMS; 1642 pDecoder->SBSYMS = SBSYMS;
1656 pDecoder->SBDEFPIXEL = 0; 1643 pDecoder->SBDEFPIXEL = 0;
1657 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR; 1644 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR;
1658 pDecoder->TRANSPOSED = 0; 1645 pDecoder->TRANSPOSED = 0;
1659 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; 1646 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT;
1660 pDecoder->SBDSOFFSET = 0; 1647 pDecoder->SBDSOFFSET = 0;
1661 SBHUFFFS = new CJBig2_HuffmanTable(HuffmanTable_B6, 1648 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFFS(
1662 FX_ArraySize(HuffmanTable_B6), 1649 new CJBig2_HuffmanTable(HuffmanTable_B6,
1663 HuffmanTable_HTOOB_B6); 1650 FX_ArraySize(HuffmanTable_B6),
1664 SBHUFFDS = new CJBig2_HuffmanTable(HuffmanTable_B8, 1651 HuffmanTable_HTOOB_B6));
1665 FX_ArraySize(HuffmanTable_B8), 1652 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDS(
1666 HuffmanTable_HTOOB_B8); 1653 new CJBig2_HuffmanTable(HuffmanTable_B8,
1667 SBHUFFDT = new CJBig2_HuffmanTable(HuffmanTable_B11, 1654 FX_ArraySize(HuffmanTable_B8),
1668 FX_ArraySize(HuffmanTable_B11), 1655 HuffmanTable_HTOOB_B8));
1669 HuffmanTable_HTOOB_B11); 1656 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDT(
1670 SBHUFFRDW = new CJBig2_HuffmanTable(HuffmanTable_B15, 1657 new CJBig2_HuffmanTable(HuffmanTable_B11,
1671 FX_ArraySize(HuffmanTable_B15), 1658 FX_ArraySize(HuffmanTable_B11),
1672 HuffmanTable_HTOOB_B15); 1659 HuffmanTable_HTOOB_B11));
1673 SBHUFFRDH = new CJBig2_HuffmanTable(HuffmanTable_B15, 1660 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDW(
1674 FX_ArraySize(HuffmanTable_B15), 1661 new CJBig2_HuffmanTable(HuffmanTable_B15,
1675 HuffmanTable_HTOOB_B15); 1662 FX_ArraySize(HuffmanTable_B15),
1676 SBHUFFRDX = new CJBig2_HuffmanTable(HuffmanTable_B15, 1663 HuffmanTable_HTOOB_B15));
1677 FX_ArraySize(HuffmanTable_B15), 1664 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDH(
1678 HuffmanTable_HTOOB_B15); 1665 new CJBig2_HuffmanTable(HuffmanTable_B15,
1679 SBHUFFRDY = new CJBig2_HuffmanTable(HuffmanTable_B15, 1666 FX_ArraySize(HuffmanTable_B15),
1680 FX_ArraySize(HuffmanTable_B15), 1667 HuffmanTable_HTOOB_B15));
1681 HuffmanTable_HTOOB_B15); 1668 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX(
1682 SBHUFFRSIZE = new CJBig2_HuffmanTable(HuffmanTable_B1, 1669 new CJBig2_HuffmanTable(HuffmanTable_B15,
1683 FX_ArraySize(HuffmanTable_B1), 1670 FX_ArraySize(HuffmanTable_B15),
1684 HuffmanTable_HTOOB_B1); 1671 HuffmanTable_HTOOB_B15));
1685 pDecoder->SBHUFFFS = SBHUFFFS; 1672 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDY(
1686 pDecoder->SBHUFFDS = SBHUFFDS; 1673 new CJBig2_HuffmanTable(HuffmanTable_B15,
1687 pDecoder->SBHUFFDT = SBHUFFDT; 1674 FX_ArraySize(HuffmanTable_B15),
1688 pDecoder->SBHUFFRDW = SBHUFFRDW; 1675 HuffmanTable_HTOOB_B15));
1689 pDecoder->SBHUFFRDH = SBHUFFRDH; 1676 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE(
1690 pDecoder->SBHUFFRDX = SBHUFFRDX; 1677 new CJBig2_HuffmanTable(HuffmanTable_B1,
1691 pDecoder->SBHUFFRDY = SBHUFFRDY; 1678 FX_ArraySize(HuffmanTable_B1),
1692 pDecoder->SBHUFFRSIZE = SBHUFFRSIZE; 1679 HuffmanTable_HTOOB_B1));
1680 pDecoder->SBHUFFFS = SBHUFFFS.get();
1681 pDecoder->SBHUFFDS = SBHUFFDS.get();
1682 pDecoder->SBHUFFDT = SBHUFFDT.get();
1683 pDecoder->SBHUFFRDW = SBHUFFRDW.get();
1684 pDecoder->SBHUFFRDH = SBHUFFRDH.get();
1685 pDecoder->SBHUFFRDX = SBHUFFRDX.get();
1686 pDecoder->SBHUFFRDY = SBHUFFRDY.get();
1687 pDecoder->SBHUFFRSIZE = SBHUFFRSIZE.get();
1693 pDecoder->SBRTEMPLATE = SDRTEMPLATE; 1688 pDecoder->SBRTEMPLATE = SDRTEMPLATE;
1694 pDecoder->SBRAT[0] = SDRAT[0]; 1689 pDecoder->SBRAT[0] = SDRAT[0];
1695 pDecoder->SBRAT[1] = SDRAT[1]; 1690 pDecoder->SBRAT[1] = SDRAT[1];
1696 pDecoder->SBRAT[2] = SDRAT[2]; 1691 pDecoder->SBRAT[2] = SDRAT[2];
1697 pDecoder->SBRAT[3] = SDRAT[3]; 1692 pDecoder->SBRAT[3] = SDRAT[3];
1698 JBig2IntDecoderState ids; 1693 JBig2IntDecoderState ids;
1699 ids.IADT = IADT; 1694 ids.IADT = IADT;
1700 ids.IAFS = IAFS; 1695 ids.IAFS = IAFS;
1701 ids.IADS = IADS; 1696 ids.IADS = IADS;
1702 ids.IAIT = IAIT; 1697 ids.IAIT = IAIT;
1703 ids.IARI = IARI; 1698 ids.IARI = IARI;
1704 ids.IARDW = IARDW; 1699 ids.IARDW = IARDW;
1705 ids.IARDH = IARDH; 1700 ids.IARDH = IARDH;
1706 ids.IARDX = IARDX; 1701 ids.IARDX = IARDX;
1707 ids.IARDY = IARDY; 1702 ids.IARDY = IARDY;
1708 ids.IAID = IAID; 1703 ids.IAID = IAID;
1709 BS = pDecoder->decode_Arith(pArithDecoder, grContext, &ids); 1704 BS = pDecoder->decode_Arith(pArithDecoder, grContext, &ids);
1710 if (BS == NULL) { 1705 if (BS == NULL) {
1711 FX_Free(SBSYMS); 1706 FX_Free(SBSYMS);
1712 delete SBHUFFFS;
1713 delete SBHUFFDS;
1714 delete SBHUFFDT;
1715 delete SBHUFFRDW;
1716 delete SBHUFFRDH;
1717 delete SBHUFFRDX;
1718 delete SBHUFFRDY;
1719 delete SBHUFFRSIZE;
1720 delete pDecoder;
1721 goto failed; 1707 goto failed;
1722 } 1708 }
1723 FX_Free(SBSYMS); 1709 FX_Free(SBSYMS);
1724 delete SBHUFFFS;
1725 delete SBHUFFDS;
1726 delete SBHUFFDT;
1727 delete SBHUFFRDW;
1728 delete SBHUFFRDH;
1729 delete SBHUFFRDX;
1730 delete SBHUFFRDY;
1731 delete SBHUFFRSIZE;
1732 delete pDecoder;
1733 } else if (REFAGGNINST == 1) { 1710 } else if (REFAGGNINST == 1) {
1734 SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; 1711 SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
1735 if (IAID->decode(pArithDecoder, (int*)&IDI) == -1) { 1712 if (IAID->decode(pArithDecoder, (int*)&IDI) == -1) {
1736 goto failed; 1713 goto failed;
1737 } 1714 }
1738 if ((IARDX->decode(pArithDecoder, &RDXI) == -1) || 1715 if ((IARDX->decode(pArithDecoder, &RDXI) == -1) ||
1739 (IARDY->decode(pArithDecoder, &RDYI) == -1)) { 1716 (IARDY->decode(pArithDecoder, &RDYI) == -1)) {
1740 goto failed; 1717 goto failed;
1741 } 1718 }
1742 if (IDI >= SBNUMSYMS) { 1719 if (IDI >= SBNUMSYMS) {
1743 goto failed; 1720 goto failed;
1744 } 1721 }
1745 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); 1722 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS);
1746 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); 1723 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
1747 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, 1724 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
1748 NSYMSDECODED * sizeof(CJBig2_Image*)); 1725 NSYMSDECODED * sizeof(CJBig2_Image*));
1749 if (!SBSYMS[IDI]) { 1726 if (!SBSYMS[IDI]) {
1750 FX_Free(SBSYMS); 1727 FX_Free(SBSYMS);
1751 goto failed; 1728 goto failed;
1752 } 1729 }
1753 pGRRD = new CJBig2_GRRDProc(); 1730 nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc());
1754 pGRRD->GRW = SYMWIDTH; 1731 pGRRD->GRW = SYMWIDTH;
1755 pGRRD->GRH = HCHEIGHT; 1732 pGRRD->GRH = HCHEIGHT;
1756 pGRRD->GRTEMPLATE = SDRTEMPLATE; 1733 pGRRD->GRTEMPLATE = SDRTEMPLATE;
1757 pGRRD->GRREFERENCE = SBSYMS[IDI]; 1734 pGRRD->GRREFERENCE = SBSYMS[IDI];
1758 pGRRD->GRREFERENCEDX = RDXI; 1735 pGRRD->GRREFERENCEDX = RDXI;
1759 pGRRD->GRREFERENCEDY = RDYI; 1736 pGRRD->GRREFERENCEDY = RDYI;
1760 pGRRD->TPGRON = 0; 1737 pGRRD->TPGRON = 0;
1761 pGRRD->GRAT[0] = SDRAT[0]; 1738 pGRRD->GRAT[0] = SDRAT[0];
1762 pGRRD->GRAT[1] = SDRAT[1]; 1739 pGRRD->GRAT[1] = SDRAT[1];
1763 pGRRD->GRAT[2] = SDRAT[2]; 1740 pGRRD->GRAT[2] = SDRAT[2];
1764 pGRRD->GRAT[3] = SDRAT[3]; 1741 pGRRD->GRAT[3] = SDRAT[3];
1765 BS = pGRRD->decode(pArithDecoder, grContext); 1742 BS = pGRRD->decode(pArithDecoder, grContext);
1766 if (BS == NULL) { 1743 if (BS == NULL) {
1767 FX_Free(SBSYMS); 1744 FX_Free(SBSYMS);
1768 delete pGRRD;
1769 goto failed; 1745 goto failed;
1770 } 1746 }
1771 FX_Free(SBSYMS); 1747 FX_Free(SBSYMS);
1772 delete pGRRD;
1773 } 1748 }
1774 } 1749 }
1775 SDNEWSYMS[NSYMSDECODED] = BS; 1750 SDNEWSYMS[NSYMSDECODED] = BS;
1776 BS = NULL; 1751 BS = NULL;
1777 NSYMSDECODED = NSYMSDECODED + 1; 1752 NSYMSDECODED = NSYMSDECODED + 1;
1778 } 1753 }
1779 } 1754 }
1780 EXINDEX = 0; 1755 EXINDEX = 0;
1781 CUREXFLAG = 0; 1756 CUREXFLAG = 0;
1782 EXFLAGS = FX_Alloc(FX_BOOL, SDNUMINSYMS + SDNUMNEWSYMS); 1757 EXFLAGS = FX_Alloc(FX_BOOL, SDNUMINSYMS + SDNUMNEWSYMS);
1783 while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) { 1758 while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) {
1784 if (IAEX->decode(pArithDecoder, (int*)&EXRUNLENGTH) == -1) { 1759 if (IAEX->decode(pArithDecoder, (int*)&EXRUNLENGTH) == -1) {
1785 FX_Free(EXFLAGS); 1760 FX_Free(EXFLAGS);
1786 goto failed; 1761 goto failed;
1787 } 1762 }
1788 if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) { 1763 if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) {
1789 FX_Free(EXFLAGS); 1764 FX_Free(EXFLAGS);
1790 goto failed; 1765 goto failed;
1791 } 1766 }
1792 if (EXRUNLENGTH != 0) { 1767 if (EXRUNLENGTH != 0) {
1793 for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) { 1768 for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) {
1794 EXFLAGS[I] = CUREXFLAG; 1769 EXFLAGS[I] = CUREXFLAG;
1795 } 1770 }
1796 } 1771 }
1797 EXINDEX = EXINDEX + EXRUNLENGTH; 1772 EXINDEX = EXINDEX + EXRUNLENGTH;
1798 CUREXFLAG = !CUREXFLAG; 1773 CUREXFLAG = !CUREXFLAG;
1799 } 1774 }
1800 pDict = new CJBig2_SymbolDict();
1801 pDict->SDNUMEXSYMS = SDNUMEXSYMS; 1775 pDict->SDNUMEXSYMS = SDNUMEXSYMS;
1802 pDict->SDEXSYMS = FX_Alloc(CJBig2_Image*, SDNUMEXSYMS); 1776 pDict->SDEXSYMS = FX_Alloc(CJBig2_Image*, SDNUMEXSYMS);
1803 I = J = 0; 1777 I = J = 0;
1804 for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) { 1778 for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) {
1805 if (EXFLAGS[I] && J < SDNUMEXSYMS) { 1779 if (EXFLAGS[I] && J < SDNUMEXSYMS) {
1806 if (I < SDNUMINSYMS) { 1780 if (I < SDNUMINSYMS) {
1807 pDict->SDEXSYMS[J] = new CJBig2_Image(*SDINSYMS[I]); 1781 pDict->SDEXSYMS[J] = new CJBig2_Image(*SDINSYMS[I]);
1808 } else { 1782 } else {
1809 pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS]; 1783 pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS];
1810 } 1784 }
(...skipping 14 matching lines...) Expand all
1825 delete IARDY; 1799 delete IARDY;
1826 delete IAEX; 1800 delete IAEX;
1827 delete IAID; 1801 delete IAID;
1828 delete IADT; 1802 delete IADT;
1829 delete IAFS; 1803 delete IAFS;
1830 delete IADS; 1804 delete IADS;
1831 delete IAIT; 1805 delete IAIT;
1832 delete IARI; 1806 delete IARI;
1833 delete IARDW; 1807 delete IARDW;
1834 delete IARDH; 1808 delete IARDH;
1835 return pDict; 1809 return pDict.release();
1836 failed: 1810 failed:
1837 for (I = 0; I < NSYMSDECODED; I++) { 1811 for (I = 0; I < NSYMSDECODED; I++) {
1838 if (SDNEWSYMS[I]) { 1812 if (SDNEWSYMS[I]) {
1839 delete SDNEWSYMS[I]; 1813 delete SDNEWSYMS[I];
1840 SDNEWSYMS[I] = NULL; 1814 SDNEWSYMS[I] = NULL;
1841 } 1815 }
1842 } 1816 }
1843 FX_Free(SDNEWSYMS); 1817 FX_Free(SDNEWSYMS);
1844 delete IADH; 1818 delete IADH;
1845 delete IADW; 1819 delete IADW;
1846 delete IAAI; 1820 delete IAAI;
1847 delete IARDX; 1821 delete IARDX;
1848 delete IARDY; 1822 delete IARDY;
1849 delete IAEX; 1823 delete IAEX;
1850 delete IAID; 1824 delete IAID;
1851 delete IADT; 1825 delete IADT;
1852 delete IAFS; 1826 delete IAFS;
1853 delete IADS; 1827 delete IADS;
1854 delete IAIT; 1828 delete IAIT;
1855 delete IARI; 1829 delete IARI;
1856 delete IARDW; 1830 delete IARDW;
1857 delete IARDH; 1831 delete IARDH;
1858 return NULL; 1832 return NULL;
1859 } 1833 }
1834
1860 CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream, 1835 CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream,
1861 JBig2ArithCtx* gbContext, 1836 JBig2ArithCtx* gbContext,
1862 JBig2ArithCtx* grContext, 1837 JBig2ArithCtx* grContext,
1863 IFX_Pause* pPause) { 1838 IFX_Pause* pPause) {
1864 CJBig2_Image** SDNEWSYMS; 1839 CJBig2_Image** SDNEWSYMS;
1865 FX_DWORD* SDNEWSYMWIDTHS; 1840 FX_DWORD* SDNEWSYMWIDTHS;
1866 FX_DWORD HCHEIGHT, NSYMSDECODED; 1841 FX_DWORD HCHEIGHT, NSYMSDECODED;
1867 int32_t HCDH; 1842 int32_t HCDH;
1868 FX_DWORD SYMWIDTH, TOTWIDTH, HCFIRSTSYM; 1843 FX_DWORD SYMWIDTH, TOTWIDTH, HCFIRSTSYM;
1869 int32_t DW; 1844 int32_t DW;
1870 CJBig2_Image *BS, *BHC; 1845 CJBig2_Image *BS, *BHC;
1871 FX_DWORD I, J, REFAGGNINST; 1846 FX_DWORD I, J, REFAGGNINST;
1872 FX_BOOL* EXFLAGS; 1847 FX_BOOL* EXFLAGS;
1873 FX_DWORD EXINDEX; 1848 FX_DWORD EXINDEX;
1874 FX_BOOL CUREXFLAG; 1849 FX_BOOL CUREXFLAG;
1875 FX_DWORD EXRUNLENGTH; 1850 FX_DWORD EXRUNLENGTH;
1876 int32_t nVal, nBits; 1851 int32_t nVal, nBits;
1877 FX_DWORD nTmp; 1852 FX_DWORD nTmp;
1878 FX_DWORD SBNUMSYMS; 1853 FX_DWORD SBNUMSYMS;
1879 uint8_t SBSYMCODELEN; 1854 uint8_t SBSYMCODELEN;
1880 JBig2HuffmanCode* SBSYMCODES; 1855 JBig2HuffmanCode* SBSYMCODES;
1881 FX_DWORD IDI; 1856 FX_DWORD IDI;
1882 int32_t RDXI, RDYI; 1857 int32_t RDXI, RDYI;
1883 FX_DWORD BMSIZE; 1858 FX_DWORD BMSIZE;
1884 FX_DWORD stride; 1859 FX_DWORD stride;
1885 CJBig2_Image** SBSYMS; 1860 CJBig2_Image** SBSYMS;
1886 CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH, 1861 nonstd::unique_ptr<CJBig2_HuffmanDecoder> pHuffmanDecoder(
1887 *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE, *pTable; 1862 new CJBig2_HuffmanDecoder(pStream));
1888 CJBig2_HuffmanDecoder* pHuffmanDecoder;
1889 CJBig2_GRRDProc* pGRRD;
1890 CJBig2_ArithDecoder* pArithDecoder;
1891 CJBig2_GRDProc* pGRD;
1892 CJBig2_SymbolDict* pDict;
1893 pHuffmanDecoder = new CJBig2_HuffmanDecoder(pStream);
1894 SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS); 1863 SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS);
1895 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); 1864 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*));
1896 SDNEWSYMWIDTHS = NULL; 1865 SDNEWSYMWIDTHS = NULL;
1897 BHC = NULL; 1866 BHC = NULL;
1898 if (SDREFAGG == 0) { 1867 if (SDREFAGG == 0) {
1899 SDNEWSYMWIDTHS = FX_Alloc(FX_DWORD, SDNUMNEWSYMS); 1868 SDNEWSYMWIDTHS = FX_Alloc(FX_DWORD, SDNUMNEWSYMS);
1900 FXSYS_memset(SDNEWSYMWIDTHS, 0, SDNUMNEWSYMS * sizeof(FX_DWORD)); 1869 FXSYS_memset(SDNEWSYMWIDTHS, 0, SDNUMNEWSYMS * sizeof(FX_DWORD));
1901 } 1870 }
1871 nonstd::unique_ptr<CJBig2_SymbolDict> pDict(new CJBig2_SymbolDict());
1872 nonstd::unique_ptr<CJBig2_HuffmanTable> pTable;
1873
1902 HCHEIGHT = 0; 1874 HCHEIGHT = 0;
1903 NSYMSDECODED = 0; 1875 NSYMSDECODED = 0;
1904 BS = NULL; 1876 BS = NULL;
1905 while (NSYMSDECODED < SDNUMNEWSYMS) { 1877 while (NSYMSDECODED < SDNUMNEWSYMS) {
1906 if (pHuffmanDecoder->decodeAValue(SDHUFFDH, &HCDH) != 0) { 1878 if (pHuffmanDecoder->decodeAValue(SDHUFFDH, &HCDH) != 0) {
1907 goto failed; 1879 goto failed;
1908 } 1880 }
1909 HCHEIGHT = HCHEIGHT + HCDH; 1881 HCHEIGHT = HCHEIGHT + HCDH;
1910 if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) { 1882 if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) {
1911 goto failed; 1883 goto failed;
(...skipping 22 matching lines...) Expand all
1934 } 1906 }
1935 TOTWIDTH = TOTWIDTH + SYMWIDTH; 1907 TOTWIDTH = TOTWIDTH + SYMWIDTH;
1936 } 1908 }
1937 if (SDREFAGG == 1) { 1909 if (SDREFAGG == 1) {
1938 if (pHuffmanDecoder->decodeAValue(SDHUFFAGGINST, (int*)&REFAGGNINST) != 1910 if (pHuffmanDecoder->decodeAValue(SDHUFFAGGINST, (int*)&REFAGGNINST) !=
1939 0) { 1911 0) {
1940 goto failed; 1912 goto failed;
1941 } 1913 }
1942 BS = NULL; 1914 BS = NULL;
1943 if (REFAGGNINST > 1) { 1915 if (REFAGGNINST > 1) {
1944 CJBig2_TRDProc* pDecoder = new CJBig2_TRDProc(); 1916 nonstd::unique_ptr<CJBig2_TRDProc> pDecoder(new CJBig2_TRDProc());
1945 pDecoder->SBHUFF = SDHUFF; 1917 pDecoder->SBHUFF = SDHUFF;
1946 pDecoder->SBREFINE = 1; 1918 pDecoder->SBREFINE = 1;
1947 pDecoder->SBW = SYMWIDTH; 1919 pDecoder->SBW = SYMWIDTH;
1948 pDecoder->SBH = HCHEIGHT; 1920 pDecoder->SBH = HCHEIGHT;
1949 pDecoder->SBNUMINSTANCES = REFAGGNINST; 1921 pDecoder->SBNUMINSTANCES = REFAGGNINST;
1950 pDecoder->SBSTRIPS = 1; 1922 pDecoder->SBSTRIPS = 1;
1951 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; 1923 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
1952 SBNUMSYMS = pDecoder->SBNUMSYMS; 1924 SBNUMSYMS = pDecoder->SBNUMSYMS;
1953 SBSYMCODES = FX_Alloc(JBig2HuffmanCode, SBNUMSYMS); 1925 SBSYMCODES = FX_Alloc(JBig2HuffmanCode, SBNUMSYMS);
1954 nTmp = 1; 1926 nTmp = 1;
1955 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { 1927 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
1956 nTmp++; 1928 nTmp++;
1957 } 1929 }
1958 for (I = 0; I < SBNUMSYMS; I++) { 1930 for (I = 0; I < SBNUMSYMS; I++) {
1959 SBSYMCODES[I].codelen = nTmp; 1931 SBSYMCODES[I].codelen = nTmp;
1960 SBSYMCODES[I].code = I; 1932 SBSYMCODES[I].code = I;
1961 } 1933 }
1962 pDecoder->SBSYMCODES = SBSYMCODES; 1934 pDecoder->SBSYMCODES = SBSYMCODES;
1963 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); 1935 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS);
1964 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); 1936 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
1965 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, 1937 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
1966 NSYMSDECODED * sizeof(CJBig2_Image*)); 1938 NSYMSDECODED * sizeof(CJBig2_Image*));
1967 pDecoder->SBSYMS = SBSYMS; 1939 pDecoder->SBSYMS = SBSYMS;
1968 pDecoder->SBDEFPIXEL = 0; 1940 pDecoder->SBDEFPIXEL = 0;
1969 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR; 1941 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR;
1970 pDecoder->TRANSPOSED = 0; 1942 pDecoder->TRANSPOSED = 0;
1971 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; 1943 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT;
1972 pDecoder->SBDSOFFSET = 0; 1944 pDecoder->SBDSOFFSET = 0;
1973 SBHUFFFS = new CJBig2_HuffmanTable(HuffmanTable_B6, 1945 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFFS(
1974 FX_ArraySize(HuffmanTable_B6), 1946 new CJBig2_HuffmanTable(HuffmanTable_B6,
1975 HuffmanTable_HTOOB_B6); 1947 FX_ArraySize(HuffmanTable_B6),
1976 SBHUFFDS = new CJBig2_HuffmanTable(HuffmanTable_B8, 1948 HuffmanTable_HTOOB_B6));
1977 FX_ArraySize(HuffmanTable_B8), 1949 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDS(
1978 HuffmanTable_HTOOB_B8); 1950 new CJBig2_HuffmanTable(HuffmanTable_B8,
1979 SBHUFFDT = new CJBig2_HuffmanTable(HuffmanTable_B11, 1951 FX_ArraySize(HuffmanTable_B8),
1980 FX_ArraySize(HuffmanTable_B11), 1952 HuffmanTable_HTOOB_B8));
1981 HuffmanTable_HTOOB_B11); 1953 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDT(
1982 SBHUFFRDW = new CJBig2_HuffmanTable(HuffmanTable_B15, 1954 new CJBig2_HuffmanTable(HuffmanTable_B11,
1983 FX_ArraySize(HuffmanTable_B15), 1955 FX_ArraySize(HuffmanTable_B11),
1984 HuffmanTable_HTOOB_B15); 1956 HuffmanTable_HTOOB_B11));
1985 SBHUFFRDH = new CJBig2_HuffmanTable(HuffmanTable_B15, 1957 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDW(
1986 FX_ArraySize(HuffmanTable_B15), 1958 new CJBig2_HuffmanTable(HuffmanTable_B15,
1987 HuffmanTable_HTOOB_B15); 1959 FX_ArraySize(HuffmanTable_B15),
1988 SBHUFFRDX = new CJBig2_HuffmanTable(HuffmanTable_B15, 1960 HuffmanTable_HTOOB_B15));
1989 FX_ArraySize(HuffmanTable_B15), 1961 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDH(
1990 HuffmanTable_HTOOB_B15); 1962 new CJBig2_HuffmanTable(HuffmanTable_B15,
1991 SBHUFFRDY = new CJBig2_HuffmanTable(HuffmanTable_B15, 1963 FX_ArraySize(HuffmanTable_B15),
1992 FX_ArraySize(HuffmanTable_B15), 1964 HuffmanTable_HTOOB_B15));
1993 HuffmanTable_HTOOB_B15); 1965 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX(
1994 SBHUFFRSIZE = new CJBig2_HuffmanTable(HuffmanTable_B1, 1966 new CJBig2_HuffmanTable(HuffmanTable_B15,
1995 FX_ArraySize(HuffmanTable_B1), 1967 FX_ArraySize(HuffmanTable_B15),
1996 HuffmanTable_HTOOB_B1); 1968 HuffmanTable_HTOOB_B15));
1997 pDecoder->SBHUFFFS = SBHUFFFS; 1969 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDY(
1998 pDecoder->SBHUFFDS = SBHUFFDS; 1970 new CJBig2_HuffmanTable(HuffmanTable_B15,
1999 pDecoder->SBHUFFDT = SBHUFFDT; 1971 FX_ArraySize(HuffmanTable_B15),
2000 pDecoder->SBHUFFRDW = SBHUFFRDW; 1972 HuffmanTable_HTOOB_B15));
2001 pDecoder->SBHUFFRDH = SBHUFFRDH; 1973 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE(
2002 pDecoder->SBHUFFRDX = SBHUFFRDX; 1974 new CJBig2_HuffmanTable(HuffmanTable_B1,
2003 pDecoder->SBHUFFRDY = SBHUFFRDY; 1975 FX_ArraySize(HuffmanTable_B1),
2004 pDecoder->SBHUFFRSIZE = SBHUFFRSIZE; 1976 HuffmanTable_HTOOB_B1));
1977 pDecoder->SBHUFFFS = SBHUFFFS.get();
1978 pDecoder->SBHUFFDS = SBHUFFDS.get();
1979 pDecoder->SBHUFFDT = SBHUFFDT.get();
1980 pDecoder->SBHUFFRDW = SBHUFFRDW.get();
1981 pDecoder->SBHUFFRDH = SBHUFFRDH.get();
1982 pDecoder->SBHUFFRDX = SBHUFFRDX.get();
1983 pDecoder->SBHUFFRDY = SBHUFFRDY.get();
1984 pDecoder->SBHUFFRSIZE = SBHUFFRSIZE.get();
2005 pDecoder->SBRTEMPLATE = SDRTEMPLATE; 1985 pDecoder->SBRTEMPLATE = SDRTEMPLATE;
2006 pDecoder->SBRAT[0] = SDRAT[0]; 1986 pDecoder->SBRAT[0] = SDRAT[0];
2007 pDecoder->SBRAT[1] = SDRAT[1]; 1987 pDecoder->SBRAT[1] = SDRAT[1];
2008 pDecoder->SBRAT[2] = SDRAT[2]; 1988 pDecoder->SBRAT[2] = SDRAT[2];
2009 pDecoder->SBRAT[3] = SDRAT[3]; 1989 pDecoder->SBRAT[3] = SDRAT[3];
2010 BS = pDecoder->decode_Huffman(pStream, grContext); 1990 BS = pDecoder->decode_Huffman(pStream, grContext);
2011 if (BS == NULL) { 1991 if (BS == NULL) {
2012 FX_Free(SBSYMCODES); 1992 FX_Free(SBSYMCODES);
2013 FX_Free(SBSYMS); 1993 FX_Free(SBSYMS);
2014 delete SBHUFFFS;
2015 delete SBHUFFDS;
2016 delete SBHUFFDT;
2017 delete SBHUFFRDW;
2018 delete SBHUFFRDH;
2019 delete SBHUFFRDX;
2020 delete SBHUFFRDY;
2021 delete SBHUFFRSIZE;
2022 delete pDecoder;
2023 goto failed; 1994 goto failed;
2024 } 1995 }
2025 FX_Free(SBSYMCODES); 1996 FX_Free(SBSYMCODES);
2026 FX_Free(SBSYMS); 1997 FX_Free(SBSYMS);
2027 delete SBHUFFFS;
2028 delete SBHUFFDS;
2029 delete SBHUFFDT;
2030 delete SBHUFFRDW;
2031 delete SBHUFFRDH;
2032 delete SBHUFFRDX;
2033 delete SBHUFFRDY;
2034 delete SBHUFFRSIZE;
2035 delete pDecoder;
2036 } else if (REFAGGNINST == 1) { 1998 } else if (REFAGGNINST == 1) {
2037 SBNUMSYMS = SDNUMINSYMS + SDNUMNEWSYMS; 1999 SBNUMSYMS = SDNUMINSYMS + SDNUMNEWSYMS;
2038 nTmp = 1; 2000 nTmp = 1;
2039 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { 2001 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
2040 nTmp++; 2002 nTmp++;
2041 } 2003 }
2042 SBSYMCODELEN = (uint8_t)nTmp; 2004 SBSYMCODELEN = (uint8_t)nTmp;
2043 SBSYMCODES = FX_Alloc(JBig2HuffmanCode, SBNUMSYMS); 2005 SBSYMCODES = FX_Alloc(JBig2HuffmanCode, SBNUMSYMS);
2044 for (I = 0; I < SBNUMSYMS; I++) { 2006 for (I = 0; I < SBNUMSYMS; I++) {
2045 SBSYMCODES[I].codelen = SBSYMCODELEN; 2007 SBSYMCODES[I].codelen = SBSYMCODELEN;
(...skipping 11 matching lines...) Expand all
2057 if ((nVal == SBSYMCODES[IDI].code) && 2019 if ((nVal == SBSYMCODES[IDI].code) &&
2058 (nBits == SBSYMCODES[IDI].codelen)) { 2020 (nBits == SBSYMCODES[IDI].codelen)) {
2059 break; 2021 break;
2060 } 2022 }
2061 } 2023 }
2062 if (IDI < SBNUMSYMS) { 2024 if (IDI < SBNUMSYMS) {
2063 break; 2025 break;
2064 } 2026 }
2065 } 2027 }
2066 FX_Free(SBSYMCODES); 2028 FX_Free(SBSYMCODES);
2067 SBHUFFRDX = new CJBig2_HuffmanTable(HuffmanTable_B15, 2029 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX(
2068 FX_ArraySize(HuffmanTable_B15), 2030 new CJBig2_HuffmanTable(HuffmanTable_B15,
2069 HuffmanTable_HTOOB_B15); 2031 FX_ArraySize(HuffmanTable_B15),
2070 SBHUFFRSIZE = new CJBig2_HuffmanTable(HuffmanTable_B1, 2032 HuffmanTable_HTOOB_B15));
2071 FX_ArraySize(HuffmanTable_B1), 2033 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE(
2072 HuffmanTable_HTOOB_B1); 2034 new CJBig2_HuffmanTable(HuffmanTable_B1,
2073 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) || 2035 FX_ArraySize(HuffmanTable_B1),
2074 (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDYI) != 0) || 2036 HuffmanTable_HTOOB_B1));
2075 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) { 2037 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX.get(), &RDXI) != 0) ||
2076 delete SBHUFFRDX; 2038 (pHuffmanDecoder->decodeAValue(SBHUFFRDX.get(), &RDYI) != 0) ||
2077 delete SBHUFFRSIZE; 2039 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE.get(), &nVal) != 0)) {
2078 goto failed; 2040 goto failed;
2079 } 2041 }
2080 delete SBHUFFRDX;
2081 delete SBHUFFRSIZE;
2082 pStream->alignByte(); 2042 pStream->alignByte();
2083 nTmp = pStream->getOffset(); 2043 nTmp = pStream->getOffset();
2084 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); 2044 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS);
2085 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); 2045 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
2086 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, 2046 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
2087 NSYMSDECODED * sizeof(CJBig2_Image*)); 2047 NSYMSDECODED * sizeof(CJBig2_Image*));
2088 pGRRD = new CJBig2_GRRDProc(); 2048 nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc());
2089 pGRRD->GRW = SYMWIDTH; 2049 pGRRD->GRW = SYMWIDTH;
2090 pGRRD->GRH = HCHEIGHT; 2050 pGRRD->GRH = HCHEIGHT;
2091 pGRRD->GRTEMPLATE = SDRTEMPLATE; 2051 pGRRD->GRTEMPLATE = SDRTEMPLATE;
2092 pGRRD->GRREFERENCE = SBSYMS[IDI]; 2052 pGRRD->GRREFERENCE = SBSYMS[IDI];
2093 pGRRD->GRREFERENCEDX = RDXI; 2053 pGRRD->GRREFERENCEDX = RDXI;
2094 pGRRD->GRREFERENCEDY = RDYI; 2054 pGRRD->GRREFERENCEDY = RDYI;
2095 pGRRD->TPGRON = 0; 2055 pGRRD->TPGRON = 0;
2096 pGRRD->GRAT[0] = SDRAT[0]; 2056 pGRRD->GRAT[0] = SDRAT[0];
2097 pGRRD->GRAT[1] = SDRAT[1]; 2057 pGRRD->GRAT[1] = SDRAT[1];
2098 pGRRD->GRAT[2] = SDRAT[2]; 2058 pGRRD->GRAT[2] = SDRAT[2];
2099 pGRRD->GRAT[3] = SDRAT[3]; 2059 pGRRD->GRAT[3] = SDRAT[3];
2100 pArithDecoder = new CJBig2_ArithDecoder(pStream); 2060 nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder(
2101 BS = pGRRD->decode(pArithDecoder, grContext); 2061 new CJBig2_ArithDecoder(pStream));
2062 BS = pGRRD->decode(pArithDecoder.get(), grContext);
2102 if (BS == NULL) { 2063 if (BS == NULL) {
2103 FX_Free(SBSYMS); 2064 FX_Free(SBSYMS);
2104 delete pGRRD;
2105 delete pArithDecoder;
2106 goto failed; 2065 goto failed;
2107 } 2066 }
2108 pStream->alignByte(); 2067 pStream->alignByte();
2109 pStream->offset(2); 2068 pStream->offset(2);
2110 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) { 2069 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) {
2111 delete BS; 2070 delete BS;
2112 FX_Free(SBSYMS); 2071 FX_Free(SBSYMS);
2113 delete pGRRD;
2114 delete pArithDecoder;
2115 goto failed; 2072 goto failed;
2116 } 2073 }
2117 FX_Free(SBSYMS); 2074 FX_Free(SBSYMS);
2118 delete pGRRD;
2119 delete pArithDecoder;
2120 } 2075 }
2121 SDNEWSYMS[NSYMSDECODED] = BS; 2076 SDNEWSYMS[NSYMSDECODED] = BS;
2122 } 2077 }
2123 if (SDREFAGG == 0) { 2078 if (SDREFAGG == 0) {
2124 SDNEWSYMWIDTHS[NSYMSDECODED] = SYMWIDTH; 2079 SDNEWSYMWIDTHS[NSYMSDECODED] = SYMWIDTH;
2125 } 2080 }
2126 NSYMSDECODED = NSYMSDECODED + 1; 2081 NSYMSDECODED = NSYMSDECODED + 1;
2127 } 2082 }
2128 if (SDREFAGG == 0) { 2083 if (SDREFAGG == 0) {
2129 if (pHuffmanDecoder->decodeAValue(SDHUFFBMSIZE, (int32_t*)&BMSIZE) != 0) { 2084 if (pHuffmanDecoder->decodeAValue(SDHUFFBMSIZE, (int32_t*)&BMSIZE) != 0) {
2130 goto failed; 2085 goto failed;
2131 } 2086 }
2132 pStream->alignByte(); 2087 pStream->alignByte();
2133 if (BMSIZE == 0) { 2088 if (BMSIZE == 0) {
2134 stride = (TOTWIDTH + 7) >> 3; 2089 stride = (TOTWIDTH + 7) >> 3;
2135 if (pStream->getByteLeft() >= stride * HCHEIGHT) { 2090 if (pStream->getByteLeft() >= stride * HCHEIGHT) {
2136 BHC = new CJBig2_Image(TOTWIDTH, HCHEIGHT); 2091 BHC = new CJBig2_Image(TOTWIDTH, HCHEIGHT);
2137 for (I = 0; I < HCHEIGHT; I++) { 2092 for (I = 0; I < HCHEIGHT; I++) {
2138 JBIG2_memcpy(BHC->m_pData + I * BHC->m_nStride, 2093 JBIG2_memcpy(BHC->m_pData + I * BHC->m_nStride,
2139 pStream->getPointer(), stride); 2094 pStream->getPointer(), stride);
2140 pStream->offset(stride); 2095 pStream->offset(stride);
2141 } 2096 }
2142 } else { 2097 } else {
2143 goto failed; 2098 goto failed;
2144 } 2099 }
2145 } else { 2100 } else {
2146 pGRD = new CJBig2_GRDProc(); 2101 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
2147 pGRD->MMR = 1; 2102 pGRD->MMR = 1;
2148 pGRD->GBW = TOTWIDTH; 2103 pGRD->GBW = TOTWIDTH;
2149 pGRD->GBH = HCHEIGHT; 2104 pGRD->GBH = HCHEIGHT;
2150 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHC, pStream); 2105 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHC, pStream);
2151 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { 2106 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
2152 pGRD->Continue_decode(pPause); 2107 pGRD->Continue_decode(pPause);
2153 } 2108 }
2154 delete pGRD;
2155 pStream->alignByte(); 2109 pStream->alignByte();
2156 } 2110 }
2157 nTmp = 0; 2111 nTmp = 0;
2158 if (!BHC) { 2112 if (!BHC) {
2159 continue; 2113 continue;
2160 } 2114 }
2161 for (I = HCFIRSTSYM; I < NSYMSDECODED; I++) { 2115 for (I = HCFIRSTSYM; I < NSYMSDECODED; I++) {
2162 SDNEWSYMS[I] = BHC->subImage(nTmp, 0, SDNEWSYMWIDTHS[I], HCHEIGHT); 2116 SDNEWSYMS[I] = BHC->subImage(nTmp, 0, SDNEWSYMWIDTHS[I], HCHEIGHT);
2163 nTmp += SDNEWSYMWIDTHS[I]; 2117 nTmp += SDNEWSYMWIDTHS[I];
2164 } 2118 }
2165 delete BHC; 2119 delete BHC;
2166 BHC = NULL; 2120 BHC = NULL;
2167 } 2121 }
2168 } 2122 }
2169 EXINDEX = 0; 2123 EXINDEX = 0;
2170 CUREXFLAG = 0; 2124 CUREXFLAG = 0;
2171 pTable = new CJBig2_HuffmanTable( 2125 pTable.reset(new CJBig2_HuffmanTable(
2172 HuffmanTable_B1, FX_ArraySize(HuffmanTable_B1), HuffmanTable_HTOOB_B1); 2126 HuffmanTable_B1, FX_ArraySize(HuffmanTable_B1), HuffmanTable_HTOOB_B1));
2173 EXFLAGS = FX_Alloc(FX_BOOL, SDNUMINSYMS + SDNUMNEWSYMS); 2127 EXFLAGS = FX_Alloc(FX_BOOL, SDNUMINSYMS + SDNUMNEWSYMS);
2174 while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) { 2128 while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) {
2175 if (pHuffmanDecoder->decodeAValue(pTable, (int*)&EXRUNLENGTH) != 0) { 2129 if (pHuffmanDecoder->decodeAValue(pTable.get(), (int*)&EXRUNLENGTH) != 0) {
2176 delete pTable;
2177 FX_Free(EXFLAGS); 2130 FX_Free(EXFLAGS);
2178 goto failed; 2131 goto failed;
2179 } 2132 }
2180 if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) { 2133 if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) {
2181 delete pTable;
2182 FX_Free(EXFLAGS); 2134 FX_Free(EXFLAGS);
2183 goto failed; 2135 goto failed;
2184 } 2136 }
2185 if (EXRUNLENGTH != 0) { 2137 if (EXRUNLENGTH != 0) {
2186 for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) { 2138 for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) {
2187 EXFLAGS[I] = CUREXFLAG; 2139 EXFLAGS[I] = CUREXFLAG;
2188 } 2140 }
2189 } 2141 }
2190 EXINDEX = EXINDEX + EXRUNLENGTH; 2142 EXINDEX = EXINDEX + EXRUNLENGTH;
2191 CUREXFLAG = !CUREXFLAG; 2143 CUREXFLAG = !CUREXFLAG;
2192 } 2144 }
2193 delete pTable;
2194 pDict = new CJBig2_SymbolDict();
2195 pDict->SDNUMEXSYMS = SDNUMEXSYMS; 2145 pDict->SDNUMEXSYMS = SDNUMEXSYMS;
2196 pDict->SDEXSYMS = FX_Alloc(CJBig2_Image*, SDNUMEXSYMS); 2146 pDict->SDEXSYMS = FX_Alloc(CJBig2_Image*, SDNUMEXSYMS);
2197 I = J = 0; 2147 I = J = 0;
2198 for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) { 2148 for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) {
2199 if (EXFLAGS[I] && J < SDNUMEXSYMS) { 2149 if (EXFLAGS[I] && J < SDNUMEXSYMS) {
2200 if (I < SDNUMINSYMS) { 2150 if (I < SDNUMINSYMS) {
2201 pDict->SDEXSYMS[J] = new CJBig2_Image(*SDINSYMS[I]); 2151 pDict->SDEXSYMS[J] = new CJBig2_Image(*SDINSYMS[I]);
2202 } else { 2152 } else {
2203 pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS]; 2153 pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS];
2204 } 2154 }
2205 J = J + 1; 2155 J = J + 1;
2206 } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) { 2156 } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) {
2207 delete SDNEWSYMS[I - SDNUMINSYMS]; 2157 delete SDNEWSYMS[I - SDNUMINSYMS];
2208 } 2158 }
2209 } 2159 }
2210 if (J < SDNUMEXSYMS) { 2160 if (J < SDNUMEXSYMS) {
2211 pDict->SDNUMEXSYMS = J; 2161 pDict->SDNUMEXSYMS = J;
2212 } 2162 }
2213 FX_Free(EXFLAGS); 2163 FX_Free(EXFLAGS);
2214 FX_Free(SDNEWSYMS); 2164 FX_Free(SDNEWSYMS);
2215 if (SDREFAGG == 0) { 2165 if (SDREFAGG == 0) {
2216 FX_Free(SDNEWSYMWIDTHS); 2166 FX_Free(SDNEWSYMWIDTHS);
2217 } 2167 }
2218 delete pHuffmanDecoder; 2168 return pDict.release();
2219 return pDict;
2220 failed: 2169 failed:
2221 for (I = 0; I < NSYMSDECODED; I++) { 2170 for (I = 0; I < NSYMSDECODED; I++) {
2222 delete SDNEWSYMS[I]; 2171 delete SDNEWSYMS[I];
2223 } 2172 }
2224 FX_Free(SDNEWSYMS); 2173 FX_Free(SDNEWSYMS);
2225 if (SDREFAGG == 0) { 2174 if (SDREFAGG == 0) {
2226 FX_Free(SDNEWSYMWIDTHS); 2175 FX_Free(SDNEWSYMWIDTHS);
2227 } 2176 }
2228 delete pHuffmanDecoder;
2229 return NULL; 2177 return NULL;
2230 } 2178 }
2179
2231 CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, 2180 CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
2232 JBig2ArithCtx* gbContext, 2181 JBig2ArithCtx* gbContext,
2233 IFX_Pause* pPause) { 2182 IFX_Pause* pPause) {
2234 FX_DWORD ng, mg; 2183 FX_DWORD ng, mg;
2235 int32_t x, y; 2184 int32_t x, y;
2236 FX_DWORD HBPP; 2185 FX_DWORD HBPP;
2237 FX_DWORD* GI; 2186 FX_DWORD* GI;
2238 CJBig2_Image* HSKIP = nullptr; 2187 nonstd::unique_ptr<CJBig2_Image> HSKIP;
2239 CJBig2_Image* HTREG = new CJBig2_Image(HBW, HBH); 2188 nonstd::unique_ptr<CJBig2_Image> HTREG(new CJBig2_Image(HBW, HBH));
2240 HTREG->fill(HDEFPIXEL); 2189 HTREG->fill(HDEFPIXEL);
2241 if (HENABLESKIP == 1) { 2190 if (HENABLESKIP == 1) {
2242 HSKIP = new CJBig2_Image(HGW, HGH); 2191 HSKIP.reset(new CJBig2_Image(HGW, HGH));
2243 for (mg = 0; mg < HGH; mg++) { 2192 for (mg = 0; mg < HGH; mg++) {
2244 for (ng = 0; ng < HGW; ng++) { 2193 for (ng = 0; ng < HGW; ng++) {
2245 x = (HGX + mg * HRY + ng * HRX) >> 8; 2194 x = (HGX + mg * HRY + ng * HRX) >> 8;
2246 y = (HGY + mg * HRX - ng * HRY) >> 8; 2195 y = (HGY + mg * HRX - ng * HRY) >> 8;
2247 if ((x + HPW <= 0) | (x >= (int32_t)HBW) | (y + HPH <= 0) | 2196 if ((x + HPW <= 0) | (x >= (int32_t)HBW) | (y + HPH <= 0) |
2248 (y >= (int32_t)HPH)) { 2197 (y >= (int32_t)HPH)) {
2249 HSKIP->setPixel(ng, mg, 1); 2198 HSKIP->setPixel(ng, mg, 1);
2250 } else { 2199 } else {
2251 HSKIP->setPixel(ng, mg, 0); 2200 HSKIP->setPixel(ng, mg, 0);
2252 } 2201 }
2253 } 2202 }
2254 } 2203 }
2255 } 2204 }
2256 HBPP = 1; 2205 HBPP = 1;
2257 while ((FX_DWORD)(1 << HBPP) < HNUMPATS) { 2206 while ((FX_DWORD)(1 << HBPP) < HNUMPATS) {
2258 HBPP++; 2207 HBPP++;
2259 } 2208 }
2260 CJBig2_GSIDProc* pGID = new CJBig2_GSIDProc(); 2209 nonstd::unique_ptr<CJBig2_GSIDProc> pGID(new CJBig2_GSIDProc());
2261 pGID->GSMMR = HMMR; 2210 pGID->GSMMR = HMMR;
2262 pGID->GSW = HGW; 2211 pGID->GSW = HGW;
2263 pGID->GSH = HGH; 2212 pGID->GSH = HGH;
2264 pGID->GSBPP = (uint8_t)HBPP; 2213 pGID->GSBPP = (uint8_t)HBPP;
2265 pGID->GSUSESKIP = HENABLESKIP; 2214 pGID->GSUSESKIP = HENABLESKIP;
2266 pGID->GSKIP = HSKIP; 2215 pGID->GSKIP = HSKIP.get();
2267 pGID->GSTEMPLATE = HTEMPLATE; 2216 pGID->GSTEMPLATE = HTEMPLATE;
2268 GI = pGID->decode_Arith(pArithDecoder, gbContext, pPause); 2217 GI = pGID->decode_Arith(pArithDecoder, gbContext, pPause);
2269 if (GI == NULL) { 2218 if (GI == NULL)
2270 goto failed; 2219 return nullptr;
2271 } 2220
2272 for (mg = 0; mg < HGH; mg++) { 2221 for (mg = 0; mg < HGH; mg++) {
2273 for (ng = 0; ng < HGW; ng++) { 2222 for (ng = 0; ng < HGW; ng++) {
2274 x = (HGX + mg * HRY + ng * HRX) >> 8; 2223 x = (HGX + mg * HRY + ng * HRX) >> 8;
2275 y = (HGY + mg * HRX - ng * HRY) >> 8; 2224 y = (HGY + mg * HRX - ng * HRY) >> 8;
2276 FX_DWORD pat_index = GI[mg * HGW + ng]; 2225 FX_DWORD pat_index = GI[mg * HGW + ng];
2277 if (pat_index >= HNUMPATS) { 2226 if (pat_index >= HNUMPATS) {
2278 pat_index = HNUMPATS - 1; 2227 pat_index = HNUMPATS - 1;
2279 } 2228 }
2280 HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP); 2229 HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP);
2281 } 2230 }
2282 } 2231 }
2283 FX_Free(GI); 2232 FX_Free(GI);
2284 delete HSKIP; 2233 return HTREG.release();
2285 delete pGID;
2286 return HTREG;
2287 failed:
2288 delete HSKIP;
2289 delete pGID;
2290 delete HTREG;
2291 return NULL;
2292 } 2234 }
2235
2293 CJBig2_Image* CJBig2_HTRDProc::decode_MMR(CJBig2_BitStream* pStream, 2236 CJBig2_Image* CJBig2_HTRDProc::decode_MMR(CJBig2_BitStream* pStream,
2294 IFX_Pause* pPause) { 2237 IFX_Pause* pPause) {
2295 FX_DWORD ng, mg; 2238 FX_DWORD ng, mg;
2296 int32_t x, y; 2239 int32_t x, y;
2297 FX_DWORD* GI; 2240 FX_DWORD* GI;
2298 CJBig2_Image* HTREG = new CJBig2_Image(HBW, HBH); 2241 nonstd::unique_ptr<CJBig2_Image> HTREG(new CJBig2_Image(HBW, HBH));
2299 HTREG->fill(HDEFPIXEL); 2242 HTREG->fill(HDEFPIXEL);
2300 FX_DWORD HBPP = 1; 2243 FX_DWORD HBPP = 1;
2301 while ((FX_DWORD)(1 << HBPP) < HNUMPATS) { 2244 while ((FX_DWORD)(1 << HBPP) < HNUMPATS) {
2302 HBPP++; 2245 HBPP++;
2303 } 2246 }
2304 CJBig2_GSIDProc* pGID = new CJBig2_GSIDProc(); 2247 nonstd::unique_ptr<CJBig2_GSIDProc> pGID(new CJBig2_GSIDProc());
2305 pGID->GSMMR = HMMR; 2248 pGID->GSMMR = HMMR;
2306 pGID->GSW = HGW; 2249 pGID->GSW = HGW;
2307 pGID->GSH = HGH; 2250 pGID->GSH = HGH;
2308 pGID->GSBPP = (uint8_t)HBPP; 2251 pGID->GSBPP = (uint8_t)HBPP;
2309 pGID->GSUSESKIP = 0; 2252 pGID->GSUSESKIP = 0;
2310 GI = pGID->decode_MMR(pStream, pPause); 2253 GI = pGID->decode_MMR(pStream, pPause);
2311 if (GI == NULL) { 2254 if (GI == NULL) {
2312 goto failed; 2255 goto failed;
2313 } 2256 }
2314 for (mg = 0; mg < HGH; mg++) { 2257 for (mg = 0; mg < HGH; mg++) {
2315 for (ng = 0; ng < HGW; ng++) { 2258 for (ng = 0; ng < HGW; ng++) {
2316 x = (HGX + mg * HRY + ng * HRX) >> 8; 2259 x = (HGX + mg * HRY + ng * HRX) >> 8;
2317 y = (HGY + mg * HRX - ng * HRY) >> 8; 2260 y = (HGY + mg * HRX - ng * HRY) >> 8;
2318 FX_DWORD pat_index = GI[mg * HGW + ng]; 2261 FX_DWORD pat_index = GI[mg * HGW + ng];
2319 if (pat_index >= HNUMPATS) { 2262 if (pat_index >= HNUMPATS) {
2320 pat_index = HNUMPATS - 1; 2263 pat_index = HNUMPATS - 1;
2321 } 2264 }
2322 HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP); 2265 HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP);
2323 } 2266 }
2324 } 2267 }
2325 FX_Free(GI); 2268 FX_Free(GI);
2326 delete pGID; 2269 return HTREG.release();
2327 return HTREG;
2328 failed: 2270 failed:
2329 delete pGID;
2330 delete HTREG;
2331 return NULL; 2271 return NULL;
2332 } 2272 }
2273
2333 CJBig2_PatternDict* CJBig2_PDDProc::decode_Arith( 2274 CJBig2_PatternDict* CJBig2_PDDProc::decode_Arith(
2334 CJBig2_ArithDecoder* pArithDecoder, 2275 CJBig2_ArithDecoder* pArithDecoder,
2335 JBig2ArithCtx* gbContext, 2276 JBig2ArithCtx* gbContext,
2336 IFX_Pause* pPause) { 2277 IFX_Pause* pPause) {
2337 FX_DWORD GRAY; 2278 FX_DWORD GRAY;
2338 CJBig2_Image* BHDC = NULL; 2279 CJBig2_Image* BHDC = NULL;
2339 CJBig2_PatternDict* pDict = new CJBig2_PatternDict(); 2280 nonstd::unique_ptr<CJBig2_PatternDict> pDict(new CJBig2_PatternDict());
2340 pDict->NUMPATS = GRAYMAX + 1; 2281 pDict->NUMPATS = GRAYMAX + 1;
2341 pDict->HDPATS = FX_Alloc(CJBig2_Image*, pDict->NUMPATS); 2282 pDict->HDPATS = FX_Alloc(CJBig2_Image*, pDict->NUMPATS);
2342 JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS); 2283 JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS);
2343 CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); 2284
2285 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
2344 pGRD->MMR = HDMMR; 2286 pGRD->MMR = HDMMR;
2345 pGRD->GBW = (GRAYMAX + 1) * HDPW; 2287 pGRD->GBW = (GRAYMAX + 1) * HDPW;
2346 pGRD->GBH = HDPH; 2288 pGRD->GBH = HDPH;
2347 pGRD->GBTEMPLATE = HDTEMPLATE; 2289 pGRD->GBTEMPLATE = HDTEMPLATE;
2348 pGRD->TPGDON = 0; 2290 pGRD->TPGDON = 0;
2349 pGRD->USESKIP = 0; 2291 pGRD->USESKIP = 0;
2350 pGRD->GBAT[0] = -(int32_t)HDPW; 2292 pGRD->GBAT[0] = -(int32_t)HDPW;
2351 pGRD->GBAT[1] = 0; 2293 pGRD->GBAT[1] = 0;
2352 if (pGRD->GBTEMPLATE == 0) { 2294 if (pGRD->GBTEMPLATE == 0) {
2353 pGRD->GBAT[2] = -3; 2295 pGRD->GBAT[2] = -3;
2354 pGRD->GBAT[3] = -1; 2296 pGRD->GBAT[3] = -1;
2355 pGRD->GBAT[4] = 2; 2297 pGRD->GBAT[4] = 2;
2356 pGRD->GBAT[5] = -2; 2298 pGRD->GBAT[5] = -2;
2357 pGRD->GBAT[6] = -2; 2299 pGRD->GBAT[6] = -2;
2358 pGRD->GBAT[7] = -2; 2300 pGRD->GBAT[7] = -2;
2359 } 2301 }
2360 FXCODEC_STATUS status = 2302 FXCODEC_STATUS status =
2361 pGRD->Start_decode_Arith(&BHDC, pArithDecoder, gbContext); 2303 pGRD->Start_decode_Arith(&BHDC, pArithDecoder, gbContext);
2362 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { 2304 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
2363 pGRD->Continue_decode(pPause); 2305 pGRD->Continue_decode(pPause);
2364 } 2306 }
2365 if (BHDC == NULL) { 2307 if (BHDC == NULL)
2366 delete pGRD; 2308 return nullptr;
2367 goto failed; 2309
2368 }
2369 delete pGRD;
2370 GRAY = 0; 2310 GRAY = 0;
2371 while (GRAY <= GRAYMAX) { 2311 while (GRAY <= GRAYMAX) {
2372 pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH); 2312 pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH);
2373 GRAY = GRAY + 1; 2313 GRAY = GRAY + 1;
2374 } 2314 }
2375 delete BHDC; 2315 delete BHDC;
2376 return pDict; 2316 return pDict.release();
2377 failed:
2378 delete pDict;
2379 return NULL;
2380 } 2317 }
2381 2318
2382 CJBig2_PatternDict* CJBig2_PDDProc::decode_MMR(CJBig2_BitStream* pStream, 2319 CJBig2_PatternDict* CJBig2_PDDProc::decode_MMR(CJBig2_BitStream* pStream,
2383 IFX_Pause* pPause) { 2320 IFX_Pause* pPause) {
2384 FX_DWORD GRAY; 2321 FX_DWORD GRAY;
2385 CJBig2_Image* BHDC = NULL; 2322 CJBig2_Image* BHDC = NULL;
2386 CJBig2_PatternDict* pDict = new CJBig2_PatternDict(); 2323 nonstd::unique_ptr<CJBig2_PatternDict> pDict(new CJBig2_PatternDict());
2387 pDict->NUMPATS = GRAYMAX + 1; 2324 pDict->NUMPATS = GRAYMAX + 1;
2388 pDict->HDPATS = FX_Alloc(CJBig2_Image*, pDict->NUMPATS); 2325 pDict->HDPATS = FX_Alloc(CJBig2_Image*, pDict->NUMPATS);
2389 JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS); 2326 JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS);
2390 CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); 2327
2328 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
2391 pGRD->MMR = HDMMR; 2329 pGRD->MMR = HDMMR;
2392 pGRD->GBW = (GRAYMAX + 1) * HDPW; 2330 pGRD->GBW = (GRAYMAX + 1) * HDPW;
2393 pGRD->GBH = HDPH; 2331 pGRD->GBH = HDPH;
2394 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHDC, pStream); 2332 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHDC, pStream);
2395 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { 2333 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
2396 pGRD->Continue_decode(pPause); 2334 pGRD->Continue_decode(pPause);
2397 } 2335 }
2398 if (BHDC == NULL) { 2336 if (BHDC == NULL)
2399 delete pGRD; 2337 return nullptr;
2400 goto failed; 2338
2401 }
2402 delete pGRD;
2403 GRAY = 0; 2339 GRAY = 0;
2404 while (GRAY <= GRAYMAX) { 2340 while (GRAY <= GRAYMAX) {
2405 pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH); 2341 pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH);
2406 GRAY = GRAY + 1; 2342 GRAY = GRAY + 1;
2407 } 2343 }
2408 delete BHDC; 2344 delete BHDC;
2409 return pDict; 2345 return pDict.release();
2410 failed:
2411 delete pDict;
2412 return NULL;
2413 } 2346 }
2347
2414 FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder, 2348 FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
2415 JBig2ArithCtx* gbContext, 2349 JBig2ArithCtx* gbContext,
2416 IFX_Pause* pPause) { 2350 IFX_Pause* pPause) {
2417 CJBig2_Image** GSPLANES; 2351 CJBig2_Image** GSPLANES;
2418 int32_t J, K; 2352 int32_t J, K;
2419 FX_DWORD x, y; 2353 FX_DWORD x, y;
2420 FX_DWORD* GSVALS; 2354 FX_DWORD* GSVALS;
2421 GSPLANES = FX_Alloc(CJBig2_Image*, GSBPP); 2355 GSPLANES = FX_Alloc(CJBig2_Image*, GSBPP);
2422 if (!GSPLANES) {
2423 return NULL;
2424 }
2425 GSVALS = FX_Alloc2D(FX_DWORD, GSW, GSH); 2356 GSVALS = FX_Alloc2D(FX_DWORD, GSW, GSH);
2426 if (!GSVALS) {
2427 FX_Free(GSPLANES);
2428 return NULL;
2429 }
2430 JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP); 2357 JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP);
2431 JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH); 2358 JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH);
2432 CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); 2359
2360 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
2433 pGRD->MMR = GSMMR; 2361 pGRD->MMR = GSMMR;
2434 pGRD->GBW = GSW; 2362 pGRD->GBW = GSW;
2435 pGRD->GBH = GSH; 2363 pGRD->GBH = GSH;
2436 pGRD->GBTEMPLATE = GSTEMPLATE; 2364 pGRD->GBTEMPLATE = GSTEMPLATE;
2437 pGRD->TPGDON = 0; 2365 pGRD->TPGDON = 0;
2438 pGRD->USESKIP = GSUSESKIP; 2366 pGRD->USESKIP = GSUSESKIP;
2439 pGRD->SKIP = GSKIP; 2367 pGRD->SKIP = GSKIP;
2440 if (GSTEMPLATE <= 1) { 2368 if (GSTEMPLATE <= 1) {
2441 pGRD->GBAT[0] = 3; 2369 pGRD->GBAT[0] = 3;
2442 } else { 2370 } else {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2479 for (x = 0; x < GSW; x++) { 2407 for (x = 0; x < GSW; x++) {
2480 for (J = 0; J < GSBPP; J++) { 2408 for (J = 0; J < GSBPP; J++) {
2481 GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J; 2409 GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J;
2482 } 2410 }
2483 } 2411 }
2484 } 2412 }
2485 for (J = 0; J < GSBPP; J++) { 2413 for (J = 0; J < GSBPP; J++) {
2486 delete GSPLANES[J]; 2414 delete GSPLANES[J];
2487 } 2415 }
2488 FX_Free(GSPLANES); 2416 FX_Free(GSPLANES);
2489 delete pGRD;
2490 return GSVALS; 2417 return GSVALS;
2491 failed: 2418 failed:
2492 FX_Free(GSPLANES); 2419 FX_Free(GSPLANES);
2493 delete pGRD;
2494 FX_Free(GSVALS); 2420 FX_Free(GSVALS);
2495 return NULL; 2421 return NULL;
2496 } 2422 }
2423
2497 FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream, 2424 FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream,
2498 IFX_Pause* pPause) { 2425 IFX_Pause* pPause) {
2499 CJBig2_Image** GSPLANES; 2426 CJBig2_Image** GSPLANES;
2500 int32_t J, K; 2427 int32_t J, K;
2501 FX_DWORD x, y; 2428 FX_DWORD x, y;
2502 FX_DWORD* GSVALS; 2429 FX_DWORD* GSVALS;
2503 GSPLANES = FX_Alloc(CJBig2_Image*, GSBPP); 2430 GSPLANES = FX_Alloc(CJBig2_Image*, GSBPP);
2504 if (!GSPLANES) {
2505 return NULL;
2506 }
2507 GSVALS = FX_Alloc2D(FX_DWORD, GSW, GSH); 2431 GSVALS = FX_Alloc2D(FX_DWORD, GSW, GSH);
2508 if (!GSVALS) {
2509 FX_Free(GSPLANES);
2510 return NULL;
2511 }
2512 JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP); 2432 JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP);
2513 JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH); 2433 JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH);
2514 CJBig2_GRDProc* pGRD = new CJBig2_GRDProc(); 2434
2435 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
2515 pGRD->MMR = GSMMR; 2436 pGRD->MMR = GSMMR;
2516 pGRD->GBW = GSW; 2437 pGRD->GBW = GSW;
2517 pGRD->GBH = GSH; 2438 pGRD->GBH = GSH;
2518 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&GSPLANES[GSBPP - 1], pStream); 2439 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&GSPLANES[GSBPP - 1], pStream);
2519 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { 2440 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
2520 pGRD->Continue_decode(pPause); 2441 pGRD->Continue_decode(pPause);
2521 } 2442 }
2522 if (GSPLANES[GSBPP - 1] == NULL) { 2443 if (GSPLANES[GSBPP - 1] == NULL) {
2523 goto failed; 2444 goto failed;
2524 } 2445 }
(...skipping 20 matching lines...) Expand all
2545 for (x = 0; x < GSW; x++) { 2466 for (x = 0; x < GSW; x++) {
2546 for (J = 0; J < GSBPP; J++) { 2467 for (J = 0; J < GSBPP; J++) {
2547 GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J; 2468 GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J;
2548 } 2469 }
2549 } 2470 }
2550 } 2471 }
2551 for (J = 0; J < GSBPP; J++) { 2472 for (J = 0; J < GSBPP; J++) {
2552 delete GSPLANES[J]; 2473 delete GSPLANES[J];
2553 } 2474 }
2554 FX_Free(GSPLANES); 2475 FX_Free(GSPLANES);
2555 delete pGRD;
2556 return GSVALS; 2476 return GSVALS;
2557 failed: 2477 failed:
2558 FX_Free(GSPLANES); 2478 FX_Free(GSPLANES);
2559 delete pGRD;
2560 FX_Free(GSVALS); 2479 FX_Free(GSVALS);
2561 return NULL; 2480 return NULL;
2562 } 2481 }
2482
2563 FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith( 2483 FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith(
2564 CJBig2_Image** pImage, 2484 CJBig2_Image** pImage,
2565 CJBig2_ArithDecoder* pArithDecoder, 2485 CJBig2_ArithDecoder* pArithDecoder,
2566 JBig2ArithCtx* gbContext, 2486 JBig2ArithCtx* gbContext,
2567 IFX_Pause* pPause) { 2487 IFX_Pause* pPause) {
2568 if (GBW == 0 || GBH == 0) { 2488 if (GBW == 0 || GBH == 0) {
2569 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; 2489 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
2570 return FXCODEC_STATUS_DECODE_FINISH; 2490 return FXCODEC_STATUS_DECODE_FINISH;
2571 } 2491 }
2572 m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY; 2492 m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY;
2573 m_pPause = pPause; 2493 m_pPause = pPause;
2574 if (!*pImage) 2494 if (!*pImage)
2575 *pImage = new CJBig2_Image(GBW, GBH); 2495 *pImage = new CJBig2_Image(GBW, GBH);
2576 if ((*pImage)->m_pData == NULL) { 2496 if ((*pImage)->m_pData == NULL) {
2577 delete *pImage; 2497 delete *pImage;
2578 *pImage = NULL; 2498 *pImage = NULL;
2579 m_ProssiveStatus = FXCODEC_STATUS_ERROR; 2499 m_ProssiveStatus = FXCODEC_STATUS_ERROR;
2580 return FXCODEC_STATUS_ERROR; 2500 return FXCODEC_STATUS_ERROR;
2581 } 2501 }
2582 m_DecodeType = 1; 2502 m_DecodeType = 1;
2583 m_pImage = pImage; 2503 m_pImage = pImage;
2584 (*m_pImage)->fill(0); 2504 (*m_pImage)->fill(0);
2585 m_pArithDecoder = pArithDecoder; 2505 m_pArithDecoder = pArithDecoder;
2586 m_gbContext = gbContext; 2506 m_gbContext = gbContext;
2587 LTP = 0; 2507 LTP = 0;
2588 m_pLine = NULL; 2508 m_pLine = NULL;
2589 m_loopIndex = 0; 2509 m_loopIndex = 0;
2590 return decode_Arith(pPause); 2510 return decode_Arith(pPause);
2591 } 2511 }
2512
2592 FXCODEC_STATUS CJBig2_GRDProc::decode_Arith(IFX_Pause* pPause) { 2513 FXCODEC_STATUS CJBig2_GRDProc::decode_Arith(IFX_Pause* pPause) {
2593 int iline = m_loopIndex; 2514 int iline = m_loopIndex;
2594 CJBig2_Image* pImage = *m_pImage; 2515 CJBig2_Image* pImage = *m_pImage;
2595 if (GBTEMPLATE == 0) { 2516 if (GBTEMPLATE == 0) {
2596 if ((GBAT[0] == 3) && (GBAT[1] == (int8_t)-1) && (GBAT[2] == (int8_t)-3) && 2517 if ((GBAT[0] == 3) && (GBAT[1] == (int8_t)-1) && (GBAT[2] == (int8_t)-3) &&
2597 (GBAT[3] == (int8_t)-1) && (GBAT[4] == 2) && (GBAT[5] == (int8_t)-2) && 2518 (GBAT[3] == (int8_t)-1) && (GBAT[4] == 2) && (GBAT[5] == (int8_t)-2) &&
2598 (GBAT[6] == (int8_t)-2) && (GBAT[7] == (int8_t)-2)) { 2519 (GBAT[6] == (int8_t)-2) && (GBAT[7] == (int8_t)-2)) {
2599 m_ProssiveStatus = decode_Arith_Template0_opt3(pImage, m_pArithDecoder, 2520 m_ProssiveStatus = decode_Arith_Template0_opt3(pImage, m_pArithDecoder,
2600 m_gbContext, pPause); 2521 m_gbContext, pPause);
2601 } else { 2522 } else {
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
2757 m_pLine += nStride; 2678 m_pLine += nStride;
2758 if (pPause && pPause->NeedToPauseNow()) { 2679 if (pPause && pPause->NeedToPauseNow()) {
2759 m_loopIndex++; 2680 m_loopIndex++;
2760 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; 2681 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
2761 return FXCODEC_STATUS_DECODE_TOBECONTINUE; 2682 return FXCODEC_STATUS_DECODE_TOBECONTINUE;
2762 } 2683 }
2763 } 2684 }
2764 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; 2685 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
2765 return FXCODEC_STATUS_DECODE_FINISH; 2686 return FXCODEC_STATUS_DECODE_FINISH;
2766 } 2687 }
2688
2767 FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_unopt( 2689 FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_unopt(
2768 CJBig2_Image* pImage, 2690 CJBig2_Image* pImage,
2769 CJBig2_ArithDecoder* pArithDecoder, 2691 CJBig2_ArithDecoder* pArithDecoder,
2770 JBig2ArithCtx* gbContext, 2692 JBig2ArithCtx* gbContext,
2771 IFX_Pause* pPause) { 2693 IFX_Pause* pPause) {
2772 FX_BOOL SLTP, bVal; 2694 FX_BOOL SLTP, bVal;
2773 FX_DWORD CONTEXT; 2695 FX_DWORD CONTEXT;
2774 FX_DWORD line1, line2, line3; 2696 FX_DWORD line1, line2, line3;
2775 for (; m_loopIndex < GBH; m_loopIndex++) { 2697 for (; m_loopIndex < GBH; m_loopIndex++) {
2776 if (TPGDON) { 2698 if (TPGDON) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2811 } 2733 }
2812 if (pPause && pPause->NeedToPauseNow()) { 2734 if (pPause && pPause->NeedToPauseNow()) {
2813 m_loopIndex++; 2735 m_loopIndex++;
2814 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; 2736 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
2815 return FXCODEC_STATUS_DECODE_TOBECONTINUE; 2737 return FXCODEC_STATUS_DECODE_TOBECONTINUE;
2816 } 2738 }
2817 } 2739 }
2818 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; 2740 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
2819 return FXCODEC_STATUS_DECODE_FINISH; 2741 return FXCODEC_STATUS_DECODE_FINISH;
2820 } 2742 }
2743
2821 FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_opt3( 2744 FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_opt3(
2822 CJBig2_Image* pImage, 2745 CJBig2_Image* pImage,
2823 CJBig2_ArithDecoder* pArithDecoder, 2746 CJBig2_ArithDecoder* pArithDecoder,
2824 JBig2ArithCtx* gbContext, 2747 JBig2ArithCtx* gbContext,
2825 IFX_Pause* pPause) { 2748 IFX_Pause* pPause) {
2826 FX_BOOL SLTP, bVal; 2749 FX_BOOL SLTP, bVal;
2827 FX_DWORD CONTEXT; 2750 FX_DWORD CONTEXT;
2828 FX_DWORD line1, line2; 2751 FX_DWORD line1, line2;
2829 uint8_t *pLine1, *pLine2, cVal; 2752 uint8_t *pLine1, *pLine2, cVal;
2830 int32_t nStride, nStride2, k; 2753 int32_t nStride, nStride2, k;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2904 m_pLine += nStride; 2827 m_pLine += nStride;
2905 if (pPause && pPause->NeedToPauseNow()) { 2828 if (pPause && pPause->NeedToPauseNow()) {
2906 m_loopIndex++; 2829 m_loopIndex++;
2907 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; 2830 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
2908 return FXCODEC_STATUS_DECODE_TOBECONTINUE; 2831 return FXCODEC_STATUS_DECODE_TOBECONTINUE;
2909 } 2832 }
2910 } 2833 }
2911 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; 2834 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
2912 return FXCODEC_STATUS_DECODE_FINISH; 2835 return FXCODEC_STATUS_DECODE_FINISH;
2913 } 2836 }
2837
2914 FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_unopt( 2838 FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_unopt(
2915 CJBig2_Image* pImage, 2839 CJBig2_Image* pImage,
2916 CJBig2_ArithDecoder* pArithDecoder, 2840 CJBig2_ArithDecoder* pArithDecoder,
2917 JBig2ArithCtx* gbContext, 2841 JBig2ArithCtx* gbContext,
2918 IFX_Pause* pPause) { 2842 IFX_Pause* pPause) {
2919 FX_BOOL SLTP, bVal; 2843 FX_BOOL SLTP, bVal;
2920 FX_DWORD CONTEXT; 2844 FX_DWORD CONTEXT;
2921 FX_DWORD line1, line2, line3; 2845 FX_DWORD line1, line2, line3;
2922 for (FX_DWORD h = 0; h < GBH; h++) { 2846 for (FX_DWORD h = 0; h < GBH; h++) {
2923 if (TPGDON) { 2847 if (TPGDON) {
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
3221 } 3145 }
3222 if (pPause && pPause->NeedToPauseNow()) { 3146 if (pPause && pPause->NeedToPauseNow()) {
3223 m_loopIndex++; 3147 m_loopIndex++;
3224 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; 3148 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
3225 return FXCODEC_STATUS_DECODE_TOBECONTINUE; 3149 return FXCODEC_STATUS_DECODE_TOBECONTINUE;
3226 } 3150 }
3227 } 3151 }
3228 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; 3152 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
3229 return FXCODEC_STATUS_DECODE_FINISH; 3153 return FXCODEC_STATUS_DECODE_FINISH;
3230 } 3154 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698