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

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

Issue 1547833002: Switch from nonstd::unique_ptr to std::unique_ptr. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: rebase Created 4 years, 12 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/src/fxcodec/jbig2/JBig2_PddProc.cpp ('k') | core/src/fxcodec/jbig2/JBig2_SymbolDict.h » ('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/src/fxcodec/jbig2/JBig2_SddProc.h" 7 #include "core/src/fxcodec/jbig2/JBig2_SddProc.h"
8 8
9 #include <memory>
9 #include <vector> 10 #include <vector>
10 11
11 #include "core/include/fxcrt/fx_basic.h" 12 #include "core/include/fxcrt/fx_basic.h"
12 #include "core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.h" 13 #include "core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.h"
13 #include "core/src/fxcodec/jbig2/JBig2_GrdProc.h" 14 #include "core/src/fxcodec/jbig2/JBig2_GrdProc.h"
14 #include "core/src/fxcodec/jbig2/JBig2_GrrdProc.h" 15 #include "core/src/fxcodec/jbig2/JBig2_GrrdProc.h"
15 #include "core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.h" 16 #include "core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.h"
16 #include "core/src/fxcodec/jbig2/JBig2_HuffmanTable.h" 17 #include "core/src/fxcodec/jbig2/JBig2_HuffmanTable.h"
17 #include "core/src/fxcodec/jbig2/JBig2_HuffmanTable_Standard.h" 18 #include "core/src/fxcodec/jbig2/JBig2_HuffmanTable_Standard.h"
18 #include "core/src/fxcodec/jbig2/JBig2_SymbolDict.h" 19 #include "core/src/fxcodec/jbig2/JBig2_SymbolDict.h"
19 #include "core/src/fxcodec/jbig2/JBig2_TrdProc.h" 20 #include "core/src/fxcodec/jbig2/JBig2_TrdProc.h"
20 #include "third_party/base/nonstd_unique_ptr.h"
21 21
22 CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith( 22 CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith(
23 CJBig2_ArithDecoder* pArithDecoder, 23 CJBig2_ArithDecoder* pArithDecoder,
24 std::vector<JBig2ArithCtx>* gbContext, 24 std::vector<JBig2ArithCtx>* gbContext,
25 std::vector<JBig2ArithCtx>* grContext) { 25 std::vector<JBig2ArithCtx>* grContext) {
26 CJBig2_Image** SDNEWSYMS; 26 CJBig2_Image** SDNEWSYMS;
27 FX_DWORD HCHEIGHT, NSYMSDECODED; 27 FX_DWORD HCHEIGHT, NSYMSDECODED;
28 int32_t HCDH; 28 int32_t HCDH;
29 FX_DWORD SYMWIDTH, TOTWIDTH; 29 FX_DWORD SYMWIDTH, TOTWIDTH;
30 int32_t DW; 30 int32_t DW;
31 CJBig2_Image* BS; 31 CJBig2_Image* BS;
32 FX_DWORD I, J, REFAGGNINST; 32 FX_DWORD I, J, REFAGGNINST;
33 FX_BOOL* EXFLAGS; 33 FX_BOOL* EXFLAGS;
34 FX_DWORD EXINDEX; 34 FX_DWORD EXINDEX;
35 FX_BOOL CUREXFLAG; 35 FX_BOOL CUREXFLAG;
36 FX_DWORD EXRUNLENGTH; 36 FX_DWORD EXRUNLENGTH;
37 FX_DWORD nTmp; 37 FX_DWORD nTmp;
38 FX_DWORD SBNUMSYMS; 38 FX_DWORD SBNUMSYMS;
39 uint8_t SBSYMCODELEN; 39 uint8_t SBSYMCODELEN;
40 int32_t RDXI, RDYI; 40 int32_t RDXI, RDYI;
41 CJBig2_Image** SBSYMS; 41 CJBig2_Image** SBSYMS;
42 nonstd::unique_ptr<CJBig2_ArithIaidDecoder> IAID; 42 std::unique_ptr<CJBig2_ArithIaidDecoder> IAID;
43 nonstd::unique_ptr<CJBig2_SymbolDict> pDict; 43 std::unique_ptr<CJBig2_SymbolDict> pDict;
44 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IADH(new CJBig2_ArithIntDecoder); 44 std::unique_ptr<CJBig2_ArithIntDecoder> IADH(new CJBig2_ArithIntDecoder);
45 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IADW(new CJBig2_ArithIntDecoder); 45 std::unique_ptr<CJBig2_ArithIntDecoder> IADW(new CJBig2_ArithIntDecoder);
46 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IAAI(new CJBig2_ArithIntDecoder); 46 std::unique_ptr<CJBig2_ArithIntDecoder> IAAI(new CJBig2_ArithIntDecoder);
47 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IARDX(new CJBig2_ArithIntDecoder); 47 std::unique_ptr<CJBig2_ArithIntDecoder> IARDX(new CJBig2_ArithIntDecoder);
48 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IARDY(new CJBig2_ArithIntDecoder); 48 std::unique_ptr<CJBig2_ArithIntDecoder> IARDY(new CJBig2_ArithIntDecoder);
49 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IAEX(new CJBig2_ArithIntDecoder); 49 std::unique_ptr<CJBig2_ArithIntDecoder> IAEX(new CJBig2_ArithIntDecoder);
50 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IADT(new CJBig2_ArithIntDecoder); 50 std::unique_ptr<CJBig2_ArithIntDecoder> IADT(new CJBig2_ArithIntDecoder);
51 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IAFS(new CJBig2_ArithIntDecoder); 51 std::unique_ptr<CJBig2_ArithIntDecoder> IAFS(new CJBig2_ArithIntDecoder);
52 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IADS(new CJBig2_ArithIntDecoder); 52 std::unique_ptr<CJBig2_ArithIntDecoder> IADS(new CJBig2_ArithIntDecoder);
53 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IAIT(new CJBig2_ArithIntDecoder); 53 std::unique_ptr<CJBig2_ArithIntDecoder> IAIT(new CJBig2_ArithIntDecoder);
54 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IARI(new CJBig2_ArithIntDecoder); 54 std::unique_ptr<CJBig2_ArithIntDecoder> IARI(new CJBig2_ArithIntDecoder);
55 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IARDW(new CJBig2_ArithIntDecoder); 55 std::unique_ptr<CJBig2_ArithIntDecoder> IARDW(new CJBig2_ArithIntDecoder);
56 nonstd::unique_ptr<CJBig2_ArithIntDecoder> IARDH(new CJBig2_ArithIntDecoder); 56 std::unique_ptr<CJBig2_ArithIntDecoder> IARDH(new CJBig2_ArithIntDecoder);
57 nTmp = 0; 57 nTmp = 0;
58 while ((FX_DWORD)(1 << nTmp) < (SDNUMINSYMS + SDNUMNEWSYMS)) { 58 while ((FX_DWORD)(1 << nTmp) < (SDNUMINSYMS + SDNUMNEWSYMS)) {
59 nTmp++; 59 nTmp++;
60 } 60 }
61 IAID.reset(new CJBig2_ArithIaidDecoder((uint8_t)nTmp)); 61 IAID.reset(new CJBig2_ArithIaidDecoder((uint8_t)nTmp));
62 SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS); 62 SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS);
63 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); 63 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*));
64 64
65 HCHEIGHT = 0; 65 HCHEIGHT = 0;
66 NSYMSDECODED = 0; 66 NSYMSDECODED = 0;
(...skipping 18 matching lines...) Expand all
85 goto failed; 85 goto failed;
86 86
87 if (HCHEIGHT == 0 || SYMWIDTH == 0) { 87 if (HCHEIGHT == 0 || SYMWIDTH == 0) {
88 TOTWIDTH = TOTWIDTH + SYMWIDTH; 88 TOTWIDTH = TOTWIDTH + SYMWIDTH;
89 SDNEWSYMS[NSYMSDECODED] = nullptr; 89 SDNEWSYMS[NSYMSDECODED] = nullptr;
90 NSYMSDECODED = NSYMSDECODED + 1; 90 NSYMSDECODED = NSYMSDECODED + 1;
91 continue; 91 continue;
92 } 92 }
93 TOTWIDTH = TOTWIDTH + SYMWIDTH; 93 TOTWIDTH = TOTWIDTH + SYMWIDTH;
94 if (SDREFAGG == 0) { 94 if (SDREFAGG == 0) {
95 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc()); 95 std::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
96 pGRD->MMR = 0; 96 pGRD->MMR = 0;
97 pGRD->GBW = SYMWIDTH; 97 pGRD->GBW = SYMWIDTH;
98 pGRD->GBH = HCHEIGHT; 98 pGRD->GBH = HCHEIGHT;
99 pGRD->GBTEMPLATE = SDTEMPLATE; 99 pGRD->GBTEMPLATE = SDTEMPLATE;
100 pGRD->TPGDON = 0; 100 pGRD->TPGDON = 0;
101 pGRD->USESKIP = 0; 101 pGRD->USESKIP = 0;
102 pGRD->GBAT[0] = SDAT[0]; 102 pGRD->GBAT[0] = SDAT[0];
103 pGRD->GBAT[1] = SDAT[1]; 103 pGRD->GBAT[1] = SDAT[1];
104 pGRD->GBAT[2] = SDAT[2]; 104 pGRD->GBAT[2] = SDAT[2];
105 pGRD->GBAT[3] = SDAT[3]; 105 pGRD->GBAT[3] = SDAT[3];
106 pGRD->GBAT[4] = SDAT[4]; 106 pGRD->GBAT[4] = SDAT[4];
107 pGRD->GBAT[5] = SDAT[5]; 107 pGRD->GBAT[5] = SDAT[5];
108 pGRD->GBAT[6] = SDAT[6]; 108 pGRD->GBAT[6] = SDAT[6];
109 pGRD->GBAT[7] = SDAT[7]; 109 pGRD->GBAT[7] = SDAT[7];
110 BS = pGRD->decode_Arith(pArithDecoder, gbContext->data()); 110 BS = pGRD->decode_Arith(pArithDecoder, gbContext->data());
111 if (!BS) { 111 if (!BS) {
112 goto failed; 112 goto failed;
113 } 113 }
114 } else { 114 } else {
115 IAAI->decode(pArithDecoder, (int*)&REFAGGNINST); 115 IAAI->decode(pArithDecoder, (int*)&REFAGGNINST);
116 if (REFAGGNINST > 1) { 116 if (REFAGGNINST > 1) {
117 nonstd::unique_ptr<CJBig2_TRDProc> pDecoder(new CJBig2_TRDProc()); 117 std::unique_ptr<CJBig2_TRDProc> pDecoder(new CJBig2_TRDProc());
118 pDecoder->SBHUFF = SDHUFF; 118 pDecoder->SBHUFF = SDHUFF;
119 pDecoder->SBREFINE = 1; 119 pDecoder->SBREFINE = 1;
120 pDecoder->SBW = SYMWIDTH; 120 pDecoder->SBW = SYMWIDTH;
121 pDecoder->SBH = HCHEIGHT; 121 pDecoder->SBH = HCHEIGHT;
122 pDecoder->SBNUMINSTANCES = REFAGGNINST; 122 pDecoder->SBNUMINSTANCES = REFAGGNINST;
123 pDecoder->SBSTRIPS = 1; 123 pDecoder->SBSTRIPS = 1;
124 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; 124 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
125 SBNUMSYMS = pDecoder->SBNUMSYMS; 125 SBNUMSYMS = pDecoder->SBNUMSYMS;
126 nTmp = 0; 126 nTmp = 0;
127 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { 127 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
128 nTmp++; 128 nTmp++;
129 } 129 }
130 SBSYMCODELEN = (uint8_t)nTmp; 130 SBSYMCODELEN = (uint8_t)nTmp;
131 pDecoder->SBSYMCODELEN = SBSYMCODELEN; 131 pDecoder->SBSYMCODELEN = SBSYMCODELEN;
132 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); 132 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS);
133 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); 133 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
134 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, 134 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
135 NSYMSDECODED * sizeof(CJBig2_Image*)); 135 NSYMSDECODED * sizeof(CJBig2_Image*));
136 pDecoder->SBSYMS = SBSYMS; 136 pDecoder->SBSYMS = SBSYMS;
137 pDecoder->SBDEFPIXEL = 0; 137 pDecoder->SBDEFPIXEL = 0;
138 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR; 138 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR;
139 pDecoder->TRANSPOSED = 0; 139 pDecoder->TRANSPOSED = 0;
140 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; 140 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT;
141 pDecoder->SBDSOFFSET = 0; 141 pDecoder->SBDSOFFSET = 0;
142 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFFS( 142 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFFS(new CJBig2_HuffmanTable(
143 new CJBig2_HuffmanTable(HuffmanTable_B6, 143 HuffmanTable_B6, FX_ArraySize(HuffmanTable_B6),
144 FX_ArraySize(HuffmanTable_B6), 144 HuffmanTable_HTOOB_B6));
145 HuffmanTable_HTOOB_B6)); 145 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFDS(new CJBig2_HuffmanTable(
146 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDS( 146 HuffmanTable_B8, FX_ArraySize(HuffmanTable_B8),
147 new CJBig2_HuffmanTable(HuffmanTable_B8, 147 HuffmanTable_HTOOB_B8));
148 FX_ArraySize(HuffmanTable_B8), 148 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFDT(new CJBig2_HuffmanTable(
149 HuffmanTable_HTOOB_B8)); 149 HuffmanTable_B11, FX_ArraySize(HuffmanTable_B11),
150 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDT( 150 HuffmanTable_HTOOB_B11));
151 new CJBig2_HuffmanTable(HuffmanTable_B11, 151 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDW(
152 FX_ArraySize(HuffmanTable_B11),
153 HuffmanTable_HTOOB_B11));
154 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDW(
155 new CJBig2_HuffmanTable(HuffmanTable_B15, 152 new CJBig2_HuffmanTable(HuffmanTable_B15,
156 FX_ArraySize(HuffmanTable_B15), 153 FX_ArraySize(HuffmanTable_B15),
157 HuffmanTable_HTOOB_B15)); 154 HuffmanTable_HTOOB_B15));
158 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDH( 155 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDH(
159 new CJBig2_HuffmanTable(HuffmanTable_B15, 156 new CJBig2_HuffmanTable(HuffmanTable_B15,
160 FX_ArraySize(HuffmanTable_B15), 157 FX_ArraySize(HuffmanTable_B15),
161 HuffmanTable_HTOOB_B15)); 158 HuffmanTable_HTOOB_B15));
162 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX( 159 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX(
163 new CJBig2_HuffmanTable(HuffmanTable_B15, 160 new CJBig2_HuffmanTable(HuffmanTable_B15,
164 FX_ArraySize(HuffmanTable_B15), 161 FX_ArraySize(HuffmanTable_B15),
165 HuffmanTable_HTOOB_B15)); 162 HuffmanTable_HTOOB_B15));
166 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDY( 163 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDY(
167 new CJBig2_HuffmanTable(HuffmanTable_B15, 164 new CJBig2_HuffmanTable(HuffmanTable_B15,
168 FX_ArraySize(HuffmanTable_B15), 165 FX_ArraySize(HuffmanTable_B15),
169 HuffmanTable_HTOOB_B15)); 166 HuffmanTable_HTOOB_B15));
170 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE( 167 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE(
171 new CJBig2_HuffmanTable(HuffmanTable_B1, 168 new CJBig2_HuffmanTable(HuffmanTable_B1,
172 FX_ArraySize(HuffmanTable_B1), 169 FX_ArraySize(HuffmanTable_B1),
173 HuffmanTable_HTOOB_B1)); 170 HuffmanTable_HTOOB_B1));
174 pDecoder->SBHUFFFS = SBHUFFFS.get(); 171 pDecoder->SBHUFFFS = SBHUFFFS.get();
175 pDecoder->SBHUFFDS = SBHUFFDS.get(); 172 pDecoder->SBHUFFDS = SBHUFFDS.get();
176 pDecoder->SBHUFFDT = SBHUFFDT.get(); 173 pDecoder->SBHUFFDT = SBHUFFDT.get();
177 pDecoder->SBHUFFRDW = SBHUFFRDW.get(); 174 pDecoder->SBHUFFRDW = SBHUFFRDW.get();
178 pDecoder->SBHUFFRDH = SBHUFFRDH.get(); 175 pDecoder->SBHUFFRDH = SBHUFFRDH.get();
179 pDecoder->SBHUFFRDX = SBHUFFRDX.get(); 176 pDecoder->SBHUFFRDX = SBHUFFRDX.get();
180 pDecoder->SBHUFFRDY = SBHUFFRDY.get(); 177 pDecoder->SBHUFFRDY = SBHUFFRDY.get();
(...skipping 30 matching lines...) Expand all
211 goto failed; 208 goto failed;
212 } 209 }
213 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); 210 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS);
214 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); 211 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
215 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, 212 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
216 NSYMSDECODED * sizeof(CJBig2_Image*)); 213 NSYMSDECODED * sizeof(CJBig2_Image*));
217 if (!SBSYMS[IDI]) { 214 if (!SBSYMS[IDI]) {
218 FX_Free(SBSYMS); 215 FX_Free(SBSYMS);
219 goto failed; 216 goto failed;
220 } 217 }
221 nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc()); 218 std::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc());
222 pGRRD->GRW = SYMWIDTH; 219 pGRRD->GRW = SYMWIDTH;
223 pGRRD->GRH = HCHEIGHT; 220 pGRRD->GRH = HCHEIGHT;
224 pGRRD->GRTEMPLATE = SDRTEMPLATE; 221 pGRRD->GRTEMPLATE = SDRTEMPLATE;
225 pGRRD->GRREFERENCE = SBSYMS[IDI]; 222 pGRRD->GRREFERENCE = SBSYMS[IDI];
226 pGRRD->GRREFERENCEDX = RDXI; 223 pGRRD->GRREFERENCEDX = RDXI;
227 pGRRD->GRREFERENCEDY = RDYI; 224 pGRRD->GRREFERENCEDY = RDYI;
228 pGRRD->TPGRON = 0; 225 pGRRD->TPGRON = 0;
229 pGRRD->GRAT[0] = SDRAT[0]; 226 pGRRD->GRAT[0] = SDRAT[0];
230 pGRRD->GRAT[1] = SDRAT[1]; 227 pGRRD->GRAT[1] = SDRAT[1];
231 pGRRD->GRAT[2] = SDRAT[2]; 228 pGRRD->GRAT[2] = SDRAT[2];
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 int32_t nVal, nBits; 305 int32_t nVal, nBits;
309 FX_DWORD nTmp; 306 FX_DWORD nTmp;
310 FX_DWORD SBNUMSYMS; 307 FX_DWORD SBNUMSYMS;
311 uint8_t SBSYMCODELEN; 308 uint8_t SBSYMCODELEN;
312 JBig2HuffmanCode* SBSYMCODES; 309 JBig2HuffmanCode* SBSYMCODES;
313 FX_DWORD IDI; 310 FX_DWORD IDI;
314 int32_t RDXI, RDYI; 311 int32_t RDXI, RDYI;
315 FX_DWORD BMSIZE; 312 FX_DWORD BMSIZE;
316 FX_DWORD stride; 313 FX_DWORD stride;
317 CJBig2_Image** SBSYMS; 314 CJBig2_Image** SBSYMS;
318 nonstd::unique_ptr<CJBig2_HuffmanDecoder> pHuffmanDecoder( 315 std::unique_ptr<CJBig2_HuffmanDecoder> pHuffmanDecoder(
319 new CJBig2_HuffmanDecoder(pStream)); 316 new CJBig2_HuffmanDecoder(pStream));
320 SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS); 317 SDNEWSYMS = FX_Alloc(CJBig2_Image*, SDNUMNEWSYMS);
321 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*)); 318 FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*));
322 SDNEWSYMWIDTHS = nullptr; 319 SDNEWSYMWIDTHS = nullptr;
323 BHC = nullptr; 320 BHC = nullptr;
324 if (SDREFAGG == 0) { 321 if (SDREFAGG == 0) {
325 SDNEWSYMWIDTHS = FX_Alloc(FX_DWORD, SDNUMNEWSYMS); 322 SDNEWSYMWIDTHS = FX_Alloc(FX_DWORD, SDNUMNEWSYMS);
326 FXSYS_memset(SDNEWSYMWIDTHS, 0, SDNUMNEWSYMS * sizeof(FX_DWORD)); 323 FXSYS_memset(SDNEWSYMWIDTHS, 0, SDNUMNEWSYMS * sizeof(FX_DWORD));
327 } 324 }
328 nonstd::unique_ptr<CJBig2_SymbolDict> pDict(new CJBig2_SymbolDict()); 325 std::unique_ptr<CJBig2_SymbolDict> pDict(new CJBig2_SymbolDict());
329 nonstd::unique_ptr<CJBig2_HuffmanTable> pTable; 326 std::unique_ptr<CJBig2_HuffmanTable> pTable;
330 327
331 HCHEIGHT = 0; 328 HCHEIGHT = 0;
332 NSYMSDECODED = 0; 329 NSYMSDECODED = 0;
333 BS = nullptr; 330 BS = nullptr;
334 while (NSYMSDECODED < SDNUMNEWSYMS) { 331 while (NSYMSDECODED < SDNUMNEWSYMS) {
335 if (pHuffmanDecoder->decodeAValue(SDHUFFDH, &HCDH) != 0) { 332 if (pHuffmanDecoder->decodeAValue(SDHUFFDH, &HCDH) != 0) {
336 goto failed; 333 goto failed;
337 } 334 }
338 HCHEIGHT = HCHEIGHT + HCDH; 335 HCHEIGHT = HCHEIGHT + HCDH;
339 if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) { 336 if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) {
(...skipping 23 matching lines...) Expand all
363 } 360 }
364 TOTWIDTH = TOTWIDTH + SYMWIDTH; 361 TOTWIDTH = TOTWIDTH + SYMWIDTH;
365 } 362 }
366 if (SDREFAGG == 1) { 363 if (SDREFAGG == 1) {
367 if (pHuffmanDecoder->decodeAValue(SDHUFFAGGINST, (int*)&REFAGGNINST) != 364 if (pHuffmanDecoder->decodeAValue(SDHUFFAGGINST, (int*)&REFAGGNINST) !=
368 0) { 365 0) {
369 goto failed; 366 goto failed;
370 } 367 }
371 BS = nullptr; 368 BS = nullptr;
372 if (REFAGGNINST > 1) { 369 if (REFAGGNINST > 1) {
373 nonstd::unique_ptr<CJBig2_TRDProc> pDecoder(new CJBig2_TRDProc()); 370 std::unique_ptr<CJBig2_TRDProc> pDecoder(new CJBig2_TRDProc());
374 pDecoder->SBHUFF = SDHUFF; 371 pDecoder->SBHUFF = SDHUFF;
375 pDecoder->SBREFINE = 1; 372 pDecoder->SBREFINE = 1;
376 pDecoder->SBW = SYMWIDTH; 373 pDecoder->SBW = SYMWIDTH;
377 pDecoder->SBH = HCHEIGHT; 374 pDecoder->SBH = HCHEIGHT;
378 pDecoder->SBNUMINSTANCES = REFAGGNINST; 375 pDecoder->SBNUMINSTANCES = REFAGGNINST;
379 pDecoder->SBSTRIPS = 1; 376 pDecoder->SBSTRIPS = 1;
380 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED; 377 pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
381 SBNUMSYMS = pDecoder->SBNUMSYMS; 378 SBNUMSYMS = pDecoder->SBNUMSYMS;
382 SBSYMCODES = FX_Alloc(JBig2HuffmanCode, SBNUMSYMS); 379 SBSYMCODES = FX_Alloc(JBig2HuffmanCode, SBNUMSYMS);
383 nTmp = 1; 380 nTmp = 1;
384 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) { 381 while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
385 nTmp++; 382 nTmp++;
386 } 383 }
387 for (I = 0; I < SBNUMSYMS; I++) { 384 for (I = 0; I < SBNUMSYMS; I++) {
388 SBSYMCODES[I].codelen = nTmp; 385 SBSYMCODES[I].codelen = nTmp;
389 SBSYMCODES[I].code = I; 386 SBSYMCODES[I].code = I;
390 } 387 }
391 pDecoder->SBSYMCODES = SBSYMCODES; 388 pDecoder->SBSYMCODES = SBSYMCODES;
392 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); 389 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS);
393 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); 390 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
394 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, 391 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
395 NSYMSDECODED * sizeof(CJBig2_Image*)); 392 NSYMSDECODED * sizeof(CJBig2_Image*));
396 pDecoder->SBSYMS = SBSYMS; 393 pDecoder->SBSYMS = SBSYMS;
397 pDecoder->SBDEFPIXEL = 0; 394 pDecoder->SBDEFPIXEL = 0;
398 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR; 395 pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR;
399 pDecoder->TRANSPOSED = 0; 396 pDecoder->TRANSPOSED = 0;
400 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT; 397 pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT;
401 pDecoder->SBDSOFFSET = 0; 398 pDecoder->SBDSOFFSET = 0;
402 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFFS( 399 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFFS(new CJBig2_HuffmanTable(
403 new CJBig2_HuffmanTable(HuffmanTable_B6, 400 HuffmanTable_B6, FX_ArraySize(HuffmanTable_B6),
404 FX_ArraySize(HuffmanTable_B6), 401 HuffmanTable_HTOOB_B6));
405 HuffmanTable_HTOOB_B6)); 402 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFDS(new CJBig2_HuffmanTable(
406 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDS( 403 HuffmanTable_B8, FX_ArraySize(HuffmanTable_B8),
407 new CJBig2_HuffmanTable(HuffmanTable_B8, 404 HuffmanTable_HTOOB_B8));
408 FX_ArraySize(HuffmanTable_B8), 405 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFDT(new CJBig2_HuffmanTable(
409 HuffmanTable_HTOOB_B8)); 406 HuffmanTable_B11, FX_ArraySize(HuffmanTable_B11),
410 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFDT( 407 HuffmanTable_HTOOB_B11));
411 new CJBig2_HuffmanTable(HuffmanTable_B11, 408 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDW(
412 FX_ArraySize(HuffmanTable_B11),
413 HuffmanTable_HTOOB_B11));
414 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDW(
415 new CJBig2_HuffmanTable(HuffmanTable_B15, 409 new CJBig2_HuffmanTable(HuffmanTable_B15,
416 FX_ArraySize(HuffmanTable_B15), 410 FX_ArraySize(HuffmanTable_B15),
417 HuffmanTable_HTOOB_B15)); 411 HuffmanTable_HTOOB_B15));
418 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDH( 412 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDH(
419 new CJBig2_HuffmanTable(HuffmanTable_B15, 413 new CJBig2_HuffmanTable(HuffmanTable_B15,
420 FX_ArraySize(HuffmanTable_B15), 414 FX_ArraySize(HuffmanTable_B15),
421 HuffmanTable_HTOOB_B15)); 415 HuffmanTable_HTOOB_B15));
422 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX( 416 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX(
423 new CJBig2_HuffmanTable(HuffmanTable_B15, 417 new CJBig2_HuffmanTable(HuffmanTable_B15,
424 FX_ArraySize(HuffmanTable_B15), 418 FX_ArraySize(HuffmanTable_B15),
425 HuffmanTable_HTOOB_B15)); 419 HuffmanTable_HTOOB_B15));
426 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDY( 420 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDY(
427 new CJBig2_HuffmanTable(HuffmanTable_B15, 421 new CJBig2_HuffmanTable(HuffmanTable_B15,
428 FX_ArraySize(HuffmanTable_B15), 422 FX_ArraySize(HuffmanTable_B15),
429 HuffmanTable_HTOOB_B15)); 423 HuffmanTable_HTOOB_B15));
430 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE( 424 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE(
431 new CJBig2_HuffmanTable(HuffmanTable_B1, 425 new CJBig2_HuffmanTable(HuffmanTable_B1,
432 FX_ArraySize(HuffmanTable_B1), 426 FX_ArraySize(HuffmanTable_B1),
433 HuffmanTable_HTOOB_B1)); 427 HuffmanTable_HTOOB_B1));
434 pDecoder->SBHUFFFS = SBHUFFFS.get(); 428 pDecoder->SBHUFFFS = SBHUFFFS.get();
435 pDecoder->SBHUFFDS = SBHUFFDS.get(); 429 pDecoder->SBHUFFDS = SBHUFFDS.get();
436 pDecoder->SBHUFFDT = SBHUFFDT.get(); 430 pDecoder->SBHUFFDT = SBHUFFDT.get();
437 pDecoder->SBHUFFRDW = SBHUFFRDW.get(); 431 pDecoder->SBHUFFRDW = SBHUFFRDW.get();
438 pDecoder->SBHUFFRDH = SBHUFFRDH.get(); 432 pDecoder->SBHUFFRDH = SBHUFFRDH.get();
439 pDecoder->SBHUFFRDX = SBHUFFRDX.get(); 433 pDecoder->SBHUFFRDX = SBHUFFRDX.get();
440 pDecoder->SBHUFFRDY = SBHUFFRDY.get(); 434 pDecoder->SBHUFFRDY = SBHUFFRDY.get();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 if ((nVal == SBSYMCODES[IDI].code) && 470 if ((nVal == SBSYMCODES[IDI].code) &&
477 (nBits == SBSYMCODES[IDI].codelen)) { 471 (nBits == SBSYMCODES[IDI].codelen)) {
478 break; 472 break;
479 } 473 }
480 } 474 }
481 if (IDI < SBNUMSYMS) { 475 if (IDI < SBNUMSYMS) {
482 break; 476 break;
483 } 477 }
484 } 478 }
485 FX_Free(SBSYMCODES); 479 FX_Free(SBSYMCODES);
486 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX( 480 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRDX(
487 new CJBig2_HuffmanTable(HuffmanTable_B15, 481 new CJBig2_HuffmanTable(HuffmanTable_B15,
488 FX_ArraySize(HuffmanTable_B15), 482 FX_ArraySize(HuffmanTable_B15),
489 HuffmanTable_HTOOB_B15)); 483 HuffmanTable_HTOOB_B15));
490 nonstd::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE( 484 std::unique_ptr<CJBig2_HuffmanTable> SBHUFFRSIZE(
491 new CJBig2_HuffmanTable(HuffmanTable_B1, 485 new CJBig2_HuffmanTable(HuffmanTable_B1,
492 FX_ArraySize(HuffmanTable_B1), 486 FX_ArraySize(HuffmanTable_B1),
493 HuffmanTable_HTOOB_B1)); 487 HuffmanTable_HTOOB_B1));
494 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX.get(), &RDXI) != 0) || 488 if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX.get(), &RDXI) != 0) ||
495 (pHuffmanDecoder->decodeAValue(SBHUFFRDX.get(), &RDYI) != 0) || 489 (pHuffmanDecoder->decodeAValue(SBHUFFRDX.get(), &RDYI) != 0) ||
496 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE.get(), &nVal) != 0)) { 490 (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE.get(), &nVal) != 0)) {
497 goto failed; 491 goto failed;
498 } 492 }
499 pStream->alignByte(); 493 pStream->alignByte();
500 nTmp = pStream->getOffset(); 494 nTmp = pStream->getOffset();
501 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS); 495 SBSYMS = FX_Alloc(CJBig2_Image*, SBNUMSYMS);
502 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*)); 496 JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
503 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, 497 JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
504 NSYMSDECODED * sizeof(CJBig2_Image*)); 498 NSYMSDECODED * sizeof(CJBig2_Image*));
505 nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc()); 499 std::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc());
506 pGRRD->GRW = SYMWIDTH; 500 pGRRD->GRW = SYMWIDTH;
507 pGRRD->GRH = HCHEIGHT; 501 pGRRD->GRH = HCHEIGHT;
508 pGRRD->GRTEMPLATE = SDRTEMPLATE; 502 pGRRD->GRTEMPLATE = SDRTEMPLATE;
509 pGRRD->GRREFERENCE = SBSYMS[IDI]; 503 pGRRD->GRREFERENCE = SBSYMS[IDI];
510 pGRRD->GRREFERENCEDX = RDXI; 504 pGRRD->GRREFERENCEDX = RDXI;
511 pGRRD->GRREFERENCEDY = RDYI; 505 pGRRD->GRREFERENCEDY = RDYI;
512 pGRRD->TPGRON = 0; 506 pGRRD->TPGRON = 0;
513 pGRRD->GRAT[0] = SDRAT[0]; 507 pGRRD->GRAT[0] = SDRAT[0];
514 pGRRD->GRAT[1] = SDRAT[1]; 508 pGRRD->GRAT[1] = SDRAT[1];
515 pGRRD->GRAT[2] = SDRAT[2]; 509 pGRRD->GRAT[2] = SDRAT[2];
516 pGRRD->GRAT[3] = SDRAT[3]; 510 pGRRD->GRAT[3] = SDRAT[3];
517 nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder( 511 std::unique_ptr<CJBig2_ArithDecoder> pArithDecoder(
518 new CJBig2_ArithDecoder(pStream)); 512 new CJBig2_ArithDecoder(pStream));
519 BS = pGRRD->decode(pArithDecoder.get(), grContext->data()); 513 BS = pGRRD->decode(pArithDecoder.get(), grContext->data());
520 if (!BS) { 514 if (!BS) {
521 FX_Free(SBSYMS); 515 FX_Free(SBSYMS);
522 goto failed; 516 goto failed;
523 } 517 }
524 pStream->alignByte(); 518 pStream->alignByte();
525 pStream->offset(2); 519 pStream->offset(2);
526 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) { 520 if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) {
527 delete BS; 521 delete BS;
(...skipping 20 matching lines...) Expand all
548 BHC = new CJBig2_Image(TOTWIDTH, HCHEIGHT); 542 BHC = new CJBig2_Image(TOTWIDTH, HCHEIGHT);
549 for (I = 0; I < HCHEIGHT; I++) { 543 for (I = 0; I < HCHEIGHT; I++) {
550 JBIG2_memcpy(BHC->m_pData + I * BHC->m_nStride, 544 JBIG2_memcpy(BHC->m_pData + I * BHC->m_nStride,
551 pStream->getPointer(), stride); 545 pStream->getPointer(), stride);
552 pStream->offset(stride); 546 pStream->offset(stride);
553 } 547 }
554 } else { 548 } else {
555 goto failed; 549 goto failed;
556 } 550 }
557 } else { 551 } else {
558 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc()); 552 std::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc());
559 pGRD->MMR = 1; 553 pGRD->MMR = 1;
560 pGRD->GBW = TOTWIDTH; 554 pGRD->GBW = TOTWIDTH;
561 pGRD->GBH = HCHEIGHT; 555 pGRD->GBH = HCHEIGHT;
562 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHC, pStream, nullptr); 556 FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHC, pStream, nullptr);
563 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { 557 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
564 pGRD->Continue_decode(pPause); 558 pGRD->Continue_decode(pPause);
565 } 559 }
566 pStream->alignByte(); 560 pStream->alignByte();
567 } 561 }
568 nTmp = 0; 562 nTmp = 0;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 failed: 615 failed:
622 for (I = 0; I < NSYMSDECODED; I++) { 616 for (I = 0; I < NSYMSDECODED; I++) {
623 delete SDNEWSYMS[I]; 617 delete SDNEWSYMS[I];
624 } 618 }
625 FX_Free(SDNEWSYMS); 619 FX_Free(SDNEWSYMS);
626 if (SDREFAGG == 0) { 620 if (SDREFAGG == 0) {
627 FX_Free(SDNEWSYMWIDTHS); 621 FX_Free(SDNEWSYMWIDTHS);
628 } 622 }
629 return nullptr; 623 return nullptr;
630 } 624 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_PddProc.cpp ('k') | core/src/fxcodec/jbig2/JBig2_SymbolDict.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698