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

Side by Side Diff: core/fxcodec/jbig2/JBig2_TrdProc.cpp

Issue 1801383002: Re-enable several MSVC warnings (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: rebase again Created 4 years, 9 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 | « core/fxcodec/jbig2/JBig2_Image.cpp ('k') | core/fxcrt/fx_basic_maps.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 PDFium Authors. All rights reserved. 1 // Copyright 2015 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 "core/fxcodec/jbig2/JBig2_TrdProc.h" 7 #include "core/fxcodec/jbig2/JBig2_TrdProc.h"
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "core/fxcodec/jbig2/JBig2_ArithDecoder.h" 11 #include "core/fxcodec/jbig2/JBig2_ArithDecoder.h"
12 #include "core/fxcodec/jbig2/JBig2_ArithIntDecoder.h" 12 #include "core/fxcodec/jbig2/JBig2_ArithIntDecoder.h"
13 #include "core/fxcodec/jbig2/JBig2_GrrdProc.h" 13 #include "core/fxcodec/jbig2/JBig2_GrrdProc.h"
14 #include "core/fxcodec/jbig2/JBig2_HuffmanDecoder.h" 14 #include "core/fxcodec/jbig2/JBig2_HuffmanDecoder.h"
15 15
16 CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream, 16 CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream,
17 JBig2ArithCtx* grContext) { 17 JBig2ArithCtx* grContext) {
18 int32_t STRIPT, FIRSTS;
19 FX_DWORD NINSTANCES;
20 int32_t DT, DFS, CURS;
21 int32_t SI, TI;
22 CJBig2_Image* IBI;
23 FX_DWORD WI, HI;
24 int32_t IDS;
25 FX_BOOL RI;
26 int32_t RDWI, RDHI, RDXI, RDYI;
27 CJBig2_Image* IBOI;
28 FX_DWORD WOI, HOI;
29 FX_BOOL bFirst;
30 FX_DWORD nTmp;
31 int32_t nVal, nBits;
32 std::unique_ptr<CJBig2_HuffmanDecoder> pHuffmanDecoder( 18 std::unique_ptr<CJBig2_HuffmanDecoder> pHuffmanDecoder(
33 new CJBig2_HuffmanDecoder(pStream)); 19 new CJBig2_HuffmanDecoder(pStream));
34 std::unique_ptr<CJBig2_Image> SBREG(new CJBig2_Image(SBW, SBH)); 20 std::unique_ptr<CJBig2_Image> SBREG(new CJBig2_Image(SBW, SBH));
35 SBREG->fill(SBDEFPIXEL); 21 SBREG->fill(SBDEFPIXEL);
22 int32_t STRIPT;
36 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0) 23 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0)
37 return nullptr; 24 return nullptr;
38 25
39 STRIPT *= SBSTRIPS; 26 STRIPT *= SBSTRIPS;
40 STRIPT = -STRIPT; 27 STRIPT = -STRIPT;
41 FIRSTS = 0; 28 FX_DWORD NINSTANCES = 0;
42 NINSTANCES = 0;
43 while (NINSTANCES < SBNUMINSTANCES) { 29 while (NINSTANCES < SBNUMINSTANCES) {
30 int32_t DT;
44 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0) 31 if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0)
45 return nullptr; 32 return nullptr;
46 33
47 DT *= SBSTRIPS; 34 DT *= SBSTRIPS;
48 STRIPT = STRIPT + DT; 35 STRIPT = STRIPT + DT;
49 bFirst = TRUE; 36 bool bFirst = true;
37 int32_t FIRSTS = 0;
38 int32_t CURS = 0;
50 for (;;) { 39 for (;;) {
51 if (bFirst) { 40 if (bFirst) {
41 int32_t DFS;
52 if (pHuffmanDecoder->decodeAValue(SBHUFFFS, &DFS) != 0) 42 if (pHuffmanDecoder->decodeAValue(SBHUFFFS, &DFS) != 0)
53 return nullptr; 43 return nullptr;
54 44
55 FIRSTS = FIRSTS + DFS; 45 FIRSTS = FIRSTS + DFS;
56 CURS = FIRSTS; 46 CURS = FIRSTS;
57 bFirst = FALSE; 47 bFirst = false;
58 } else { 48 } else {
59 nVal = pHuffmanDecoder->decodeAValue(SBHUFFDS, &IDS); 49 int32_t IDS;
50 int32_t nVal = pHuffmanDecoder->decodeAValue(SBHUFFDS, &IDS);
60 if (nVal == JBIG2_OOB) { 51 if (nVal == JBIG2_OOB) {
61 break; 52 break;
62 } else if (nVal != 0) { 53 } else if (nVal != 0) {
63 return nullptr; 54 return nullptr;
64 } else { 55 } else {
65 CURS = CURS + IDS + SBDSOFFSET; 56 CURS = CURS + IDS + SBDSOFFSET;
66 } 57 }
67 } 58 }
68 uint8_t CURT = 0; 59 uint8_t CURT = 0;
69 if (SBSTRIPS != 1) { 60 if (SBSTRIPS != 1) {
70 nTmp = 1; 61 FX_DWORD nTmp = 1;
71 while ((FX_DWORD)(1 << nTmp) < SBSTRIPS) { 62 while ((FX_DWORD)(1 << nTmp) < SBSTRIPS) {
72 nTmp++; 63 nTmp++;
73 } 64 }
65 int32_t nVal;
74 if (pStream->readNBits(nTmp, &nVal) != 0) 66 if (pStream->readNBits(nTmp, &nVal) != 0)
75 return nullptr; 67 return nullptr;
76 68
77 CURT = nVal; 69 CURT = nVal;
78 } 70 }
79 TI = STRIPT + CURT; 71 int32_t TI = STRIPT + CURT;
80 nVal = 0; 72 int32_t nVal = 0;
81 nBits = 0; 73 int32_t nBits = 0;
82 FX_DWORD IDI; 74 FX_DWORD IDI;
83 for (;;) { 75 for (;;) {
76 FX_DWORD nTmp;
84 if (pStream->read1Bit(&nTmp) != 0) 77 if (pStream->read1Bit(&nTmp) != 0)
85 return nullptr; 78 return nullptr;
86 79
87 nVal = (nVal << 1) | nTmp; 80 nVal = (nVal << 1) | nTmp;
88 nBits++; 81 nBits++;
89 for (IDI = 0; IDI < SBNUMSYMS; IDI++) { 82 for (IDI = 0; IDI < SBNUMSYMS; IDI++) {
90 if ((nBits == SBSYMCODES[IDI].codelen) && 83 if ((nBits == SBSYMCODES[IDI].codelen) &&
91 (nVal == SBSYMCODES[IDI].code)) { 84 (nVal == SBSYMCODES[IDI].code)) {
92 break; 85 break;
93 } 86 }
94 } 87 }
95 if (IDI < SBNUMSYMS) { 88 if (IDI < SBNUMSYMS) {
96 break; 89 break;
97 } 90 }
98 } 91 }
99 if (SBREFINE == 0) { 92 FX_BOOL RI = 0;
100 RI = 0; 93 if (SBREFINE != 0 && pStream->read1Bit(&RI) != 0) {
101 } else { 94 return nullptr;
102 if (pStream->read1Bit(&RI) != 0) {
103 return nullptr;
104 }
105 } 95 }
96 CJBig2_Image* IBI = nullptr;
106 if (RI == 0) { 97 if (RI == 0) {
107 IBI = SBSYMS[IDI]; 98 IBI = SBSYMS[IDI];
108 } else { 99 } else {
100 int32_t RDWI;
101 int32_t RDHI;
102 int32_t RDXI;
103 int32_t RDYI;
109 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDW, &RDWI) != 0) || 104 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDW, &RDWI) != 0) ||
110 (pHuffmanDecoder->decodeAValue(SBHUFFRDH, &RDHI) != 0) || 105 (pHuffmanDecoder->decodeAValue(SBHUFFRDH, &RDHI) != 0) ||
111 (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) || 106 (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) ||
112 (pHuffmanDecoder->decodeAValue(SBHUFFRDY, &RDYI) != 0) || 107 (pHuffmanDecoder->decodeAValue(SBHUFFRDY, &RDYI) != 0) ||
113 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) { 108 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) {
114 return nullptr; 109 return nullptr;
115 } 110 }
116 pStream->alignByte(); 111 pStream->alignByte();
117 nTmp = pStream->getOffset(); 112 FX_DWORD nTmp = pStream->getOffset();
118 IBOI = SBSYMS[IDI]; 113 CJBig2_Image* IBOI = SBSYMS[IDI];
119 if (!IBOI) 114 if (!IBOI)
120 return nullptr; 115 return nullptr;
121 116
122 WOI = IBOI->m_nWidth; 117 FX_DWORD WOI = IBOI->m_nWidth;
123 HOI = IBOI->m_nHeight; 118 FX_DWORD HOI = IBOI->m_nHeight;
124 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) 119 if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0)
125 return nullptr; 120 return nullptr;
126 121
127 std::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc()); 122 std::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc());
128 pGRRD->GRW = WOI + RDWI; 123 pGRRD->GRW = WOI + RDWI;
129 pGRRD->GRH = HOI + RDHI; 124 pGRRD->GRH = HOI + RDHI;
130 pGRRD->GRTEMPLATE = SBRTEMPLATE; 125 pGRRD->GRTEMPLATE = SBRTEMPLATE;
131 pGRRD->GRREFERENCE = IBOI; 126 pGRRD->GRREFERENCE = IBOI;
132 pGRRD->GRREFERENCEDX = (RDWI >> 2) + RDXI; 127 pGRRD->GRREFERENCEDX = (RDWI >> 2) + RDXI;
133 pGRRD->GRREFERENCEDY = (RDHI >> 2) + RDYI; 128 pGRRD->GRREFERENCEDY = (RDHI >> 2) + RDYI;
(...skipping 14 matching lines...) Expand all
148 pStream->alignByte(); 143 pStream->alignByte();
149 pStream->offset(2); 144 pStream->offset(2);
150 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) { 145 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) {
151 delete IBI; 146 delete IBI;
152 return nullptr; 147 return nullptr;
153 } 148 }
154 } 149 }
155 if (!IBI) { 150 if (!IBI) {
156 continue; 151 continue;
157 } 152 }
158 WI = IBI->m_nWidth; 153 FX_DWORD WI = IBI->m_nWidth;
159 HI = IBI->m_nHeight; 154 FX_DWORD HI = IBI->m_nHeight;
160 if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT) || 155 if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT) ||
161 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) { 156 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
162 CURS = CURS + WI - 1; 157 CURS = CURS + WI - 1;
163 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT) || 158 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT) ||
164 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) { 159 (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
165 CURS = CURS + HI - 1; 160 CURS = CURS + HI - 1;
166 } 161 }
167 SI = CURS; 162 int32_t SI = CURS;
168 if (TRANSPOSED == 0) { 163 if (TRANSPOSED == 0) {
169 switch (REFCORNER) { 164 switch (REFCORNER) {
170 case JBIG2_CORNER_TOPLEFT: 165 case JBIG2_CORNER_TOPLEFT:
171 SBREG->composeFrom(SI, TI, IBI, SBCOMBOP); 166 SBREG->composeFrom(SI, TI, IBI, SBCOMBOP);
172 break; 167 break;
173 case JBIG2_CORNER_TOPRIGHT: 168 case JBIG2_CORNER_TOPRIGHT:
174 SBREG->composeFrom(SI - WI + 1, TI, IBI, SBCOMBOP); 169 SBREG->composeFrom(SI - WI + 1, TI, IBI, SBCOMBOP);
175 break; 170 break;
176 case JBIG2_CORNER_BOTTOMLEFT: 171 case JBIG2_CORNER_BOTTOMLEFT:
177 SBREG->composeFrom(SI, TI - HI + 1, IBI, SBCOMBOP); 172 SBREG->composeFrom(SI, TI - HI + 1, IBI, SBCOMBOP);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 } 265 }
271 std::unique_ptr<CJBig2_Image> SBREG(new CJBig2_Image(SBW, SBH)); 266 std::unique_ptr<CJBig2_Image> SBREG(new CJBig2_Image(SBW, SBH));
272 SBREG->fill(SBDEFPIXEL); 267 SBREG->fill(SBDEFPIXEL);
273 int32_t STRIPT; 268 int32_t STRIPT;
274 pIADT->decode(pArithDecoder, &STRIPT); 269 pIADT->decode(pArithDecoder, &STRIPT);
275 STRIPT *= SBSTRIPS; 270 STRIPT *= SBSTRIPS;
276 STRIPT = -STRIPT; 271 STRIPT = -STRIPT;
277 int32_t FIRSTS = 0; 272 int32_t FIRSTS = 0;
278 FX_DWORD NINSTANCES = 0; 273 FX_DWORD NINSTANCES = 0;
279 while (NINSTANCES < SBNUMINSTANCES) { 274 while (NINSTANCES < SBNUMINSTANCES) {
280 int32_t CURS; 275 int32_t CURS = 0;
281 int32_t DT; 276 int32_t DT;
282 pIADT->decode(pArithDecoder, &DT); 277 pIADT->decode(pArithDecoder, &DT);
283 DT *= SBSTRIPS; 278 DT *= SBSTRIPS;
284 STRIPT += DT; 279 STRIPT += DT;
285 bool bFirst = true; 280 bool bFirst = true;
286 for (;;) { 281 for (;;) {
287 if (bFirst) { 282 if (bFirst) {
288 int32_t DFS; 283 int32_t DFS;
289 pIAFS->decode(pArithDecoder, &DFS); 284 pIAFS->decode(pArithDecoder, &DFS);
290 FIRSTS += DFS; 285 FIRSTS += DFS;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 CURS += WI - 1; 393 CURS += WI - 1;
399 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) || 394 } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) ||
400 (REFCORNER == JBIG2_CORNER_TOPRIGHT))) { 395 (REFCORNER == JBIG2_CORNER_TOPRIGHT))) {
401 CURS += HI - 1; 396 CURS += HI - 1;
402 } 397 }
403 ++NINSTANCES; 398 ++NINSTANCES;
404 } 399 }
405 } 400 }
406 return SBREG.release(); 401 return SBREG.release();
407 } 402 }
OLDNEW
« no previous file with comments | « core/fxcodec/jbig2/JBig2_Image.cpp ('k') | core/fxcrt/fx_basic_maps.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698