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

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

Issue 1332153002: Merge to XFA: Make a bunch of JBig2 classes independent of CJBig2_Object. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
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
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_Context.h ('k') | core/src/fxcodec/jbig2/JBig2_GeneralDecoder.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 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 <map>
8 #include <list> 7 #include <list>
9 #include "JBig2_Context.h" 8 #include "JBig2_Context.h"
10 9
11 // Implement a very small least recently used (LRU) cache. It is very 10 // Implement a very small least recently used (LRU) cache. It is very
12 // common for a JBIG2 dictionary to span multiple pages in a PDF file, 11 // common for a JBIG2 dictionary to span multiple pages in a PDF file,
13 // and we do not want to decode the same dictionary over and over 12 // and we do not want to decode the same dictionary over and over
14 // again. We key off of the memory location of the dictionary. The 13 // again. We key off of the memory location of the dictionary. The
15 // list keeps track of the freshness of entries, with freshest ones 14 // list keeps track of the freshness of entries, with freshest ones
16 // at the front. Even a tiny cache size like 2 makes a dramatic 15 // at the front. Even a tiny cache size like 2 makes a dramatic
17 // difference for typical JBIG2 documents. 16 // difference for typical JBIG2 documents.
(...skipping 22 matching lines...) Expand all
40 int32_t nStreamType, 39 int32_t nStreamType,
41 std::list<CJBig2_CachePair>* pSymbolDictCache, 40 std::list<CJBig2_CachePair>* pSymbolDictCache,
42 IFX_Pause* pPause) { 41 IFX_Pause* pPause) {
43 if (pGlobalData && (dwGlobalLength > 0)) { 42 if (pGlobalData && (dwGlobalLength > 0)) {
44 JBIG2_ALLOC(m_pGlobalContext, 43 JBIG2_ALLOC(m_pGlobalContext,
45 CJBig2_Context(NULL, 0, pGlobalData, dwGlobalLength, 44 CJBig2_Context(NULL, 0, pGlobalData, dwGlobalLength,
46 JBIG2_EMBED_STREAM, pSymbolDictCache, pPause)); 45 JBIG2_EMBED_STREAM, pSymbolDictCache, pPause));
47 } else { 46 } else {
48 m_pGlobalContext = NULL; 47 m_pGlobalContext = NULL;
49 } 48 }
50 JBIG2_ALLOC(m_pStream, CJBig2_BitStream(pData, dwLength)); 49 m_pStream = new CJBig2_BitStream(pData, dwLength);
51 m_nStreamType = nStreamType; 50 m_nStreamType = nStreamType;
52 m_nState = JBIG2_OUT_OF_PAGE; 51 m_nState = JBIG2_OUT_OF_PAGE;
53 JBIG2_ALLOC(m_pSegmentList, CJBig2_List<CJBig2_Segment>);
54 JBIG2_ALLOC(m_pPageInfoList, CJBig2_List<JBig2PageInfo>(1));
55 m_pPage = NULL; 52 m_pPage = NULL;
56 m_bBufSpecified = FALSE; 53 m_bBufSpecified = FALSE;
57 m_pPause = pPause; 54 m_pPause = pPause;
58 m_nSegmentDecoded = 0; 55 m_nSegmentDecoded = 0;
59 m_PauseStep = 10; 56 m_PauseStep = 10;
60 m_pArithDecoder = NULL; 57 m_pArithDecoder = NULL;
61 m_pGRD = NULL; 58 m_pGRD = NULL;
62 m_gbContext = NULL; 59 m_gbContext = NULL;
63 m_pSegment = NULL;
64 m_dwOffset = 0; 60 m_dwOffset = 0;
65 m_ProcessiveStatus = FXCODEC_STATUS_FRAME_READY; 61 m_ProcessiveStatus = FXCODEC_STATUS_FRAME_READY;
66 m_pSymbolDictCache = pSymbolDictCache; 62 m_pSymbolDictCache = pSymbolDictCache;
67 } 63 }
68 CJBig2_Context::~CJBig2_Context() { 64 CJBig2_Context::~CJBig2_Context() {
69 delete m_pArithDecoder; 65 delete m_pArithDecoder;
70 m_pArithDecoder = NULL; 66 m_pArithDecoder = NULL;
71 delete m_pGRD; 67 delete m_pGRD;
72 m_pGRD = NULL; 68 m_pGRD = NULL;
73 if (m_gbContext) { 69 if (m_gbContext) {
74 m_pModule->JBig2_Free(m_gbContext); 70 m_pModule->JBig2_Free(m_gbContext);
75 } 71 }
76 m_gbContext = NULL; 72 m_gbContext = NULL;
77 delete m_pGlobalContext; 73 delete m_pGlobalContext;
78 m_pGlobalContext = NULL; 74 m_pGlobalContext = NULL;
79 delete m_pPageInfoList;
80 m_pPageInfoList = NULL;
81 if (m_bBufSpecified) { 75 if (m_bBufSpecified) {
82 delete m_pPage; 76 delete m_pPage;
83 } 77 }
84 m_pPage = NULL; 78 m_pPage = NULL;
85 delete m_pStream; 79 delete m_pStream;
86 m_pStream = NULL; 80 m_pStream = NULL;
87 delete m_pSegmentList;
88 m_pSegmentList = NULL;
89 } 81 }
90 int32_t CJBig2_Context::decodeFile(IFX_Pause* pPause) { 82 int32_t CJBig2_Context::decodeFile(IFX_Pause* pPause) {
91 uint8_t cFlags; 83 uint8_t cFlags;
92 FX_DWORD dwTemp; 84 FX_DWORD dwTemp;
93 const uint8_t fileID[] = {0x97, 0x4A, 0x42, 0x32, 0x0D, 0x0A, 0x1A, 0x0A}; 85 const uint8_t fileID[] = {0x97, 0x4A, 0x42, 0x32, 0x0D, 0x0A, 0x1A, 0x0A};
94 int32_t nRet; 86 int32_t nRet;
95 if (m_pStream->getByteLeft() < 8) { 87 if (m_pStream->getByteLeft() < 8) {
96 m_pModule->JBig2_Error("file header too short."); 88 m_pModule->JBig2_Error("file header too short.");
97 nRet = JBIG2_ERROR_TOO_SHORT; 89 nRet = JBIG2_ERROR_TOO_SHORT;
98 goto failed; 90 goto failed;
99 } 91 }
100 if (JBIG2_memcmp(m_pStream->getPointer(), fileID, 8) != 0) { 92 if (JBIG2_memcmp(m_pStream->getPointer(), fileID, 8) != 0) {
101 m_pModule->JBig2_Error("not jbig2 file"); 93 m_pModule->JBig2_Error("not jbig2 file");
102 nRet = JBIG2_ERROR_FILE_FORMAT; 94 nRet = JBIG2_ERROR_FILE_FORMAT;
103 goto failed; 95 goto failed;
104 } 96 }
105 m_pStream->offset(8); 97 m_pStream->offset(8);
106 if (m_pStream->read1Byte(&cFlags) != 0) { 98 if (m_pStream->read1Byte(&cFlags) != 0) {
107 m_pModule->JBig2_Error("file header too short."); 99 m_pModule->JBig2_Error("file header too short.");
108 nRet = JBIG2_ERROR_TOO_SHORT; 100 nRet = JBIG2_ERROR_TOO_SHORT;
109 goto failed; 101 goto failed;
110 } 102 }
111 if (!(cFlags & 0x02)) { 103 if (!(cFlags & 0x02)) {
112 if (m_pStream->readInteger(&dwTemp) != 0) { 104 if (m_pStream->readInteger(&dwTemp) != 0) {
113 m_pModule->JBig2_Error("file header too short."); 105 m_pModule->JBig2_Error("file header too short.");
114 nRet = JBIG2_ERROR_TOO_SHORT; 106 nRet = JBIG2_ERROR_TOO_SHORT;
115 goto failed; 107 goto failed;
116 } 108 }
117 if (dwTemp > 0) { 109 if (dwTemp > 0) {
118 delete m_pPageInfoList; 110 m_PageInfoList.clear();
119 JBIG2_ALLOC(m_pPageInfoList, CJBig2_List<JBig2PageInfo>(dwTemp)); 111 m_PageInfoList.resize(dwTemp);
120 } 112 }
121 } 113 }
122 if (cFlags & 0x01) { 114 if (cFlags & 0x01) {
123 m_nStreamType = JBIG2_SQUENTIAL_STREAM; 115 m_nStreamType = JBIG2_SQUENTIAL_STREAM;
124 return decode_SquentialOrgnazation(pPause); 116 return decode_SquentialOrgnazation(pPause);
125 } else { 117 } else {
126 m_nStreamType = JBIG2_RANDOM_STREAM; 118 m_nStreamType = JBIG2_RANDOM_STREAM;
127 return decode_RandomOrgnazation_FirstPage(pPause); 119 return decode_RandomOrgnazation_FirstPage(pPause);
128 } 120 }
129 failed: 121 failed:
130 return nRet; 122 return nRet;
131 } 123 }
132 int32_t CJBig2_Context::decode_SquentialOrgnazation(IFX_Pause* pPause) { 124 int32_t CJBig2_Context::decode_SquentialOrgnazation(IFX_Pause* pPause) {
133 int32_t nRet; 125 int32_t nRet;
134 if (m_pStream->getByteLeft() > 0) { 126 if (m_pStream->getByteLeft() <= 0)
135 while (m_pStream->getByteLeft() >= JBIG2_MIN_SEGMENT_SIZE) { 127 return JBIG2_END_OF_FILE;
136 if (m_pSegment == NULL) { 128
137 JBIG2_ALLOC(m_pSegment, CJBig2_Segment()); 129 while (m_pStream->getByteLeft() >= JBIG2_MIN_SEGMENT_SIZE) {
138 nRet = parseSegmentHeader(m_pSegment); 130 if (!m_pSegment) {
139 if (nRet != JBIG2_SUCCESS) { 131 m_pSegment.reset(new CJBig2_Segment);
140 delete m_pSegment; 132 nRet = parseSegmentHeader(m_pSegment.get());
141 m_pSegment = NULL; 133 if (nRet != JBIG2_SUCCESS) {
142 return nRet; 134 m_pSegment.reset();
143 }
144 m_dwOffset = m_pStream->getOffset();
145 }
146 nRet = parseSegmentData(m_pSegment, pPause);
147 if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
148 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
149 m_PauseStep = 2;
150 return JBIG2_SUCCESS;
151 }
152 if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
153 delete m_pSegment;
154 m_pSegment = NULL;
155 break;
156 } else if (nRet != JBIG2_SUCCESS) {
157 delete m_pSegment;
158 m_pSegment = NULL;
159 return nRet; 135 return nRet;
160 } 136 }
161 m_pSegmentList->addItem(m_pSegment); 137 m_dwOffset = m_pStream->getOffset();
162 if (m_pSegment->m_dwData_length != 0xffffffff) {
163 m_dwOffset = m_dwOffset + m_pSegment->m_dwData_length;
164 m_pStream->setOffset(m_dwOffset);
165 } else {
166 m_pStream->offset(4);
167 }
168 m_pSegment = NULL;
169 if (m_pStream->getByteLeft() > 0 && m_pPage && pPause &&
170 pPause->NeedToPauseNow()) {
171 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
172 m_PauseStep = 2;
173 return JBIG2_SUCCESS;
174 }
175 } 138 }
176 } else { 139 nRet = parseSegmentData(m_pSegment.get(), pPause);
177 return JBIG2_END_OF_FILE; 140 if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
141 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
142 m_PauseStep = 2;
143 return JBIG2_SUCCESS;
144 }
145 if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
146 m_pSegment.reset();
147 return JBIG2_SUCCESS;
148 }
149 if (nRet != JBIG2_SUCCESS) {
150 m_pSegment.reset();
151 return nRet;
152 }
153 if (m_pSegment->m_dwData_length != 0xffffffff) {
154 m_dwOffset = m_dwOffset + m_pSegment->m_dwData_length;
155 m_pStream->setOffset(m_dwOffset);
156 } else {
157 m_pStream->offset(4);
158 }
159 m_SegmentList.push_back(m_pSegment.release());
160 if (m_pStream->getByteLeft() > 0 && m_pPage && pPause &&
161 pPause->NeedToPauseNow()) {
162 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
163 m_PauseStep = 2;
164 return JBIG2_SUCCESS;
165 }
178 } 166 }
179 return JBIG2_SUCCESS; 167 return JBIG2_SUCCESS;
180 } 168 }
181 int32_t CJBig2_Context::decode_EmbedOrgnazation(IFX_Pause* pPause) { 169 int32_t CJBig2_Context::decode_EmbedOrgnazation(IFX_Pause* pPause) {
182 return decode_SquentialOrgnazation(pPause); 170 return decode_SquentialOrgnazation(pPause);
183 } 171 }
184 int32_t CJBig2_Context::decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause) { 172 int32_t CJBig2_Context::decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause) {
185 CJBig2_Segment* pSegment;
186 int32_t nRet; 173 int32_t nRet;
187 while (m_pStream->getByteLeft() > JBIG2_MIN_SEGMENT_SIZE) { 174 while (m_pStream->getByteLeft() > JBIG2_MIN_SEGMENT_SIZE) {
188 JBIG2_ALLOC(pSegment, CJBig2_Segment()); 175 nonstd::unique_ptr<CJBig2_Segment> pSegment(new CJBig2_Segment);
189 nRet = parseSegmentHeader(pSegment); 176 nRet = parseSegmentHeader(pSegment.get());
190 if (nRet != JBIG2_SUCCESS) { 177 if (nRet != JBIG2_SUCCESS) {
191 delete pSegment;
192 return nRet; 178 return nRet;
193 } else if (pSegment->m_cFlags.s.type == 51) { 179 } else if (pSegment->m_cFlags.s.type == 51) {
194 delete pSegment;
195 break; 180 break;
196 } 181 }
197 m_pSegmentList->addItem(pSegment); 182 m_SegmentList.push_back(pSegment.release());
198 if (pPause && m_pPause && pPause->NeedToPauseNow()) { 183 if (pPause && m_pPause && pPause->NeedToPauseNow()) {
199 m_PauseStep = 3; 184 m_PauseStep = 3;
200 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; 185 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
201 return JBIG2_SUCCESS; 186 return JBIG2_SUCCESS;
202 } 187 }
203 } 188 }
204 m_nSegmentDecoded = 0; 189 m_nSegmentDecoded = 0;
205 return decode_RandomOrgnazation(pPause); 190 return decode_RandomOrgnazation(pPause);
206 } 191 }
207 int32_t CJBig2_Context::decode_RandomOrgnazation(IFX_Pause* pPause) { 192 int32_t CJBig2_Context::decode_RandomOrgnazation(IFX_Pause* pPause) {
208 int32_t nRet; 193 for (; m_nSegmentDecoded < m_SegmentList.size(); ++m_nSegmentDecoded) {
209 for (; m_nSegmentDecoded < m_pSegmentList->getLength(); m_nSegmentDecoded++) { 194 int32_t nRet =
210 nRet = parseSegmentData(m_pSegmentList->getAt(m_nSegmentDecoded), pPause); 195 parseSegmentData(m_SegmentList.get(m_nSegmentDecoded), pPause);
211 if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) { 196 if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE))
212 break; 197 return JBIG2_SUCCESS;
213 } else if (nRet != JBIG2_SUCCESS) { 198
199 if (nRet != JBIG2_SUCCESS)
214 return nRet; 200 return nRet;
215 } 201
216 if (m_pPage && pPause && pPause->NeedToPauseNow()) { 202 if (m_pPage && pPause && pPause->NeedToPauseNow()) {
217 m_PauseStep = 4; 203 m_PauseStep = 4;
218 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; 204 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
219 return JBIG2_SUCCESS; 205 return JBIG2_SUCCESS;
220 } 206 }
221 } 207 }
222 return JBIG2_SUCCESS; 208 return JBIG2_SUCCESS;
223 } 209 }
224 int32_t CJBig2_Context::getFirstPage(uint8_t* pBuf, 210 int32_t CJBig2_Context::getFirstPage(uint8_t* pBuf,
225 int32_t width, 211 int32_t width,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 nRet = m_pGlobalContext->decode_EmbedOrgnazation(pPause); 291 nRet = m_pGlobalContext->decode_EmbedOrgnazation(pPause);
306 if (nRet != JBIG2_SUCCESS) { 292 if (nRet != JBIG2_SUCCESS) {
307 return nRet; 293 return nRet;
308 } 294 }
309 } 295 }
310 m_bBufSpecified = FALSE; 296 m_bBufSpecified = FALSE;
311 return Continue(pPause); 297 return Continue(pPause);
312 } 298 }
313 CJBig2_Segment* CJBig2_Context::findSegmentByNumber(FX_DWORD dwNumber) { 299 CJBig2_Segment* CJBig2_Context::findSegmentByNumber(FX_DWORD dwNumber) {
314 CJBig2_Segment* pSeg; 300 CJBig2_Segment* pSeg;
315 int32_t i;
316 if (m_pGlobalContext) { 301 if (m_pGlobalContext) {
317 pSeg = m_pGlobalContext->findSegmentByNumber(dwNumber); 302 pSeg = m_pGlobalContext->findSegmentByNumber(dwNumber);
318 if (pSeg) { 303 if (pSeg) {
319 return pSeg; 304 return pSeg;
320 } 305 }
321 } 306 }
322 for (i = 0; i < m_pSegmentList->getLength(); i++) { 307 for (size_t i = 0; i < m_SegmentList.size(); ++i) {
323 pSeg = m_pSegmentList->getAt(i); 308 pSeg = m_SegmentList.get(i);
324 if (pSeg->m_dwNumber == dwNumber) { 309 if (pSeg->m_dwNumber == dwNumber) {
325 return pSeg; 310 return pSeg;
326 } 311 }
327 } 312 }
328 return NULL; 313 return nullptr;
329 } 314 }
330 CJBig2_Segment* CJBig2_Context::findReferredSegmentByTypeAndIndex( 315 CJBig2_Segment* CJBig2_Context::findReferredSegmentByTypeAndIndex(
331 CJBig2_Segment* pSegment, 316 CJBig2_Segment* pSegment,
332 uint8_t cType, 317 uint8_t cType,
333 int32_t nIndex) { 318 int32_t nIndex) {
334 CJBig2_Segment* pSeg; 319 CJBig2_Segment* pSeg;
335 int32_t i, count; 320 int32_t i, count;
336 count = 0; 321 count = 0;
337 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { 322 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
338 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); 323 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 case 40: 458 case 40:
474 case 42: 459 case 42:
475 case 43: 460 case 43:
476 if (m_nState == JBIG2_OUT_OF_PAGE) { 461 if (m_nState == JBIG2_OUT_OF_PAGE) {
477 goto failed2; 462 goto failed2;
478 } else { 463 } else {
479 return parseGenericRefinementRegion(pSegment); 464 return parseGenericRefinementRegion(pSegment);
480 } 465 }
481 case 48: { 466 case 48: {
482 FX_WORD wTemp; 467 FX_WORD wTemp;
483 JBig2PageInfo* pPageInfo; 468 nonstd::unique_ptr<JBig2PageInfo> pPageInfo(new JBig2PageInfo);
484 JBIG2_ALLOC(pPageInfo, JBig2PageInfo);
485 if ((m_pStream->readInteger(&pPageInfo->m_dwWidth) != 0) || 469 if ((m_pStream->readInteger(&pPageInfo->m_dwWidth) != 0) ||
486 (m_pStream->readInteger(&pPageInfo->m_dwHeight) != 0) || 470 (m_pStream->readInteger(&pPageInfo->m_dwHeight) != 0) ||
487 (m_pStream->readInteger(&pPageInfo->m_dwResolutionX) != 0) || 471 (m_pStream->readInteger(&pPageInfo->m_dwResolutionX) != 0) ||
488 (m_pStream->readInteger(&pPageInfo->m_dwResolutionY) != 0) || 472 (m_pStream->readInteger(&pPageInfo->m_dwResolutionY) != 0) ||
489 (m_pStream->read1Byte(&pPageInfo->m_cFlags) != 0) || 473 (m_pStream->read1Byte(&pPageInfo->m_cFlags) != 0) ||
490 (m_pStream->readShortInteger(&wTemp) != 0)) { 474 (m_pStream->readShortInteger(&wTemp) != 0)) {
491 delete pPageInfo;
492 goto failed1; 475 goto failed1;
493 } 476 }
494 pPageInfo->m_bIsStriped = ((wTemp >> 15) & 1) ? 1 : 0; 477 pPageInfo->m_bIsStriped = ((wTemp >> 15) & 1) ? 1 : 0;
495 pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff; 478 pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff;
496 if ((pPageInfo->m_dwHeight == 0xffffffff) && 479 if ((pPageInfo->m_dwHeight == 0xffffffff) &&
497 (pPageInfo->m_bIsStriped != 1)) { 480 (pPageInfo->m_bIsStriped != TRUE)) {
498 m_pModule->JBig2_Warn("page height = 0xffffffff buf stripe field is 0"); 481 m_pModule->JBig2_Warn("page height = 0xffffffff buf stripe field is 0");
499 pPageInfo->m_bIsStriped = 1; 482 pPageInfo->m_bIsStriped = TRUE;
500 } 483 }
501 if (!m_bBufSpecified) { 484 if (!m_bBufSpecified) {
502 delete m_pPage; 485 delete m_pPage;
503 if (pPageInfo->m_dwHeight == 0xffffffff) { 486 if (pPageInfo->m_dwHeight == 0xffffffff) {
504 JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth, 487 JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth,
505 pPageInfo->m_wMaxStripeSize)); 488 pPageInfo->m_wMaxStripeSize));
506 } else { 489 } else {
507 JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth, 490 JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth,
508 pPageInfo->m_dwHeight)); 491 pPageInfo->m_dwHeight));
509 } 492 }
510 } 493 }
511 m_pPage->fill((pPageInfo->m_cFlags & 4) ? 1 : 0); 494 m_pPage->fill((pPageInfo->m_cFlags & 4) ? 1 : 0);
512 m_pPageInfoList->addItem(pPageInfo); 495 m_PageInfoList.push_back(pPageInfo.release());
513 m_nState = JBIG2_IN_PAGE; 496 m_nState = JBIG2_IN_PAGE;
514 } break; 497 } break;
515 case 49: 498 case 49:
516 m_nState = JBIG2_OUT_OF_PAGE; 499 m_nState = JBIG2_OUT_OF_PAGE;
517 return JBIG2_END_OF_PAGE; 500 return JBIG2_END_OF_PAGE;
518 break; 501 break;
519 case 50: 502 case 50:
520 m_pStream->offset(pSegment->m_dwData_length); 503 m_pStream->offset(pSegment->m_dwData_length);
521 break; 504 break;
522 case 51: 505 case 51:
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 if (pSymbolDictDecoder->SDHUFF == 1) { 629 if (pSymbolDictDecoder->SDHUFF == 1) {
647 if ((cSDHUFFDH == 2) || (cSDHUFFDW == 2)) { 630 if ((cSDHUFFDH == 2) || (cSDHUFFDW == 2)) {
648 m_pModule->JBig2_Error( 631 m_pModule->JBig2_Error(
649 "symbol dictionary segment : SDHUFFDH=2 or SDHUFFDW=2 is not " 632 "symbol dictionary segment : SDHUFFDH=2 or SDHUFFDW=2 is not "
650 "permitted."); 633 "permitted.");
651 nRet = JBIG2_ERROR_FATAL; 634 nRet = JBIG2_ERROR_FATAL;
652 goto failed; 635 goto failed;
653 } 636 }
654 nIndex = 0; 637 nIndex = 0;
655 if (cSDHUFFDH == 0) { 638 if (cSDHUFFDH == 0) {
656 JBIG2_ALLOC(Table_B4, CJBig2_HuffmanTable(HuffmanTable_B4, 639 Table_B4 = new CJBig2_HuffmanTable(HuffmanTable_B4,
657 sizeof(HuffmanTable_B4) / 640 FX_ArraySize(HuffmanTable_B4),
658 sizeof(JBig2TableLine), 641 HuffmanTable_HTOOB_B4);
659 HuffmanTable_HTOOB_B4));
660 pSymbolDictDecoder->SDHUFFDH = Table_B4; 642 pSymbolDictDecoder->SDHUFFDH = Table_B4;
661 } else if (cSDHUFFDH == 1) { 643 } else if (cSDHUFFDH == 1) {
662 JBIG2_ALLOC(Table_B5, CJBig2_HuffmanTable(HuffmanTable_B5, 644 Table_B5 = new CJBig2_HuffmanTable(HuffmanTable_B5,
663 sizeof(HuffmanTable_B5) / 645 FX_ArraySize(HuffmanTable_B5),
664 sizeof(JBig2TableLine), 646 HuffmanTable_HTOOB_B5);
665 HuffmanTable_HTOOB_B5));
666 pSymbolDictDecoder->SDHUFFDH = Table_B5; 647 pSymbolDictDecoder->SDHUFFDH = Table_B5;
667 } else { 648 } else {
668 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 649 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
669 if (!pSeg) { 650 if (!pSeg) {
670 m_pModule->JBig2_Error( 651 m_pModule->JBig2_Error(
671 "symbol dictionary segment : SDHUFFDH can't find user supplied " 652 "symbol dictionary segment : SDHUFFDH can't find user supplied "
672 "table."); 653 "table.");
673 nRet = JBIG2_ERROR_FATAL; 654 nRet = JBIG2_ERROR_FATAL;
674 goto failed; 655 goto failed;
675 } 656 }
676 pSymbolDictDecoder->SDHUFFDH = pSeg->m_Result.ht; 657 pSymbolDictDecoder->SDHUFFDH = pSeg->m_Result.ht;
677 } 658 }
678 if (cSDHUFFDW == 0) { 659 if (cSDHUFFDW == 0) {
679 JBIG2_ALLOC(Table_B2, CJBig2_HuffmanTable(HuffmanTable_B2, 660 Table_B2 = new CJBig2_HuffmanTable(HuffmanTable_B2,
680 sizeof(HuffmanTable_B2) / 661 FX_ArraySize(HuffmanTable_B2),
681 sizeof(JBig2TableLine), 662 HuffmanTable_HTOOB_B2);
682 HuffmanTable_HTOOB_B2));
683 pSymbolDictDecoder->SDHUFFDW = Table_B2; 663 pSymbolDictDecoder->SDHUFFDW = Table_B2;
684 } else if (cSDHUFFDW == 1) { 664 } else if (cSDHUFFDW == 1) {
685 JBIG2_ALLOC(Table_B3, CJBig2_HuffmanTable(HuffmanTable_B3, 665 Table_B3 = new CJBig2_HuffmanTable(HuffmanTable_B3,
686 sizeof(HuffmanTable_B3) / 666 FX_ArraySize(HuffmanTable_B3),
687 sizeof(JBig2TableLine), 667 HuffmanTable_HTOOB_B3);
688 HuffmanTable_HTOOB_B3));
689 pSymbolDictDecoder->SDHUFFDW = Table_B3; 668 pSymbolDictDecoder->SDHUFFDW = Table_B3;
690 } else { 669 } else {
691 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 670 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
692 if (!pSeg) { 671 if (!pSeg) {
693 m_pModule->JBig2_Error( 672 m_pModule->JBig2_Error(
694 "symbol dictionary segment : SDHUFFDW can't find user supplied " 673 "symbol dictionary segment : SDHUFFDW can't find user supplied "
695 "table."); 674 "table.");
696 nRet = JBIG2_ERROR_FATAL; 675 nRet = JBIG2_ERROR_FATAL;
697 goto failed; 676 goto failed;
698 } 677 }
699 pSymbolDictDecoder->SDHUFFDW = pSeg->m_Result.ht; 678 pSymbolDictDecoder->SDHUFFDW = pSeg->m_Result.ht;
700 } 679 }
701 if (cSDHUFFBMSIZE == 0) { 680 if (cSDHUFFBMSIZE == 0) {
702 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, 681 Table_B1 = new CJBig2_HuffmanTable(HuffmanTable_B1,
703 sizeof(HuffmanTable_B1) / 682 FX_ArraySize(HuffmanTable_B1),
704 sizeof(JBig2TableLine), 683 HuffmanTable_HTOOB_B1);
705 HuffmanTable_HTOOB_B1));
706 pSymbolDictDecoder->SDHUFFBMSIZE = Table_B1; 684 pSymbolDictDecoder->SDHUFFBMSIZE = Table_B1;
707 } else { 685 } else {
708 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 686 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
709 if (!pSeg) { 687 if (!pSeg) {
710 m_pModule->JBig2_Error( 688 m_pModule->JBig2_Error(
711 "symbol dictionary segment : SDHUFFBMSIZE can't find user supplied " 689 "symbol dictionary segment : SDHUFFBMSIZE can't find user supplied "
712 "table."); 690 "table.");
713 nRet = JBIG2_ERROR_FATAL; 691 nRet = JBIG2_ERROR_FATAL;
714 goto failed; 692 goto failed;
715 } 693 }
716 pSymbolDictDecoder->SDHUFFBMSIZE = pSeg->m_Result.ht; 694 pSymbolDictDecoder->SDHUFFBMSIZE = pSeg->m_Result.ht;
717 } 695 }
718 if (pSymbolDictDecoder->SDREFAGG == 1) { 696 if (pSymbolDictDecoder->SDREFAGG == 1) {
719 if (cSDHUFFAGGINST == 0) { 697 if (cSDHUFFAGGINST == 0) {
720 if (!Table_B1) { 698 if (!Table_B1) {
721 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, 699 Table_B1 = new CJBig2_HuffmanTable(HuffmanTable_B1,
722 sizeof(HuffmanTable_B1) / 700 FX_ArraySize(HuffmanTable_B1),
723 sizeof(JBig2TableLine), 701 HuffmanTable_HTOOB_B1);
724 HuffmanTable_HTOOB_B1));
725 } 702 }
726 pSymbolDictDecoder->SDHUFFAGGINST = Table_B1; 703 pSymbolDictDecoder->SDHUFFAGGINST = Table_B1;
727 } else { 704 } else {
728 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 705 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
729 if (!pSeg) { 706 if (!pSeg) {
730 m_pModule->JBig2_Error( 707 m_pModule->JBig2_Error(
731 "symbol dictionary segment : SDHUFFAGGINST can't find user " 708 "symbol dictionary segment : SDHUFFAGGINST can't find user "
732 "supplied table."); 709 "supplied table.");
733 nRet = JBIG2_ERROR_FATAL; 710 nRet = JBIG2_ERROR_FATAL;
734 goto failed; 711 goto failed;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 if (it->first == key) { 753 if (it->first == key) {
777 pSegment->m_Result.sd = it->second->DeepCopy(); 754 pSegment->m_Result.sd = it->second->DeepCopy();
778 m_pSymbolDictCache->push_front(*it); 755 m_pSymbolDictCache->push_front(*it);
779 m_pSymbolDictCache->erase(it); 756 m_pSymbolDictCache->erase(it);
780 cache_hit = true; 757 cache_hit = true;
781 break; 758 break;
782 } 759 }
783 } 760 }
784 if (!cache_hit) { 761 if (!cache_hit) {
785 if (pSymbolDictDecoder->SDHUFF == 0) { 762 if (pSymbolDictDecoder->SDHUFF == 0) {
786 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); 763 pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
787 pSegment->m_Result.sd = 764 pSegment->m_Result.sd =
788 pSymbolDictDecoder->decode_Arith(pArithDecoder, gbContext, grContext); 765 pSymbolDictDecoder->decode_Arith(pArithDecoder, gbContext, grContext);
789 delete pArithDecoder; 766 delete pArithDecoder;
790 if (pSegment->m_Result.sd == NULL) { 767 if (pSegment->m_Result.sd == NULL) {
791 nRet = JBIG2_ERROR_FATAL; 768 nRet = JBIG2_ERROR_FATAL;
792 goto failed; 769 goto failed;
793 } 770 }
794 m_pStream->alignByte(); 771 m_pStream->alignByte();
795 m_pStream->offset(2); 772 m_pStream->offset(2);
796 } else { 773 } else {
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 if ((cSBHUFFFS == 2) || (cSBHUFFRDW == 2) || (cSBHUFFRDH == 2) || 957 if ((cSBHUFFFS == 2) || (cSBHUFFRDW == 2) || (cSBHUFFRDH == 2) ||
981 (cSBHUFFRDX == 2) || (cSBHUFFRDY == 2)) { 958 (cSBHUFFRDX == 2) || (cSBHUFFRDY == 2)) {
982 m_pModule->JBig2_Error( 959 m_pModule->JBig2_Error(
983 "text region segment : SBHUFFFS=2 or SBHUFFRDW=2 or " 960 "text region segment : SBHUFFFS=2 or SBHUFFRDW=2 or "
984 "SBHUFFRDH=2 or SBHUFFRDX=2 or SBHUFFRDY=2 is not permitted"); 961 "SBHUFFRDH=2 or SBHUFFRDX=2 or SBHUFFRDY=2 is not permitted");
985 nRet = JBIG2_ERROR_FATAL; 962 nRet = JBIG2_ERROR_FATAL;
986 goto failed; 963 goto failed;
987 } 964 }
988 nIndex = 0; 965 nIndex = 0;
989 if (cSBHUFFFS == 0) { 966 if (cSBHUFFFS == 0) {
990 JBIG2_ALLOC(Table_B6, CJBig2_HuffmanTable(HuffmanTable_B6, 967 Table_B6 = new CJBig2_HuffmanTable(HuffmanTable_B6,
991 sizeof(HuffmanTable_B6) / 968 FX_ArraySize(HuffmanTable_B6),
992 sizeof(JBig2TableLine), 969 HuffmanTable_HTOOB_B6);
993 HuffmanTable_HTOOB_B6));
994 pTRD->SBHUFFFS = Table_B6; 970 pTRD->SBHUFFFS = Table_B6;
995 } else if (cSBHUFFFS == 1) { 971 } else if (cSBHUFFFS == 1) {
996 JBIG2_ALLOC(Table_B7, CJBig2_HuffmanTable(HuffmanTable_B7, 972 Table_B7 = new CJBig2_HuffmanTable(HuffmanTable_B7,
997 sizeof(HuffmanTable_B7) / 973 FX_ArraySize(HuffmanTable_B7),
998 sizeof(JBig2TableLine), 974 HuffmanTable_HTOOB_B7);
999 HuffmanTable_HTOOB_B7));
1000 pTRD->SBHUFFFS = Table_B7; 975 pTRD->SBHUFFFS = Table_B7;
1001 } else { 976 } else {
1002 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 977 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
1003 if (!pSeg) { 978 if (!pSeg) {
1004 m_pModule->JBig2_Error( 979 m_pModule->JBig2_Error(
1005 "text region segment : SBHUFFFS can't find user supplied table"); 980 "text region segment : SBHUFFFS can't find user supplied table");
1006 nRet = JBIG2_ERROR_FATAL; 981 nRet = JBIG2_ERROR_FATAL;
1007 goto failed; 982 goto failed;
1008 } 983 }
1009 pTRD->SBHUFFFS = pSeg->m_Result.ht; 984 pTRD->SBHUFFFS = pSeg->m_Result.ht;
1010 } 985 }
1011 if (cSBHUFFDS == 0) { 986 if (cSBHUFFDS == 0) {
1012 JBIG2_ALLOC(Table_B8, CJBig2_HuffmanTable(HuffmanTable_B8, 987 Table_B8 = new CJBig2_HuffmanTable(HuffmanTable_B8,
1013 sizeof(HuffmanTable_B8) / 988 FX_ArraySize(HuffmanTable_B8),
1014 sizeof(JBig2TableLine), 989 HuffmanTable_HTOOB_B8);
1015 HuffmanTable_HTOOB_B8));
1016 pTRD->SBHUFFDS = Table_B8; 990 pTRD->SBHUFFDS = Table_B8;
1017 } else if (cSBHUFFDS == 1) { 991 } else if (cSBHUFFDS == 1) {
1018 JBIG2_ALLOC(Table_B9, CJBig2_HuffmanTable(HuffmanTable_B9, 992 Table_B9 = new CJBig2_HuffmanTable(HuffmanTable_B9,
1019 sizeof(HuffmanTable_B9) / 993 FX_ArraySize(HuffmanTable_B9),
1020 sizeof(JBig2TableLine), 994 HuffmanTable_HTOOB_B9);
1021 HuffmanTable_HTOOB_B9));
1022 pTRD->SBHUFFDS = Table_B9; 995 pTRD->SBHUFFDS = Table_B9;
1023 } else if (cSBHUFFDS == 2) { 996 } else if (cSBHUFFDS == 2) {
1024 JBIG2_ALLOC(Table_B10, CJBig2_HuffmanTable(HuffmanTable_B10, 997 Table_B10 = new CJBig2_HuffmanTable(HuffmanTable_B10,
1025 sizeof(HuffmanTable_B10) / 998 FX_ArraySize(HuffmanTable_B10),
1026 sizeof(JBig2TableLine), 999 HuffmanTable_HTOOB_B10);
1027 HuffmanTable_HTOOB_B10));
1028 pTRD->SBHUFFDS = Table_B10; 1000 pTRD->SBHUFFDS = Table_B10;
1029 } else { 1001 } else {
1030 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 1002 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
1031 if (!pSeg) { 1003 if (!pSeg) {
1032 m_pModule->JBig2_Error( 1004 m_pModule->JBig2_Error(
1033 "text region segment : SBHUFFDS can't find user supplied table"); 1005 "text region segment : SBHUFFDS can't find user supplied table");
1034 nRet = JBIG2_ERROR_FATAL; 1006 nRet = JBIG2_ERROR_FATAL;
1035 goto failed; 1007 goto failed;
1036 } 1008 }
1037 pTRD->SBHUFFDS = pSeg->m_Result.ht; 1009 pTRD->SBHUFFDS = pSeg->m_Result.ht;
1038 } 1010 }
1039 if (cSBHUFFDT == 0) { 1011 if (cSBHUFFDT == 0) {
1040 JBIG2_ALLOC(Table_B11, CJBig2_HuffmanTable(HuffmanTable_B11, 1012 Table_B11 = new CJBig2_HuffmanTable(HuffmanTable_B11,
1041 sizeof(HuffmanTable_B11) / 1013 FX_ArraySize(HuffmanTable_B11),
1042 sizeof(JBig2TableLine), 1014 HuffmanTable_HTOOB_B11);
1043 HuffmanTable_HTOOB_B11));
1044 pTRD->SBHUFFDT = Table_B11; 1015 pTRD->SBHUFFDT = Table_B11;
1045 } else if (cSBHUFFDT == 1) { 1016 } else if (cSBHUFFDT == 1) {
1046 JBIG2_ALLOC(Table_B12, CJBig2_HuffmanTable(HuffmanTable_B12, 1017 Table_B12 = new CJBig2_HuffmanTable(HuffmanTable_B12,
1047 sizeof(HuffmanTable_B12) / 1018 FX_ArraySize(HuffmanTable_B12),
1048 sizeof(JBig2TableLine), 1019 HuffmanTable_HTOOB_B12);
1049 HuffmanTable_HTOOB_B12));
1050 pTRD->SBHUFFDT = Table_B12; 1020 pTRD->SBHUFFDT = Table_B12;
1051 } else if (cSBHUFFDT == 2) { 1021 } else if (cSBHUFFDT == 2) {
1052 JBIG2_ALLOC(Table_B13, CJBig2_HuffmanTable(HuffmanTable_B13, 1022 Table_B13 = new CJBig2_HuffmanTable(HuffmanTable_B13,
1053 sizeof(HuffmanTable_B13) / 1023 FX_ArraySize(HuffmanTable_B13),
1054 sizeof(JBig2TableLine), 1024 HuffmanTable_HTOOB_B13);
1055 HuffmanTable_HTOOB_B13));
1056 pTRD->SBHUFFDT = Table_B13; 1025 pTRD->SBHUFFDT = Table_B13;
1057 } else { 1026 } else {
1058 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 1027 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
1059 if (!pSeg) { 1028 if (!pSeg) {
1060 m_pModule->JBig2_Error( 1029 m_pModule->JBig2_Error(
1061 "text region segment : SBHUFFDT can't find user supplied table"); 1030 "text region segment : SBHUFFDT can't find user supplied table");
1062 nRet = JBIG2_ERROR_FATAL; 1031 nRet = JBIG2_ERROR_FATAL;
1063 goto failed; 1032 goto failed;
1064 } 1033 }
1065 pTRD->SBHUFFDT = pSeg->m_Result.ht; 1034 pTRD->SBHUFFDT = pSeg->m_Result.ht;
1066 } 1035 }
1067 if (cSBHUFFRDW == 0) { 1036 if (cSBHUFFRDW == 0) {
1068 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, 1037 Table_B14 = new CJBig2_HuffmanTable(HuffmanTable_B14,
1069 sizeof(HuffmanTable_B14) / 1038 FX_ArraySize(HuffmanTable_B14),
1070 sizeof(JBig2TableLine), 1039 HuffmanTable_HTOOB_B14);
1071 HuffmanTable_HTOOB_B14));
1072 pTRD->SBHUFFRDW = Table_B14; 1040 pTRD->SBHUFFRDW = Table_B14;
1073 } else if (cSBHUFFRDW == 1) { 1041 } else if (cSBHUFFRDW == 1) {
1074 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, 1042 Table_B15 = new CJBig2_HuffmanTable(HuffmanTable_B15,
1075 sizeof(HuffmanTable_B15) / 1043 FX_ArraySize(HuffmanTable_B15),
1076 sizeof(JBig2TableLine), 1044 HuffmanTable_HTOOB_B15);
1077 HuffmanTable_HTOOB_B15));
1078 pTRD->SBHUFFRDW = Table_B15; 1045 pTRD->SBHUFFRDW = Table_B15;
1079 } else { 1046 } else {
1080 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 1047 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
1081 if (!pSeg) { 1048 if (!pSeg) {
1082 m_pModule->JBig2_Error( 1049 m_pModule->JBig2_Error(
1083 "text region segment : SBHUFFRDW can't find user supplied table"); 1050 "text region segment : SBHUFFRDW can't find user supplied table");
1084 nRet = JBIG2_ERROR_FATAL; 1051 nRet = JBIG2_ERROR_FATAL;
1085 goto failed; 1052 goto failed;
1086 } 1053 }
1087 pTRD->SBHUFFRDW = pSeg->m_Result.ht; 1054 pTRD->SBHUFFRDW = pSeg->m_Result.ht;
1088 } 1055 }
1089 if (cSBHUFFRDH == 0) { 1056 if (cSBHUFFRDH == 0) {
1090 if (!Table_B14) { 1057 if (!Table_B14) {
1091 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, 1058 Table_B14 = new CJBig2_HuffmanTable(HuffmanTable_B14,
1092 sizeof(HuffmanTable_B14) / 1059 FX_ArraySize(HuffmanTable_B14),
1093 sizeof(JBig2TableLine), 1060 HuffmanTable_HTOOB_B14);
1094 HuffmanTable_HTOOB_B14));
1095 } 1061 }
1096 pTRD->SBHUFFRDH = Table_B14; 1062 pTRD->SBHUFFRDH = Table_B14;
1097 } else if (cSBHUFFRDH == 1) { 1063 } else if (cSBHUFFRDH == 1) {
1098 if (!Table_B15) { 1064 if (!Table_B15) {
1099 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, 1065 Table_B15 = new CJBig2_HuffmanTable(HuffmanTable_B15,
1100 sizeof(HuffmanTable_B15) / 1066 FX_ArraySize(HuffmanTable_B15),
1101 sizeof(JBig2TableLine), 1067 HuffmanTable_HTOOB_B15);
1102 HuffmanTable_HTOOB_B15));
1103 } 1068 }
1104 pTRD->SBHUFFRDH = Table_B15; 1069 pTRD->SBHUFFRDH = Table_B15;
1105 } else { 1070 } else {
1106 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 1071 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
1107 if (!pSeg) { 1072 if (!pSeg) {
1108 m_pModule->JBig2_Error( 1073 m_pModule->JBig2_Error(
1109 "text region segment : SBHUFFRDH can't find user supplied table"); 1074 "text region segment : SBHUFFRDH can't find user supplied table");
1110 nRet = JBIG2_ERROR_FATAL; 1075 nRet = JBIG2_ERROR_FATAL;
1111 goto failed; 1076 goto failed;
1112 } 1077 }
1113 pTRD->SBHUFFRDH = pSeg->m_Result.ht; 1078 pTRD->SBHUFFRDH = pSeg->m_Result.ht;
1114 } 1079 }
1115 if (cSBHUFFRDX == 0) { 1080 if (cSBHUFFRDX == 0) {
1116 if (!Table_B14) { 1081 if (!Table_B14) {
1117 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, 1082 Table_B14 = new CJBig2_HuffmanTable(HuffmanTable_B14,
1118 sizeof(HuffmanTable_B14) / 1083 FX_ArraySize(HuffmanTable_B14),
1119 sizeof(JBig2TableLine), 1084 HuffmanTable_HTOOB_B14);
1120 HuffmanTable_HTOOB_B14));
1121 } 1085 }
1122 pTRD->SBHUFFRDX = Table_B14; 1086 pTRD->SBHUFFRDX = Table_B14;
1123 } else if (cSBHUFFRDX == 1) { 1087 } else if (cSBHUFFRDX == 1) {
1124 if (!Table_B15) { 1088 if (!Table_B15) {
1125 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, 1089 Table_B15 = new CJBig2_HuffmanTable(HuffmanTable_B15,
1126 sizeof(HuffmanTable_B15) / 1090 FX_ArraySize(HuffmanTable_B15),
1127 sizeof(JBig2TableLine), 1091 HuffmanTable_HTOOB_B15);
1128 HuffmanTable_HTOOB_B15));
1129 } 1092 }
1130 pTRD->SBHUFFRDX = Table_B15; 1093 pTRD->SBHUFFRDX = Table_B15;
1131 } else { 1094 } else {
1132 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 1095 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
1133 if (!pSeg) { 1096 if (!pSeg) {
1134 m_pModule->JBig2_Error( 1097 m_pModule->JBig2_Error(
1135 "text region segment : SBHUFFRDX can't find user supplied table"); 1098 "text region segment : SBHUFFRDX can't find user supplied table");
1136 nRet = JBIG2_ERROR_FATAL; 1099 nRet = JBIG2_ERROR_FATAL;
1137 goto failed; 1100 goto failed;
1138 } 1101 }
1139 pTRD->SBHUFFRDX = pSeg->m_Result.ht; 1102 pTRD->SBHUFFRDX = pSeg->m_Result.ht;
1140 } 1103 }
1141 if (cSBHUFFRDY == 0) { 1104 if (cSBHUFFRDY == 0) {
1142 if (!Table_B14) { 1105 if (!Table_B14) {
1143 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, 1106 Table_B14 = new CJBig2_HuffmanTable(HuffmanTable_B14,
1144 sizeof(HuffmanTable_B14) / 1107 FX_ArraySize(HuffmanTable_B14),
1145 sizeof(JBig2TableLine), 1108 HuffmanTable_HTOOB_B14);
1146 HuffmanTable_HTOOB_B14));
1147 } 1109 }
1148 pTRD->SBHUFFRDY = Table_B14; 1110 pTRD->SBHUFFRDY = Table_B14;
1149 } else if (cSBHUFFRDY == 1) { 1111 } else if (cSBHUFFRDY == 1) {
1150 if (!Table_B15) { 1112 if (!Table_B15) {
1151 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, 1113 Table_B15 = new CJBig2_HuffmanTable(HuffmanTable_B15,
1152 sizeof(HuffmanTable_B15) / 1114 FX_ArraySize(HuffmanTable_B15),
1153 sizeof(JBig2TableLine), 1115 HuffmanTable_HTOOB_B15);
1154 HuffmanTable_HTOOB_B15));
1155 } 1116 }
1156 pTRD->SBHUFFRDY = Table_B15; 1117 pTRD->SBHUFFRDY = Table_B15;
1157 } else { 1118 } else {
1158 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 1119 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
1159 if (!pSeg) { 1120 if (!pSeg) {
1160 m_pModule->JBig2_Error( 1121 m_pModule->JBig2_Error(
1161 "text region segment : SBHUFFRDY can't find user supplied table"); 1122 "text region segment : SBHUFFRDY can't find user supplied table");
1162 nRet = JBIG2_ERROR_FATAL; 1123 nRet = JBIG2_ERROR_FATAL;
1163 goto failed; 1124 goto failed;
1164 } 1125 }
1165 pTRD->SBHUFFRDY = pSeg->m_Result.ht; 1126 pTRD->SBHUFFRDY = pSeg->m_Result.ht;
1166 } 1127 }
1167 if (cSBHUFFRSIZE == 0) { 1128 if (cSBHUFFRSIZE == 0) {
1168 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, 1129 Table_B1 = new CJBig2_HuffmanTable(HuffmanTable_B1,
1169 sizeof(HuffmanTable_B1) / 1130 FX_ArraySize(HuffmanTable_B1),
1170 sizeof(JBig2TableLine), 1131 HuffmanTable_HTOOB_B1);
1171 HuffmanTable_HTOOB_B1));
1172 pTRD->SBHUFFRSIZE = Table_B1; 1132 pTRD->SBHUFFRSIZE = Table_B1;
1173 } else { 1133 } else {
1174 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 1134 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
1175 if (!pSeg) { 1135 if (!pSeg) {
1176 m_pModule->JBig2_Error( 1136 m_pModule->JBig2_Error(
1177 "text region segment : SBHUFFRSIZE can't find user supplied table"); 1137 "text region segment : SBHUFFRSIZE can't find user supplied table");
1178 nRet = JBIG2_ERROR_FATAL; 1138 nRet = JBIG2_ERROR_FATAL;
1179 goto failed; 1139 goto failed;
1180 } 1140 }
1181 pTRD->SBHUFFRSIZE = pSeg->m_Result.ht; 1141 pTRD->SBHUFFRSIZE = pSeg->m_Result.ht;
1182 } 1142 }
1183 } 1143 }
1184 if (pTRD->SBREFINE == 1) { 1144 if (pTRD->SBREFINE == 1) {
1185 dwTemp = pTRD->SBRTEMPLATE ? 1 << 10 : 1 << 13; 1145 dwTemp = pTRD->SBRTEMPLATE ? 1 << 10 : 1 << 13;
1186 grContext = 1146 grContext =
1187 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp); 1147 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
1188 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp); 1148 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
1189 } 1149 }
1190 if (pTRD->SBHUFF == 0) { 1150 if (pTRD->SBHUFF == 0) {
1191 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); 1151 pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
1192 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 1152 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
1193 pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext); 1153 pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext);
1194 delete pArithDecoder; 1154 delete pArithDecoder;
1195 if (pSegment->m_Result.im == NULL) { 1155 if (pSegment->m_Result.im == NULL) {
1196 nRet = JBIG2_ERROR_FATAL; 1156 nRet = JBIG2_ERROR_FATAL;
1197 goto failed; 1157 goto failed;
1198 } 1158 }
1199 m_pStream->alignByte(); 1159 m_pStream->alignByte();
1200 m_pStream->offset(2); 1160 m_pStream->offset(2);
1201 } else { 1161 } else {
1202 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 1162 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
1203 pSegment->m_Result.im = pTRD->decode_Huffman(m_pStream, grContext); 1163 pSegment->m_Result.im = pTRD->decode_Huffman(m_pStream, grContext);
1204 if (pSegment->m_Result.im == NULL) { 1164 if (pSegment->m_Result.im == NULL) {
1205 nRet = JBIG2_ERROR_FATAL; 1165 nRet = JBIG2_ERROR_FATAL;
1206 goto failed; 1166 goto failed;
1207 } 1167 }
1208 m_pStream->alignByte(); 1168 m_pStream->alignByte();
1209 } 1169 }
1210 if (pSegment->m_cFlags.s.type != 4) { 1170 if (pSegment->m_cFlags.s.type != 4) {
1211 if (!m_bBufSpecified) { 1171 if (!m_bBufSpecified) {
1212 JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast(); 1172 JBig2PageInfo* pPageInfo = m_PageInfoList.back();
1213 if ((pPageInfo->m_bIsStriped == 1) && 1173 if ((pPageInfo->m_bIsStriped == 1) &&
1214 (ri.y + ri.height > m_pPage->m_nHeight)) { 1174 (ri.y + ri.height > m_pPage->m_nHeight)) {
1215 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0); 1175 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
1216 } 1176 }
1217 } 1177 }
1218 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, 1178 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im,
1219 (JBig2ComposeOp)(ri.flags & 0x03)); 1179 (JBig2ComposeOp)(ri.flags & 0x03));
1220 delete pSegment->m_Result.im; 1180 delete pSegment->m_Result.im;
1221 pSegment->m_Result.im = NULL; 1181 pSegment->m_Result.im = NULL;
1222 } 1182 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1292 } 1252 }
1293 pPDD->HDMMR = cFlags & 0x01; 1253 pPDD->HDMMR = cFlags & 0x01;
1294 pPDD->HDTEMPLATE = (cFlags >> 1) & 0x03; 1254 pPDD->HDTEMPLATE = (cFlags >> 1) & 0x03;
1295 pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER; 1255 pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER;
1296 if (pPDD->HDMMR == 0) { 1256 if (pPDD->HDMMR == 0) {
1297 dwTemp = 1257 dwTemp =
1298 pPDD->HDTEMPLATE == 0 ? 65536 : pPDD->HDTEMPLATE == 1 ? 8192 : 1024; 1258 pPDD->HDTEMPLATE == 0 ? 65536 : pPDD->HDTEMPLATE == 1 ? 8192 : 1024;
1299 gbContext = 1259 gbContext =
1300 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp); 1260 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
1301 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); 1261 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
1302 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); 1262 pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
1303 pSegment->m_Result.pd = 1263 pSegment->m_Result.pd =
1304 pPDD->decode_Arith(pArithDecoder, gbContext, pPause); 1264 pPDD->decode_Arith(pArithDecoder, gbContext, pPause);
1305 delete pArithDecoder; 1265 delete pArithDecoder;
1306 if (pSegment->m_Result.pd == NULL) { 1266 if (pSegment->m_Result.pd == NULL) {
1307 m_pModule->JBig2_Free(gbContext); 1267 m_pModule->JBig2_Free(gbContext);
1308 nRet = JBIG2_ERROR_FATAL; 1268 nRet = JBIG2_ERROR_FATAL;
1309 goto failed; 1269 goto failed;
1310 } 1270 }
1311 m_pModule->JBig2_Free(gbContext); 1271 m_pModule->JBig2_Free(gbContext);
1312 m_pStream->alignByte(); 1272 m_pStream->alignByte();
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 pHRD->HNUMPATS = pPatternDict->NUMPATS; 1338 pHRD->HNUMPATS = pPatternDict->NUMPATS;
1379 pHRD->HPATS = pPatternDict->HDPATS; 1339 pHRD->HPATS = pPatternDict->HDPATS;
1380 pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth; 1340 pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth;
1381 pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight; 1341 pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight;
1382 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 1342 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
1383 if (pHRD->HMMR == 0) { 1343 if (pHRD->HMMR == 0) {
1384 dwTemp = pHRD->HTEMPLATE == 0 ? 65536 : pHRD->HTEMPLATE == 1 ? 8192 : 1024; 1344 dwTemp = pHRD->HTEMPLATE == 0 ? 65536 : pHRD->HTEMPLATE == 1 ? 8192 : 1024;
1385 gbContext = 1345 gbContext =
1386 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp); 1346 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
1387 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); 1347 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
1388 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); 1348 pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
1389 pSegment->m_Result.im = 1349 pSegment->m_Result.im =
1390 pHRD->decode_Arith(pArithDecoder, gbContext, pPause); 1350 pHRD->decode_Arith(pArithDecoder, gbContext, pPause);
1391 delete pArithDecoder; 1351 delete pArithDecoder;
1392 if (pSegment->m_Result.im == NULL) { 1352 if (pSegment->m_Result.im == NULL) {
1393 m_pModule->JBig2_Free(gbContext); 1353 m_pModule->JBig2_Free(gbContext);
1394 nRet = JBIG2_ERROR_FATAL; 1354 nRet = JBIG2_ERROR_FATAL;
1395 goto failed; 1355 goto failed;
1396 } 1356 }
1397 m_pModule->JBig2_Free(gbContext); 1357 m_pModule->JBig2_Free(gbContext);
1398 m_pStream->alignByte(); 1358 m_pStream->alignByte();
1399 m_pStream->offset(2); 1359 m_pStream->offset(2);
1400 } else { 1360 } else {
1401 pSegment->m_Result.im = pHRD->decode_MMR(m_pStream, pPause); 1361 pSegment->m_Result.im = pHRD->decode_MMR(m_pStream, pPause);
1402 if (pSegment->m_Result.im == NULL) { 1362 if (pSegment->m_Result.im == NULL) {
1403 nRet = JBIG2_ERROR_FATAL; 1363 nRet = JBIG2_ERROR_FATAL;
1404 goto failed; 1364 goto failed;
1405 } 1365 }
1406 m_pStream->alignByte(); 1366 m_pStream->alignByte();
1407 } 1367 }
1408 if (pSegment->m_cFlags.s.type != 20) { 1368 if (pSegment->m_cFlags.s.type != 20) {
1409 if (!m_bBufSpecified) { 1369 if (!m_bBufSpecified) {
1410 JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast(); 1370 JBig2PageInfo* pPageInfo = m_PageInfoList.back();
1411 if ((pPageInfo->m_bIsStriped == 1) && 1371 if ((pPageInfo->m_bIsStriped == 1) &&
1412 (ri.y + ri.height > m_pPage->m_nHeight)) { 1372 (ri.y + ri.height > m_pPage->m_nHeight)) {
1413 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0); 1373 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
1414 } 1374 }
1415 } 1375 }
1416 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, 1376 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im,
1417 (JBig2ComposeOp)(ri.flags & 0x03)); 1377 (JBig2ComposeOp)(ri.flags & 0x03));
1418 delete pSegment->m_Result.im; 1378 delete pSegment->m_Result.im;
1419 pSegment->m_Result.im = NULL; 1379 pSegment->m_Result.im = NULL;
1420 } 1380 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 1434 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
1475 if (m_pGRD->MMR == 0) { 1435 if (m_pGRD->MMR == 0) {
1476 dwTemp = 1436 dwTemp =
1477 m_pGRD->GBTEMPLATE == 0 ? 65536 : m_pGRD->GBTEMPLATE == 1 ? 8192 : 1024; 1437 m_pGRD->GBTEMPLATE == 0 ? 65536 : m_pGRD->GBTEMPLATE == 1 ? 8192 : 1024;
1478 if (m_gbContext == NULL) { 1438 if (m_gbContext == NULL) {
1479 m_gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc( 1439 m_gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc(
1480 sizeof(JBig2ArithCtx) * dwTemp); 1440 sizeof(JBig2ArithCtx) * dwTemp);
1481 JBIG2_memset(m_gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); 1441 JBIG2_memset(m_gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
1482 } 1442 }
1483 if (m_pArithDecoder == NULL) { 1443 if (m_pArithDecoder == NULL) {
1484 JBIG2_ALLOC(m_pArithDecoder, CJBig2_ArithDecoder(m_pStream)); 1444 m_pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
1485 m_ProcessiveStatus = m_pGRD->Start_decode_Arith( 1445 m_ProcessiveStatus = m_pGRD->Start_decode_Arith(
1486 &pSegment->m_Result.im, m_pArithDecoder, m_gbContext, pPause); 1446 &pSegment->m_Result.im, m_pArithDecoder, m_gbContext, pPause);
1487 } else { 1447 } else {
1488 m_ProcessiveStatus = m_pGRD->Continue_decode(pPause); 1448 m_ProcessiveStatus = m_pGRD->Continue_decode(pPause);
1489 } 1449 }
1490 if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) { 1450 if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
1491 if (pSegment->m_cFlags.s.type != 36) { 1451 if (pSegment->m_cFlags.s.type != 36) {
1492 if (!m_bBufSpecified) { 1452 if (!m_bBufSpecified) {
1493 JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast(); 1453 JBig2PageInfo* pPageInfo = m_PageInfoList.back();
1494 if ((pPageInfo->m_bIsStriped == 1) && 1454 if ((pPageInfo->m_bIsStriped == 1) &&
1495 (m_ri.y + m_ri.height > m_pPage->m_nHeight)) { 1455 (m_ri.y + m_ri.height > m_pPage->m_nHeight)) {
1496 m_pPage->expand(m_ri.y + m_ri.height, 1456 m_pPage->expand(m_ri.y + m_ri.height,
1497 (pPageInfo->m_cFlags & 4) ? 1 : 0); 1457 (pPageInfo->m_cFlags & 4) ? 1 : 0);
1498 } 1458 }
1499 } 1459 }
1500 FX_RECT Rect = m_pGRD->GetReplaceRect(); 1460 FX_RECT Rect = m_pGRD->GetReplaceRect();
1501 m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top, 1461 m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top,
1502 pSegment->m_Result.im, 1462 pSegment->m_Result.im,
1503 (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect); 1463 (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect);
(...skipping 21 matching lines...) Expand all
1525 m_pGRD->Continue_decode(pPause); 1485 m_pGRD->Continue_decode(pPause);
1526 } 1486 }
1527 if (pSegment->m_Result.im == NULL) { 1487 if (pSegment->m_Result.im == NULL) {
1528 nRet = JBIG2_ERROR_FATAL; 1488 nRet = JBIG2_ERROR_FATAL;
1529 goto failed; 1489 goto failed;
1530 } 1490 }
1531 m_pStream->alignByte(); 1491 m_pStream->alignByte();
1532 } 1492 }
1533 if (pSegment->m_cFlags.s.type != 36) { 1493 if (pSegment->m_cFlags.s.type != 36) {
1534 if (!m_bBufSpecified) { 1494 if (!m_bBufSpecified) {
1535 JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast(); 1495 JBig2PageInfo* pPageInfo = m_PageInfoList.back();
1536 if ((pPageInfo->m_bIsStriped == 1) && 1496 if ((pPageInfo->m_bIsStriped == 1) &&
1537 (m_ri.y + m_ri.height > m_pPage->m_nHeight)) { 1497 (m_ri.y + m_ri.height > m_pPage->m_nHeight)) {
1538 m_pPage->expand(m_ri.y + m_ri.height, 1498 m_pPage->expand(m_ri.y + m_ri.height,
1539 (pPageInfo->m_cFlags & 4) ? 1 : 0); 1499 (pPageInfo->m_cFlags & 4) ? 1 : 0);
1540 } 1500 }
1541 } 1501 }
1542 FX_RECT Rect = m_pGRD->GetReplaceRect(); 1502 FX_RECT Rect = m_pGRD->GetReplaceRect();
1543 m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top, 1503 m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top,
1544 pSegment->m_Result.im, 1504 pSegment->m_Result.im,
1545 (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect); 1505 (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 pGRRD->GRREFERENCE = pSeg->m_Result.im; 1572 pGRRD->GRREFERENCE = pSeg->m_Result.im;
1613 } else { 1573 } else {
1614 pGRRD->GRREFERENCE = m_pPage; 1574 pGRRD->GRREFERENCE = m_pPage;
1615 } 1575 }
1616 pGRRD->GRREFERENCEDX = 0; 1576 pGRRD->GRREFERENCEDX = 0;
1617 pGRRD->GRREFERENCEDY = 0; 1577 pGRRD->GRREFERENCEDY = 0;
1618 dwTemp = pGRRD->GRTEMPLATE ? 1 << 10 : 1 << 13; 1578 dwTemp = pGRRD->GRTEMPLATE ? 1 << 10 : 1 << 13;
1619 grContext = 1579 grContext =
1620 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp); 1580 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
1621 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp); 1581 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
1622 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); 1582 pArithDecoder = new CJBig2_ArithDecoder(m_pStream);
1623 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 1583 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
1624 pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext); 1584 pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext);
1625 delete pArithDecoder; 1585 delete pArithDecoder;
1626 if (pSegment->m_Result.im == NULL) { 1586 if (pSegment->m_Result.im == NULL) {
1627 m_pModule->JBig2_Free(grContext); 1587 m_pModule->JBig2_Free(grContext);
1628 nRet = JBIG2_ERROR_FATAL; 1588 nRet = JBIG2_ERROR_FATAL;
1629 goto failed; 1589 goto failed;
1630 } 1590 }
1631 m_pModule->JBig2_Free(grContext); 1591 m_pModule->JBig2_Free(grContext);
1632 m_pStream->alignByte(); 1592 m_pStream->alignByte();
1633 m_pStream->offset(2); 1593 m_pStream->offset(2);
1634 if (pSegment->m_cFlags.s.type != 40) { 1594 if (pSegment->m_cFlags.s.type != 40) {
1635 if (!m_bBufSpecified) { 1595 if (!m_bBufSpecified) {
1636 JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast(); 1596 JBig2PageInfo* pPageInfo = m_PageInfoList.back();
1637 if ((pPageInfo->m_bIsStriped == 1) && 1597 if ((pPageInfo->m_bIsStriped == 1) &&
1638 (ri.y + ri.height > m_pPage->m_nHeight)) { 1598 (ri.y + ri.height > m_pPage->m_nHeight)) {
1639 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0); 1599 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
1640 } 1600 }
1641 } 1601 }
1642 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, 1602 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im,
1643 (JBig2ComposeOp)(ri.flags & 0x03)); 1603 (JBig2ComposeOp)(ri.flags & 0x03));
1644 delete pSegment->m_Result.im; 1604 delete pSegment->m_Result.im;
1645 pSegment->m_Result.im = NULL; 1605 pSegment->m_Result.im = NULL;
1646 } 1606 }
1647 delete pGRRD; 1607 delete pGRRD;
1648 return JBIG2_SUCCESS; 1608 return JBIG2_SUCCESS;
1649 failed: 1609 failed:
1650 delete pGRRD; 1610 delete pGRRD;
1651 return nRet; 1611 return nRet;
1652 } 1612 }
1653 int32_t CJBig2_Context::parseTable(CJBig2_Segment* pSegment) { 1613 int32_t CJBig2_Context::parseTable(CJBig2_Segment* pSegment) {
1654 pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER; 1614 pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER;
1655 JBIG2_ALLOC(pSegment->m_Result.ht, CJBig2_HuffmanTable(m_pStream)); 1615 pSegment->m_Result.ht = new CJBig2_HuffmanTable(m_pStream);
1656 if (!pSegment->m_Result.ht->isOK()) { 1616 if (!pSegment->m_Result.ht->isOK()) {
1657 delete pSegment->m_Result.ht; 1617 delete pSegment->m_Result.ht;
1658 pSegment->m_Result.ht = NULL; 1618 pSegment->m_Result.ht = NULL;
1659 return JBIG2_ERROR_FATAL; 1619 return JBIG2_ERROR_FATAL;
1660 } 1620 }
1661 m_pStream->alignByte(); 1621 m_pStream->alignByte();
1662 return JBIG2_SUCCESS; 1622 return JBIG2_SUCCESS;
1663 } 1623 }
1664 int32_t CJBig2_Context::parseRegionInfo(JBig2RegionInfo* pRI) { 1624 int32_t CJBig2_Context::parseRegionInfo(JBig2RegionInfo* pRI) {
1665 if ((m_pStream->readInteger((FX_DWORD*)&pRI->width) != 0) || 1625 if ((m_pStream->readInteger((FX_DWORD*)&pRI->width) != 0) ||
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1817 SBSYMCODES[CURTEMP].code = CURCODE; 1777 SBSYMCODES[CURTEMP].code = CURCODE;
1818 CURCODE = CURCODE + 1; 1778 CURCODE = CURCODE + 1;
1819 } 1779 }
1820 CURTEMP = CURTEMP + 1; 1780 CURTEMP = CURTEMP + 1;
1821 } 1781 }
1822 CURLEN = CURLEN + 1; 1782 CURLEN = CURLEN + 1;
1823 } 1783 }
1824 m_pModule->JBig2_Free(LENCOUNT); 1784 m_pModule->JBig2_Free(LENCOUNT);
1825 m_pModule->JBig2_Free(FIRSTCODE); 1785 m_pModule->JBig2_Free(FIRSTCODE);
1826 } 1786 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_Context.h ('k') | core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698