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

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

Issue 1328643002: Remove dead JBig2 code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: 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
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 #include "JBig2_ArithDecoder.h" 8 #include "JBig2_ArithDecoder.h"
9 #include "JBig2_ArithIntDecoder.h" 9 #include "JBig2_ArithIntDecoder.h"
10 #include "JBig2_HuffmanDecoder.h" 10 #include "JBig2_HuffmanDecoder.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 return decode_Arith_Template2_unopt(pArithDecoder, gbContext); 59 return decode_Arith_Template2_unopt(pArithDecoder, gbContext);
60 } 60 }
61 } else { 61 } else {
62 if ((GBAT[0] == 2) && (GBAT[1] == (int8_t)-1)) { 62 if ((GBAT[0] == 2) && (GBAT[1] == (int8_t)-1)) {
63 return decode_Arith_Template3_opt3(pArithDecoder, gbContext); 63 return decode_Arith_Template3_opt3(pArithDecoder, gbContext);
64 } else { 64 } else {
65 return decode_Arith_Template3_unopt(pArithDecoder, gbContext); 65 return decode_Arith_Template3_unopt(pArithDecoder, gbContext);
66 } 66 }
67 } 67 }
68 } 68 }
69 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt(
70 CJBig2_ArithDecoder* pArithDecoder,
71 JBig2ArithCtx* gbContext) {
72 FX_BOOL LTP, SLTP, bVal;
73 FX_DWORD CONTEXT;
74 CJBig2_Image* GBREG;
75 FX_DWORD line1, line2, line3;
76 LTP = 0;
77 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
78 GBREG->fill(0);
79 for (FX_DWORD h = 0; h < GBH; h++) {
80 if (TPGDON) {
81 SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
82 LTP = LTP ^ SLTP;
83 }
84 if (LTP == 1) {
85 GBREG->copyLine(h, h - 1);
86 } else {
87 line1 = GBREG->getPixel(2, h - 2);
88 line1 |= GBREG->getPixel(1, h - 2) << 1;
89 line1 |= GBREG->getPixel(0, h - 2) << 2;
90 line2 = GBREG->getPixel(3, h - 1);
91 line2 |= GBREG->getPixel(2, h - 1) << 1;
92 line2 |= GBREG->getPixel(1, h - 1) << 2;
93 line2 |= GBREG->getPixel(0, h - 1) << 3;
94 line3 = 0;
95 for (FX_DWORD w = 0; w < GBW; w++) {
96 if (USESKIP && SKIP->getPixel(w, h)) {
97 bVal = 0;
98 } else {
99 CONTEXT = line3;
100 CONTEXT |= line2 << 4;
101 CONTEXT |= line1 << 11;
102 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
103 }
104 if (bVal) {
105 GBREG->setPixel(w, h, bVal);
106 }
107 line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x1f;
108 line2 = ((line2 << 1) | GBREG->getPixel(w + 4, h - 1)) & 0x7f;
109 line3 = ((line3 << 1) | bVal) & 0x0f;
110 }
111 }
112 }
113 return GBREG;
114 }
115 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt2(
116 CJBig2_ArithDecoder* pArithDecoder,
117 JBig2ArithCtx* gbContext) {
118 FX_BOOL LTP, SLTP, bVal;
119 FX_DWORD CONTEXT;
120 CJBig2_Image* GBREG;
121 FX_DWORD line1, line2;
122 uint8_t *pLine, cVal;
123 intptr_t nStride, nStride2;
124 int32_t nBits, k;
125 LTP = 0;
126 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
127 if (GBREG->m_pData == NULL) {
128 delete GBREG;
129 m_pModule->JBig2_Error(
130 "Generic region decoding procedure: Create Image Failed with width = "
131 "%d, height = %d\n",
132 GBW, GBH);
133 return NULL;
134 }
135 pLine = GBREG->m_pData;
136 nStride = GBREG->m_nStride;
137 nStride2 = nStride << 1;
138 for (FX_DWORD h = 0; h < GBH; h++) {
139 if (TPGDON) {
140 SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
141 LTP = LTP ^ SLTP;
142 }
143 if (LTP == 1) {
144 GBREG->copyLine(h, h - 1);
145 } else {
146 line1 = (h > 1) ? pLine[-nStride2] << 6 : 0;
147 line2 = (h > 0) ? pLine[-nStride] : 0;
148 CONTEXT = (line1 & 0xf800) | (line2 & 0x07f0);
149 for (FX_DWORD w = 0; w < GBW; w += 8) {
150 if (w + 8 < GBW) {
151 nBits = 8;
152 if (h > 1) {
153 line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 6);
154 }
155 if (h > 0) {
156 line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
157 }
158 } else {
159 nBits = GBW - w;
160 if (h > 1) {
161 line1 <<= 8;
162 }
163 if (h > 0) {
164 line2 <<= 8;
165 }
166 }
167 cVal = 0;
168 for (k = 0; k < nBits; k++) {
169 if (USESKIP && SKIP->getPixel(w, h)) {
170 bVal = 0;
171 } else {
172 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
173 }
174 cVal |= bVal << (7 - k);
175 CONTEXT = ((CONTEXT & 0x7bf7) << 1) | bVal |
176 ((line1 >> (7 - k)) & 0x0800) |
177 ((line2 >> (7 - k)) & 0x0010);
178 }
179 pLine[w >> 3] = cVal;
180 }
181 }
182 pLine += nStride;
183 }
184 return GBREG;
185 }
186 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3( 69 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3(
187 CJBig2_ArithDecoder* pArithDecoder, 70 CJBig2_ArithDecoder* pArithDecoder,
188 JBig2ArithCtx* gbContext) { 71 JBig2ArithCtx* gbContext) {
189 FX_BOOL LTP, SLTP, bVal; 72 FX_BOOL LTP, SLTP, bVal;
190 FX_DWORD CONTEXT; 73 FX_DWORD CONTEXT;
191 CJBig2_Image* GBREG; 74 CJBig2_Image* GBREG;
192 FX_DWORD line1, line2; 75 FX_DWORD line1, line2;
193 uint8_t *pLine, *pLine1, *pLine2, cVal; 76 uint8_t *pLine, *pLine1, *pLine2, cVal;
194 int32_t nStride, nStride2, k; 77 int32_t nStride, nStride2, k;
195 int32_t nLineBytes, nBitsLeft, cc; 78 int32_t nLineBytes, nBitsLeft, cc;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 GBREG->setPixel(w, h, bVal); 202 GBREG->setPixel(w, h, bVal);
320 } 203 }
321 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07; 204 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
322 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f; 205 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
323 line3 = ((line3 << 1) | bVal) & 0x0f; 206 line3 = ((line3 << 1) | bVal) & 0x0f;
324 } 207 }
325 } 208 }
326 } 209 }
327 return GBREG; 210 return GBREG;
328 } 211 }
329 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt(
330 CJBig2_ArithDecoder* pArithDecoder,
331 JBig2ArithCtx* gbContext) {
332 FX_BOOL LTP, SLTP, bVal;
333 FX_DWORD CONTEXT;
334 CJBig2_Image* GBREG;
335 FX_DWORD line1, line2, line3;
336 LTP = 0;
337 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
338 GBREG->fill(0);
339 for (FX_DWORD h = 0; h < GBH; h++) {
340 if (TPGDON) {
341 SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
342 LTP = LTP ^ SLTP;
343 }
344 if (LTP == 1) {
345 GBREG->copyLine(h, h - 1);
346 } else {
347 line1 = GBREG->getPixel(2, h - 2);
348 line1 |= GBREG->getPixel(1, h - 2) << 1;
349 line1 |= GBREG->getPixel(0, h - 2) << 2;
350 line2 = GBREG->getPixel(3, h - 1);
351 line2 |= GBREG->getPixel(2, h - 1) << 1;
352 line2 |= GBREG->getPixel(1, h - 1) << 2;
353 line2 |= GBREG->getPixel(0, h - 1) << 3;
354 line3 = 0;
355 for (FX_DWORD w = 0; w < GBW; w++) {
356 if (USESKIP && SKIP->getPixel(w, h)) {
357 bVal = 0;
358 } else {
359 CONTEXT = line3;
360 CONTEXT |= line2 << 3;
361 CONTEXT |= line1 << 9;
362 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
363 }
364 if (bVal) {
365 GBREG->setPixel(w, h, bVal);
366 }
367 line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
368 line2 = ((line2 << 1) | GBREG->getPixel(w + 4, h - 1)) & 0x3f;
369 line3 = ((line3 << 1) | bVal) & 0x07;
370 }
371 }
372 }
373 return GBREG;
374 }
375 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt2(
376 CJBig2_ArithDecoder* pArithDecoder,
377 JBig2ArithCtx* gbContext) {
378 FX_BOOL LTP, SLTP, bVal;
379 FX_DWORD CONTEXT;
380 CJBig2_Image* GBREG;
381 FX_DWORD line1, line2;
382 uint8_t *pLine, cVal;
383 intptr_t nStride, nStride2;
384 int32_t nBits, k;
385 LTP = 0;
386 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
387 if (GBREG->m_pData == NULL) {
388 delete GBREG;
389 m_pModule->JBig2_Error(
390 "Generic region decoding procedure: Create Image Failed with width = "
391 "%d, height = %d\n",
392 GBW, GBH);
393 return NULL;
394 }
395 pLine = GBREG->m_pData;
396 nStride = GBREG->m_nStride;
397 nStride2 = nStride << 1;
398 for (FX_DWORD h = 0; h < GBH; h++) {
399 if (TPGDON) {
400 SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
401 LTP = LTP ^ SLTP;
402 }
403 if (LTP == 1) {
404 GBREG->copyLine(h, h - 1);
405 } else {
406 line1 = (h > 1) ? pLine[-nStride2] << 4 : 0;
407 line2 = (h > 0) ? pLine[-nStride] : 0;
408 CONTEXT = (line1 & 0x1e00) | ((line2 >> 1) & 0x01f8);
409 for (FX_DWORD w = 0; w < GBW; w += 8) {
410 if (w + 8 < GBW) {
411 nBits = 8;
412 if (h > 1) {
413 line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 4);
414 }
415 if (h > 0) {
416 line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
417 }
418 } else {
419 nBits = GBW - w;
420 if (h > 1) {
421 line1 <<= 8;
422 }
423 if (h > 0) {
424 line2 <<= 8;
425 }
426 }
427 cVal = 0;
428 for (k = 0; k < nBits; k++) {
429 if (USESKIP && SKIP->getPixel(w, h)) {
430 bVal = 0;
431 } else {
432 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
433 }
434 cVal |= bVal << (7 - k);
435 CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal |
436 ((line1 >> (7 - k)) & 0x0200) |
437 ((line2 >> (8 - k)) & 0x0008);
438 }
439 pLine[w >> 3] = cVal;
440 }
441 }
442 pLine += nStride;
443 }
444 return GBREG;
445 }
446 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3( 212 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3(
447 CJBig2_ArithDecoder* pArithDecoder, 213 CJBig2_ArithDecoder* pArithDecoder,
448 JBig2ArithCtx* gbContext) { 214 JBig2ArithCtx* gbContext) {
449 FX_BOOL LTP, SLTP, bVal; 215 FX_BOOL LTP, SLTP, bVal;
450 FX_DWORD CONTEXT; 216 FX_DWORD CONTEXT;
451 CJBig2_Image* GBREG; 217 CJBig2_Image* GBREG;
452 FX_DWORD line1, line2; 218 FX_DWORD line1, line2;
453 uint8_t *pLine, *pLine1, *pLine2, cVal; 219 uint8_t *pLine, *pLine1, *pLine2, cVal;
454 int32_t nStride, nStride2, k; 220 int32_t nStride, nStride2, k;
455 int32_t nLineBytes, nBitsLeft, cc; 221 int32_t nLineBytes, nBitsLeft, cc;
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 GBREG->setPixel(w, h, bVal); 342 GBREG->setPixel(w, h, bVal);
577 } 343 }
578 line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f; 344 line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
579 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f; 345 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
580 line3 = ((line3 << 1) | bVal) & 0x07; 346 line3 = ((line3 << 1) | bVal) & 0x07;
581 } 347 }
582 } 348 }
583 } 349 }
584 return GBREG; 350 return GBREG;
585 } 351 }
586 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt(
587 CJBig2_ArithDecoder* pArithDecoder,
588 JBig2ArithCtx* gbContext) {
589 FX_BOOL LTP, SLTP, bVal;
590 FX_DWORD CONTEXT;
591 CJBig2_Image* GBREG;
592 FX_DWORD line1, line2, line3;
593 LTP = 0;
594 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
595 GBREG->fill(0);
596 for (FX_DWORD h = 0; h < GBH; h++) {
597 if (TPGDON) {
598 SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
599 LTP = LTP ^ SLTP;
600 }
601 if (LTP == 1) {
602 GBREG->copyLine(h, h - 1);
603 } else {
604 line1 = GBREG->getPixel(1, h - 2);
605 line1 |= GBREG->getPixel(0, h - 2) << 1;
606 line2 = GBREG->getPixel(2, h - 1);
607 line2 |= GBREG->getPixel(1, h - 1) << 1;
608 line2 |= GBREG->getPixel(0, h - 1) << 2;
609 line3 = 0;
610 for (FX_DWORD w = 0; w < GBW; w++) {
611 if (USESKIP && SKIP->getPixel(w, h)) {
612 bVal = 0;
613 } else {
614 CONTEXT = line3;
615 CONTEXT |= line2 << 2;
616 CONTEXT |= line1 << 7;
617 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
618 }
619 if (bVal) {
620 GBREG->setPixel(w, h, bVal);
621 }
622 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
623 line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
624 line3 = ((line3 << 1) | bVal) & 0x03;
625 }
626 }
627 }
628 return GBREG;
629 }
630 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt2(
631 CJBig2_ArithDecoder* pArithDecoder,
632 JBig2ArithCtx* gbContext) {
633 FX_BOOL LTP, SLTP, bVal;
634 FX_DWORD CONTEXT;
635 CJBig2_Image* GBREG;
636 FX_DWORD line1, line2;
637 uint8_t *pLine, cVal;
638 intptr_t nStride, nStride2;
639 int32_t nBits, k;
640 LTP = 0;
641 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
642 if (GBREG->m_pData == NULL) {
643 delete GBREG;
644 m_pModule->JBig2_Error(
645 "Generic region decoding procedure: Create Image Failed with width = "
646 "%d, height = %d\n",
647 GBW, GBH);
648 return NULL;
649 }
650 pLine = GBREG->m_pData;
651 nStride = GBREG->m_nStride;
652 nStride2 = nStride << 1;
653 for (FX_DWORD h = 0; h < GBH; h++) {
654 if (TPGDON) {
655 SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
656 LTP = LTP ^ SLTP;
657 }
658 if (LTP == 1) {
659 GBREG->copyLine(h, h - 1);
660 } else {
661 line1 = (h > 1) ? pLine[-nStride2] << 1 : 0;
662 line2 = (h > 0) ? pLine[-nStride] : 0;
663 CONTEXT = (line1 & 0x0380) | ((line2 >> 3) & 0x007c);
664 for (FX_DWORD w = 0; w < GBW; w += 8) {
665 if (w + 8 < GBW) {
666 nBits = 8;
667 if (h > 1) {
668 line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 1);
669 }
670 if (h > 0) {
671 line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
672 }
673 } else {
674 nBits = GBW - w;
675 if (h > 1) {
676 line1 <<= 8;
677 }
678 if (h > 0) {
679 line2 <<= 8;
680 }
681 }
682 cVal = 0;
683 for (k = 0; k < nBits; k++) {
684 if (USESKIP && SKIP->getPixel(w, h)) {
685 bVal = 0;
686 } else {
687 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
688 }
689 cVal |= bVal << (7 - k);
690 CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
691 ((line1 >> (7 - k)) & 0x0080) |
692 ((line2 >> (10 - k)) & 0x0004);
693 }
694 pLine[w >> 3] = cVal;
695 }
696 }
697 pLine += nStride;
698 }
699 return GBREG;
700 }
701 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3( 352 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3(
702 CJBig2_ArithDecoder* pArithDecoder, 353 CJBig2_ArithDecoder* pArithDecoder,
703 JBig2ArithCtx* gbContext) { 354 JBig2ArithCtx* gbContext) {
704 FX_BOOL LTP, SLTP, bVal; 355 FX_BOOL LTP, SLTP, bVal;
705 FX_DWORD CONTEXT; 356 FX_DWORD CONTEXT;
706 CJBig2_Image* GBREG; 357 CJBig2_Image* GBREG;
707 FX_DWORD line1, line2; 358 FX_DWORD line1, line2;
708 uint8_t *pLine, *pLine1, *pLine2, cVal; 359 uint8_t *pLine, *pLine1, *pLine2, cVal;
709 int32_t nStride, nStride2, k; 360 int32_t nStride, nStride2, k;
710 int32_t nLineBytes, nBitsLeft, cc; 361 int32_t nLineBytes, nBitsLeft, cc;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 GBREG->setPixel(w, h, bVal); 480 GBREG->setPixel(w, h, bVal);
830 } 481 }
831 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07; 482 line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
832 line2 = ((line2 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x0f; 483 line2 = ((line2 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x0f;
833 line3 = ((line3 << 1) | bVal) & 0x03; 484 line3 = ((line3 << 1) | bVal) & 0x03;
834 } 485 }
835 } 486 }
836 } 487 }
837 return GBREG; 488 return GBREG;
838 } 489 }
839 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt(
840 CJBig2_ArithDecoder* pArithDecoder,
841 JBig2ArithCtx* gbContext) {
842 FX_BOOL LTP, SLTP, bVal;
843 FX_DWORD CONTEXT;
844 CJBig2_Image* GBREG;
845 FX_DWORD line1, line2;
846 LTP = 0;
847 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
848 GBREG->fill(0);
849 for (FX_DWORD h = 0; h < GBH; h++) {
850 if (TPGDON) {
851 SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
852 LTP = LTP ^ SLTP;
853 }
854 if (LTP == 1) {
855 GBREG->copyLine(h, h - 1);
856 } else {
857 line1 = GBREG->getPixel(2, h - 1);
858 line1 |= GBREG->getPixel(1, h - 1) << 1;
859 line1 |= GBREG->getPixel(0, h - 1) << 2;
860 line2 = 0;
861 for (FX_DWORD w = 0; w < GBW; w++) {
862 if (USESKIP && SKIP->getPixel(w, h)) {
863 bVal = 0;
864 } else {
865 CONTEXT = line2;
866 CONTEXT |= line1 << 4;
867 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
868 }
869 if (bVal) {
870 GBREG->setPixel(w, h, bVal);
871 }
872 line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x3f;
873 line2 = ((line2 << 1) | bVal) & 0x0f;
874 }
875 }
876 }
877 return GBREG;
878 }
879 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt2(
880 CJBig2_ArithDecoder* pArithDecoder,
881 JBig2ArithCtx* gbContext) {
882 FX_BOOL LTP, SLTP, bVal;
883 FX_DWORD CONTEXT;
884 CJBig2_Image* GBREG;
885 FX_DWORD line1;
886 uint8_t *pLine, cVal;
887 intptr_t nStride;
888 int32_t nBits, k;
889 LTP = 0;
890 JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
891 if (GBREG->m_pData == NULL) {
892 delete GBREG;
893 m_pModule->JBig2_Error(
894 "Generic region decoding procedure: Create Image Failed with width = "
895 "%d, height = %d\n",
896 GBW, GBH);
897 return NULL;
898 }
899 pLine = GBREG->m_pData;
900 nStride = GBREG->m_nStride;
901 for (FX_DWORD h = 0; h < GBH; h++) {
902 if (TPGDON) {
903 SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
904 LTP = LTP ^ SLTP;
905 }
906 if (LTP == 1) {
907 GBREG->copyLine(h, h - 1);
908 } else {
909 line1 = (h > 0) ? pLine[-nStride] : 0;
910 CONTEXT = (line1 >> 1) & 0x03f0;
911 for (FX_DWORD w = 0; w < GBW; w += 8) {
912 if (w + 8 < GBW) {
913 nBits = 8;
914 if (h > 0) {
915 line1 = (line1 << 8) | (pLine[-nStride + (w >> 3) + 1]);
916 }
917 } else {
918 nBits = GBW - w;
919 if (h > 0) {
920 line1 <<= 8;
921 }
922 }
923 cVal = 0;
924 for (k = 0; k < nBits; k++) {
925 if (USESKIP && SKIP->getPixel(w, h)) {
926 bVal = 0;
927 } else {
928 bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
929 }
930 cVal |= bVal << (7 - k);
931 CONTEXT =
932 ((CONTEXT & 0x01f7) << 1) | bVal | ((line1 >> (8 - k)) & 0x0010);
933 }
934 pLine[w >> 3] = cVal;
935 }
936 }
937 pLine += nStride;
938 }
939 return GBREG;
940 }
941 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3( 490 CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3(
942 CJBig2_ArithDecoder* pArithDecoder, 491 CJBig2_ArithDecoder* pArithDecoder,
943 JBig2ArithCtx* gbContext) { 492 JBig2ArithCtx* gbContext) {
944 FX_BOOL LTP, SLTP, bVal; 493 FX_BOOL LTP, SLTP, bVal;
945 FX_DWORD CONTEXT; 494 FX_DWORD CONTEXT;
946 CJBig2_Image* GBREG; 495 CJBig2_Image* GBREG;
947 FX_DWORD line1; 496 FX_DWORD line1;
948 uint8_t *pLine, *pLine1, cVal; 497 uint8_t *pLine, *pLine1, cVal;
949 int32_t nStride, k; 498 int32_t nStride, k;
950 int32_t nLineBytes, nBitsLeft, cc; 499 int32_t nLineBytes, nBitsLeft, cc;
(...skipping 2927 matching lines...) Expand 10 before | Expand all | Expand 10 after
3878 } 3427 }
3879 if (pPause && pPause->NeedToPauseNow()) { 3428 if (pPause && pPause->NeedToPauseNow()) {
3880 m_loopIndex++; 3429 m_loopIndex++;
3881 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; 3430 m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
3882 return FXCODEC_STATUS_DECODE_TOBECONTINUE; 3431 return FXCODEC_STATUS_DECODE_TOBECONTINUE;
3883 } 3432 }
3884 } 3433 }
3885 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH; 3434 m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
3886 return FXCODEC_STATUS_DECODE_FINISH; 3435 return FXCODEC_STATUS_DECODE_FINISH;
3887 } 3436 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_GeneralDecoder.h ('k') | core/src/fxcodec/jbig2/JBig2_HuffmanTable.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698