OLD | NEW |
---|---|
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 <list> | 7 #include <list> |
8 #include "JBig2_Context.h" | 8 #include "JBig2_Context.h" |
9 | 9 |
10 // 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 |
11 // 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, |
12 // 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 |
13 // 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 |
14 // list keeps track of the freshness of entries, with freshest ones | 14 // list keeps track of the freshness of entries, with freshest ones |
15 // 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 |
16 // difference for typical JBIG2 documents. | 16 // difference for typical JBIG2 documents. |
17 const int kSymbolDictCacheMaxSize = 2; | 17 const int kSymbolDictCacheMaxSize = 2; |
18 | 18 |
19 CJBig2_Context* CJBig2_Context::CreateContext( | 19 CJBig2_Context* CJBig2_Context::CreateContext( |
20 CJBig2_Module* pModule, | |
21 uint8_t* pGlobalData, | 20 uint8_t* pGlobalData, |
22 FX_DWORD dwGlobalLength, | 21 FX_DWORD dwGlobalLength, |
23 uint8_t* pData, | 22 uint8_t* pData, |
24 FX_DWORD dwLength, | 23 FX_DWORD dwLength, |
25 int32_t nStreamType, | 24 int32_t nStreamType, |
26 std::list<CJBig2_CachePair>* pSymbolDictCache, | 25 std::list<CJBig2_CachePair>* pSymbolDictCache, |
27 IFX_Pause* pPause) { | 26 IFX_Pause* pPause) { |
28 return new (pModule) | 27 return new CJBig2_Context(pGlobalData, dwGlobalLength, pData, dwLength, |
29 CJBig2_Context(pGlobalData, dwGlobalLength, pData, dwLength, nStreamType, | 28 nStreamType, pSymbolDictCache, pPause); |
30 pSymbolDictCache, pPause); | |
31 } | 29 } |
32 void CJBig2_Context::DestroyContext(CJBig2_Context* pContext) { | 30 void CJBig2_Context::DestroyContext(CJBig2_Context* pContext) { |
33 delete pContext; | 31 delete pContext; |
34 } | 32 } |
35 CJBig2_Context::CJBig2_Context(uint8_t* pGlobalData, | 33 CJBig2_Context::CJBig2_Context(uint8_t* pGlobalData, |
36 FX_DWORD dwGlobalLength, | 34 FX_DWORD dwGlobalLength, |
37 uint8_t* pData, | 35 uint8_t* pData, |
38 FX_DWORD dwLength, | 36 FX_DWORD dwLength, |
39 int32_t nStreamType, | 37 int32_t nStreamType, |
40 std::list<CJBig2_CachePair>* pSymbolDictCache, | 38 std::list<CJBig2_CachePair>* pSymbolDictCache, |
41 IFX_Pause* pPause) { | 39 IFX_Pause* pPause) { |
42 if (pGlobalData && (dwGlobalLength > 0)) { | 40 if (pGlobalData && (dwGlobalLength > 0)) { |
43 JBIG2_ALLOC(m_pGlobalContext, | 41 m_pGlobalContext = |
44 CJBig2_Context(NULL, 0, pGlobalData, dwGlobalLength, | 42 new CJBig2_Context(NULL, 0, pGlobalData, dwGlobalLength, |
45 JBIG2_EMBED_STREAM, pSymbolDictCache, pPause)); | 43 JBIG2_EMBED_STREAM, pSymbolDictCache, pPause); |
46 } else { | 44 } else { |
47 m_pGlobalContext = NULL; | 45 m_pGlobalContext = NULL; |
48 } | 46 } |
49 m_pStream = new CJBig2_BitStream(pData, dwLength); | 47 m_pStream = new CJBig2_BitStream(pData, dwLength); |
50 m_nStreamType = nStreamType; | 48 m_nStreamType = nStreamType; |
51 m_nState = JBIG2_OUT_OF_PAGE; | 49 m_nState = JBIG2_OUT_OF_PAGE; |
52 m_pPage = NULL; | 50 m_pPage = NULL; |
53 m_bBufSpecified = FALSE; | 51 m_bBufSpecified = FALSE; |
54 m_pPause = pPause; | 52 m_pPause = pPause; |
55 m_nSegmentDecoded = 0; | 53 m_nSegmentDecoded = 0; |
56 m_PauseStep = 10; | 54 m_PauseStep = 10; |
57 m_pArithDecoder = NULL; | 55 m_pArithDecoder = NULL; |
58 m_pGRD = NULL; | 56 m_pGRD = NULL; |
59 m_gbContext = NULL; | 57 m_gbContext = NULL; |
60 m_dwOffset = 0; | 58 m_dwOffset = 0; |
61 m_ProcessiveStatus = FXCODEC_STATUS_FRAME_READY; | 59 m_ProcessiveStatus = FXCODEC_STATUS_FRAME_READY; |
62 m_pSymbolDictCache = pSymbolDictCache; | 60 m_pSymbolDictCache = pSymbolDictCache; |
63 } | 61 } |
64 CJBig2_Context::~CJBig2_Context() { | 62 CJBig2_Context::~CJBig2_Context() { |
65 delete m_pArithDecoder; | 63 delete m_pArithDecoder; |
66 m_pArithDecoder = NULL; | 64 m_pArithDecoder = NULL; |
67 delete m_pGRD; | 65 delete m_pGRD; |
68 m_pGRD = NULL; | 66 m_pGRD = NULL; |
69 if (m_gbContext) { | 67 FX_Free(m_gbContext); |
70 m_pModule->JBig2_Free(m_gbContext); | |
71 } | |
72 m_gbContext = NULL; | 68 m_gbContext = NULL; |
73 delete m_pGlobalContext; | 69 delete m_pGlobalContext; |
74 m_pGlobalContext = NULL; | 70 m_pGlobalContext = NULL; |
75 if (m_bBufSpecified) { | 71 if (m_bBufSpecified) { |
76 delete m_pPage; | 72 delete m_pPage; |
77 } | 73 } |
78 m_pPage = NULL; | 74 m_pPage = NULL; |
79 delete m_pStream; | 75 delete m_pStream; |
80 m_pStream = NULL; | 76 m_pStream = NULL; |
81 } | 77 } |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
212 if (m_pGlobalContext) { | 208 if (m_pGlobalContext) { |
213 nRet = m_pGlobalContext->decode_EmbedOrgnazation(pPause); | 209 nRet = m_pGlobalContext->decode_EmbedOrgnazation(pPause); |
214 if (nRet != JBIG2_SUCCESS) { | 210 if (nRet != JBIG2_SUCCESS) { |
215 m_ProcessiveStatus = FXCODEC_STATUS_ERROR; | 211 m_ProcessiveStatus = FXCODEC_STATUS_ERROR; |
216 return nRet; | 212 return nRet; |
217 } | 213 } |
218 } | 214 } |
219 m_bFirstPage = TRUE; | 215 m_bFirstPage = TRUE; |
220 m_PauseStep = 0; | 216 m_PauseStep = 0; |
221 delete m_pPage; | 217 delete m_pPage; |
222 JBIG2_ALLOC(m_pPage, CJBig2_Image(width, height, stride, pBuf)); | 218 m_pPage = new CJBig2_Image(width, height, stride, pBuf); |
223 m_bBufSpecified = TRUE; | 219 m_bBufSpecified = TRUE; |
224 if (m_pPage && pPause && pPause->NeedToPauseNow()) { | 220 if (m_pPage && pPause && pPause->NeedToPauseNow()) { |
225 m_PauseStep = 1; | 221 m_PauseStep = 1; |
226 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; | 222 m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; |
227 return nRet; | 223 return nRet; |
228 } | 224 } |
229 int ret = Continue(pPause); | 225 int ret = Continue(pPause); |
230 return ret; | 226 return ret; |
231 } | 227 } |
232 int32_t CJBig2_Context::Continue(IFX_Pause* pPause) { | 228 int32_t CJBig2_Context::Continue(IFX_Pause* pPause) { |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
352 if (m_pStream->read1Byte(&cTemp) != 0) { | 348 if (m_pStream->read1Byte(&cTemp) != 0) { |
353 goto failed; | 349 goto failed; |
354 } | 350 } |
355 pSegment->m_nReferred_to_segment_count = cTemp >> 5; | 351 pSegment->m_nReferred_to_segment_count = cTemp >> 5; |
356 dwTemp = 5 + 1; | 352 dwTemp = 5 + 1; |
357 } | 353 } |
358 cSSize = | 354 cSSize = |
359 pSegment->m_dwNumber > 65536 ? 4 : pSegment->m_dwNumber > 256 ? 2 : 1; | 355 pSegment->m_dwNumber > 65536 ? 4 : pSegment->m_dwNumber > 256 ? 2 : 1; |
360 cPSize = pSegment->m_cFlags.s.page_association_size ? 4 : 1; | 356 cPSize = pSegment->m_cFlags.s.page_association_size ? 4 : 1; |
361 if (pSegment->m_nReferred_to_segment_count) { | 357 if (pSegment->m_nReferred_to_segment_count) { |
362 pSegment->m_pReferred_to_segment_numbers = | 358 pSegment->m_pReferred_to_segment_numbers = (FX_DWORD*)FX_Alloc2D( |
Tom Sepez
2015/09/04 01:26:47
Hmm. I think we can use a lower "D" allocator and
Lei Zhang
2015/09/04 21:34:59
Sure. This was all straight up JBig2_Malloc2 -> FX
| |
363 (FX_DWORD*)m_pModule->JBig2_Malloc2( | 359 uint8_t, sizeof(FX_DWORD), pSegment->m_nReferred_to_segment_count); |
364 sizeof(FX_DWORD), pSegment->m_nReferred_to_segment_count); | |
365 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 360 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
366 switch (cSSize) { | 361 switch (cSSize) { |
367 case 1: | 362 case 1: |
368 if (m_pStream->read1Byte(&cTemp) != 0) { | 363 if (m_pStream->read1Byte(&cTemp) != 0) { |
369 goto failed; | 364 goto failed; |
370 } | 365 } |
371 pSegment->m_pReferred_to_segment_numbers[i] = cTemp; | 366 pSegment->m_pReferred_to_segment_numbers[i] = cTemp; |
372 break; | 367 break; |
373 case 2: | 368 case 2: |
374 if (m_pStream->readShortInteger(&wTemp) != 0) { | 369 if (m_pStream->readShortInteger(&wTemp) != 0) { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
468 } | 463 } |
469 pPageInfo->m_bIsStriped = ((wTemp >> 15) & 1) ? 1 : 0; | 464 pPageInfo->m_bIsStriped = ((wTemp >> 15) & 1) ? 1 : 0; |
470 pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff; | 465 pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff; |
471 if ((pPageInfo->m_dwHeight == 0xffffffff) && | 466 if ((pPageInfo->m_dwHeight == 0xffffffff) && |
472 (pPageInfo->m_bIsStriped != TRUE)) { | 467 (pPageInfo->m_bIsStriped != TRUE)) { |
473 pPageInfo->m_bIsStriped = TRUE; | 468 pPageInfo->m_bIsStriped = TRUE; |
474 } | 469 } |
475 if (!m_bBufSpecified) { | 470 if (!m_bBufSpecified) { |
476 delete m_pPage; | 471 delete m_pPage; |
477 if (pPageInfo->m_dwHeight == 0xffffffff) { | 472 if (pPageInfo->m_dwHeight == 0xffffffff) { |
478 JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth, | 473 m_pPage = new CJBig2_Image(pPageInfo->m_dwWidth, |
479 pPageInfo->m_wMaxStripeSize)); | 474 pPageInfo->m_wMaxStripeSize); |
480 } else { | 475 } else { |
481 JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth, | 476 m_pPage = |
482 pPageInfo->m_dwHeight)); | 477 new CJBig2_Image(pPageInfo->m_dwWidth, pPageInfo->m_dwHeight); |
483 } | 478 } |
484 } | 479 } |
485 m_pPage->fill((pPageInfo->m_cFlags & 4) ? 1 : 0); | 480 m_pPage->fill((pPageInfo->m_cFlags & 4) ? 1 : 0); |
486 m_PageInfoList.push_back(pPageInfo.release()); | 481 m_PageInfoList.push_back(pPageInfo.release()); |
487 m_nState = JBIG2_IN_PAGE; | 482 m_nState = JBIG2_IN_PAGE; |
488 } break; | 483 } break; |
489 case 49: | 484 case 49: |
490 m_nState = JBIG2_OUT_OF_PAGE; | 485 m_nState = JBIG2_OUT_OF_PAGE; |
491 return JBIG2_END_OF_PAGE; | 486 return JBIG2_END_OF_PAGE; |
492 break; | 487 break; |
(...skipping 23 matching lines...) Expand all Loading... | |
516 IFX_Pause* pPause) { | 511 IFX_Pause* pPause) { |
517 FX_DWORD dwTemp; | 512 FX_DWORD dwTemp; |
518 FX_WORD wFlags; | 513 FX_WORD wFlags; |
519 uint8_t cSDHUFFDH, cSDHUFFDW, cSDHUFFBMSIZE, cSDHUFFAGGINST; | 514 uint8_t cSDHUFFDH, cSDHUFFDW, cSDHUFFBMSIZE, cSDHUFFAGGINST; |
520 CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B2 = NULL, *Table_B3 = NULL, | 515 CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B2 = NULL, *Table_B3 = NULL, |
521 *Table_B4 = NULL, *Table_B5 = NULL; | 516 *Table_B4 = NULL, *Table_B5 = NULL; |
522 int32_t i, nIndex, nRet; | 517 int32_t i, nIndex, nRet; |
523 CJBig2_Segment *pSeg = NULL, *pLRSeg = NULL; | 518 CJBig2_Segment *pSeg = NULL, *pLRSeg = NULL; |
524 FX_BOOL bUsed; | 519 FX_BOOL bUsed; |
525 CJBig2_Image** SDINSYMS = NULL; | 520 CJBig2_Image** SDINSYMS = NULL; |
526 CJBig2_SDDProc* pSymbolDictDecoder; | |
527 JBig2ArithCtx *gbContext = NULL, *grContext = NULL; | 521 JBig2ArithCtx *gbContext = NULL, *grContext = NULL; |
528 CJBig2_ArithDecoder* pArithDecoder; | 522 CJBig2_ArithDecoder* pArithDecoder; |
529 JBIG2_ALLOC(pSymbolDictDecoder, CJBig2_SDDProc()); | 523 CJBig2_SDDProc* pSymbolDictDecoder = new CJBig2_SDDProc(); |
530 uint8_t* key = pSegment->m_pData; | 524 uint8_t* key = pSegment->m_pData; |
531 FX_BOOL cache_hit = false; | 525 FX_BOOL cache_hit = false; |
532 if (m_pStream->readShortInteger(&wFlags) != 0) { | 526 if (m_pStream->readShortInteger(&wFlags) != 0) { |
533 nRet = JBIG2_ERROR_TOO_SHORT; | 527 nRet = JBIG2_ERROR_TOO_SHORT; |
534 goto failed; | 528 goto failed; |
535 } | 529 } |
536 pSymbolDictDecoder->SDHUFF = wFlags & 0x0001; | 530 pSymbolDictDecoder->SDHUFF = wFlags & 0x0001; |
537 pSymbolDictDecoder->SDREFAGG = (wFlags >> 1) & 0x0001; | 531 pSymbolDictDecoder->SDREFAGG = (wFlags >> 1) & 0x0001; |
538 pSymbolDictDecoder->SDTEMPLATE = (wFlags >> 10) & 0x0003; | 532 pSymbolDictDecoder->SDTEMPLATE = (wFlags >> 10) & 0x0003; |
539 pSymbolDictDecoder->SDRTEMPLATE = (wFlags >> 12) & 0x0003; | 533 pSymbolDictDecoder->SDRTEMPLATE = (wFlags >> 12) & 0x0003; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
583 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 577 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
584 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); | 578 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); |
585 if (pSeg->m_cFlags.s.type == 0) { | 579 if (pSeg->m_cFlags.s.type == 0) { |
586 pSymbolDictDecoder->SDNUMINSYMS += pSeg->m_Result.sd->SDNUMEXSYMS; | 580 pSymbolDictDecoder->SDNUMINSYMS += pSeg->m_Result.sd->SDNUMEXSYMS; |
587 pLRSeg = pSeg; | 581 pLRSeg = pSeg; |
588 } | 582 } |
589 } | 583 } |
590 if (pSymbolDictDecoder->SDNUMINSYMS == 0) { | 584 if (pSymbolDictDecoder->SDNUMINSYMS == 0) { |
591 SDINSYMS = NULL; | 585 SDINSYMS = NULL; |
592 } else { | 586 } else { |
593 SDINSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2( | 587 SDINSYMS = (CJBig2_Image**)FX_Alloc2D(uint8_t, sizeof(CJBig2_Image*), |
594 sizeof(CJBig2_Image*), pSymbolDictDecoder->SDNUMINSYMS); | 588 pSymbolDictDecoder->SDNUMINSYMS); |
595 dwTemp = 0; | 589 dwTemp = 0; |
596 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 590 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
597 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); | 591 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); |
598 if (pSeg->m_cFlags.s.type == 0) { | 592 if (pSeg->m_cFlags.s.type == 0) { |
599 JBIG2_memcpy(SDINSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS, | 593 JBIG2_memcpy(SDINSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS, |
600 pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Image*)); | 594 pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Image*)); |
601 dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS; | 595 dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS; |
602 } | 596 } |
603 } | 597 } |
604 } | 598 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
674 } | 668 } |
675 pSymbolDictDecoder->SDHUFFAGGINST = pSeg->m_Result.ht; | 669 pSymbolDictDecoder->SDHUFFAGGINST = pSeg->m_Result.ht; |
676 } | 670 } |
677 } | 671 } |
678 } | 672 } |
679 if ((wFlags & 0x0100) && pLRSeg && pLRSeg->m_Result.sd->m_bContextRetained) { | 673 if ((wFlags & 0x0100) && pLRSeg && pLRSeg->m_Result.sd->m_bContextRetained) { |
680 if (pSymbolDictDecoder->SDHUFF == 0) { | 674 if (pSymbolDictDecoder->SDHUFF == 0) { |
681 dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0 | 675 dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0 |
682 ? 65536 | 676 ? 65536 |
683 : pSymbolDictDecoder->SDTEMPLATE == 1 ? 8192 : 1024; | 677 : pSymbolDictDecoder->SDTEMPLATE == 1 ? 8192 : 1024; |
684 gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2( | 678 gbContext = |
685 sizeof(JBig2ArithCtx), dwTemp); | 679 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
686 JBIG2_memcpy(gbContext, pLRSeg->m_Result.sd->m_gbContext, | 680 JBIG2_memcpy(gbContext, pLRSeg->m_Result.sd->m_gbContext, |
687 sizeof(JBig2ArithCtx) * dwTemp); | 681 sizeof(JBig2ArithCtx) * dwTemp); |
688 } | 682 } |
689 if (pSymbolDictDecoder->SDREFAGG == 1) { | 683 if (pSymbolDictDecoder->SDREFAGG == 1) { |
690 dwTemp = pSymbolDictDecoder->SDRTEMPLATE ? 1 << 10 : 1 << 13; | 684 dwTemp = pSymbolDictDecoder->SDRTEMPLATE ? 1 << 10 : 1 << 13; |
691 grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2( | 685 grContext = |
692 sizeof(JBig2ArithCtx), dwTemp); | 686 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
693 JBIG2_memcpy(grContext, pLRSeg->m_Result.sd->m_grContext, | 687 JBIG2_memcpy(grContext, pLRSeg->m_Result.sd->m_grContext, |
694 sizeof(JBig2ArithCtx) * dwTemp); | 688 sizeof(JBig2ArithCtx) * dwTemp); |
695 } | 689 } |
696 } else { | 690 } else { |
697 if (pSymbolDictDecoder->SDHUFF == 0) { | 691 if (pSymbolDictDecoder->SDHUFF == 0) { |
698 dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0 | 692 dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0 |
699 ? 65536 | 693 ? 65536 |
700 : pSymbolDictDecoder->SDTEMPLATE == 1 ? 8192 : 1024; | 694 : pSymbolDictDecoder->SDTEMPLATE == 1 ? 8192 : 1024; |
701 gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2( | 695 gbContext = |
702 sizeof(JBig2ArithCtx), dwTemp); | 696 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
703 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); | 697 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); |
704 } | 698 } |
705 if (pSymbolDictDecoder->SDREFAGG == 1) { | 699 if (pSymbolDictDecoder->SDREFAGG == 1) { |
706 dwTemp = pSymbolDictDecoder->SDRTEMPLATE ? 1 << 10 : 1 << 13; | 700 dwTemp = pSymbolDictDecoder->SDRTEMPLATE ? 1 << 10 : 1 << 13; |
707 grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2( | 701 grContext = |
708 sizeof(JBig2ArithCtx), dwTemp); | 702 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
709 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp); | 703 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp); |
710 } | 704 } |
711 } | 705 } |
712 pSegment->m_nResultType = JBIG2_SYMBOL_DICT_POINTER; | 706 pSegment->m_nResultType = JBIG2_SYMBOL_DICT_POINTER; |
713 for (std::list<CJBig2_CachePair>::iterator it = m_pSymbolDictCache->begin(); | 707 for (std::list<CJBig2_CachePair>::iterator it = m_pSymbolDictCache->begin(); |
714 it != m_pSymbolDictCache->end(); ++it) { | 708 it != m_pSymbolDictCache->end(); ++it) { |
715 if (it->first == key) { | 709 if (it->first == key) { |
716 pSegment->m_Result.sd = it->second->DeepCopy(); | 710 pSegment->m_Result.sd = it->second->DeepCopy(); |
717 m_pSymbolDictCache->push_front(*it); | 711 m_pSymbolDictCache->push_front(*it); |
718 m_pSymbolDictCache->erase(it); | 712 m_pSymbolDictCache->erase(it); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
756 pSegment->m_Result.sd->m_gbContext = gbContext; | 750 pSegment->m_Result.sd->m_gbContext = gbContext; |
757 } | 751 } |
758 if (pSymbolDictDecoder->SDREFAGG == 1) { | 752 if (pSymbolDictDecoder->SDREFAGG == 1) { |
759 pSegment->m_Result.sd->m_grContext = grContext; | 753 pSegment->m_Result.sd->m_grContext = grContext; |
760 } | 754 } |
761 bUsed = TRUE; | 755 bUsed = TRUE; |
762 } else { | 756 } else { |
763 bUsed = FALSE; | 757 bUsed = FALSE; |
764 } | 758 } |
765 delete pSymbolDictDecoder; | 759 delete pSymbolDictDecoder; |
766 if (SDINSYMS) { | 760 FX_Free(SDINSYMS); |
767 m_pModule->JBig2_Free(SDINSYMS); | |
768 } | |
769 delete Table_B1; | 761 delete Table_B1; |
770 delete Table_B2; | 762 delete Table_B2; |
771 delete Table_B3; | 763 delete Table_B3; |
772 delete Table_B4; | 764 delete Table_B4; |
773 delete Table_B5; | 765 delete Table_B5; |
774 if (bUsed == FALSE) { | 766 if (bUsed == FALSE) { |
775 if (gbContext) { | 767 FX_Free(gbContext); |
776 m_pModule->JBig2_Free(gbContext); | 768 FX_Free(grContext); |
777 } | |
778 if (grContext) { | |
779 m_pModule->JBig2_Free(grContext); | |
780 } | |
781 } | 769 } |
782 return JBIG2_SUCCESS; | 770 return JBIG2_SUCCESS; |
783 failed: | 771 failed: |
784 delete pSymbolDictDecoder; | 772 delete pSymbolDictDecoder; |
785 if (SDINSYMS) { | 773 FX_Free(SDINSYMS); |
786 m_pModule->JBig2_Free(SDINSYMS); | |
787 } | |
788 delete Table_B1; | 774 delete Table_B1; |
789 delete Table_B2; | 775 delete Table_B2; |
790 delete Table_B3; | 776 delete Table_B3; |
791 delete Table_B4; | 777 delete Table_B4; |
792 delete Table_B5; | 778 delete Table_B5; |
793 if (gbContext) { | 779 FX_Free(gbContext); |
794 m_pModule->JBig2_Free(gbContext); | 780 FX_Free(grContext); |
795 } | |
796 if (grContext) { | |
797 m_pModule->JBig2_Free(grContext); | |
798 } | |
799 return nRet; | 781 return nRet; |
800 } | 782 } |
801 | 783 |
802 int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) { | 784 int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) { |
803 FX_DWORD dwTemp; | 785 FX_DWORD dwTemp; |
804 FX_WORD wFlags; | 786 FX_WORD wFlags; |
805 int32_t i, nIndex, nRet; | 787 int32_t i, nIndex, nRet; |
806 JBig2RegionInfo ri; | 788 JBig2RegionInfo ri; |
807 CJBig2_Segment* pSeg; | 789 CJBig2_Segment* pSeg; |
808 CJBig2_Image** SBSYMS = NULL; | 790 CJBig2_Image** SBSYMS = NULL; |
809 JBig2HuffmanCode* SBSYMCODES = NULL; | 791 JBig2HuffmanCode* SBSYMCODES = NULL; |
810 uint8_t cSBHUFFFS, cSBHUFFDS, cSBHUFFDT, cSBHUFFRDW, cSBHUFFRDH, cSBHUFFRDX, | 792 uint8_t cSBHUFFFS, cSBHUFFDS, cSBHUFFDT, cSBHUFFRDW, cSBHUFFRDH, cSBHUFFRDX, |
811 cSBHUFFRDY, cSBHUFFRSIZE; | 793 cSBHUFFRDY, cSBHUFFRSIZE; |
812 CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B6 = NULL, *Table_B7 = NULL, | 794 CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B6 = NULL, *Table_B7 = NULL, |
813 *Table_B8 = NULL, *Table_B9 = NULL, *Table_B10 = NULL, | 795 *Table_B8 = NULL, *Table_B9 = NULL, *Table_B10 = NULL, |
814 *Table_B11 = NULL, *Table_B12 = NULL, *Table_B13 = NULL, | 796 *Table_B11 = NULL, *Table_B12 = NULL, *Table_B13 = NULL, |
815 *Table_B14 = NULL, *Table_B15 = NULL; | 797 *Table_B14 = NULL, *Table_B15 = NULL; |
816 JBig2ArithCtx* grContext = NULL; | 798 JBig2ArithCtx* grContext = NULL; |
817 CJBig2_ArithDecoder* pArithDecoder; | 799 CJBig2_ArithDecoder* pArithDecoder; |
818 CJBig2_TRDProc* pTRD; | 800 CJBig2_TRDProc* pTRD = new CJBig2_TRDProc(); |
819 JBIG2_ALLOC(pTRD, CJBig2_TRDProc()); | |
820 if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) || | 801 if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) || |
821 (m_pStream->readShortInteger(&wFlags) != 0)) { | 802 (m_pStream->readShortInteger(&wFlags) != 0)) { |
822 nRet = JBIG2_ERROR_TOO_SHORT; | 803 nRet = JBIG2_ERROR_TOO_SHORT; |
823 goto failed; | 804 goto failed; |
824 } | 805 } |
825 pTRD->SBW = ri.width; | 806 pTRD->SBW = ri.width; |
826 pTRD->SBH = ri.height; | 807 pTRD->SBH = ri.height; |
827 pTRD->SBHUFF = wFlags & 0x0001; | 808 pTRD->SBHUFF = wFlags & 0x0001; |
828 pTRD->SBREFINE = (wFlags >> 1) & 0x0001; | 809 pTRD->SBREFINE = (wFlags >> 1) & 0x0001; |
829 dwTemp = (wFlags >> 2) & 0x0003; | 810 dwTemp = (wFlags >> 2) & 0x0003; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
870 } | 851 } |
871 } | 852 } |
872 pTRD->SBNUMSYMS = 0; | 853 pTRD->SBNUMSYMS = 0; |
873 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 854 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
874 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); | 855 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); |
875 if (pSeg->m_cFlags.s.type == 0) { | 856 if (pSeg->m_cFlags.s.type == 0) { |
876 pTRD->SBNUMSYMS += pSeg->m_Result.sd->SDNUMEXSYMS; | 857 pTRD->SBNUMSYMS += pSeg->m_Result.sd->SDNUMEXSYMS; |
877 } | 858 } |
878 } | 859 } |
879 if (pTRD->SBNUMSYMS > 0) { | 860 if (pTRD->SBNUMSYMS > 0) { |
880 SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), | 861 SBSYMS = (CJBig2_Image**)FX_Alloc2D(uint8_t, sizeof(CJBig2_Image*), |
881 pTRD->SBNUMSYMS); | 862 pTRD->SBNUMSYMS); |
882 dwTemp = 0; | 863 dwTemp = 0; |
883 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 864 for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
884 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); | 865 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); |
885 if (pSeg->m_cFlags.s.type == 0) { | 866 if (pSeg->m_cFlags.s.type == 0) { |
886 JBIG2_memcpy(SBSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS, | 867 JBIG2_memcpy(SBSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS, |
887 pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Image*)); | 868 pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Image*)); |
888 dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS; | 869 dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS; |
889 } | 870 } |
890 } | 871 } |
891 pTRD->SBSYMS = SBSYMS; | 872 pTRD->SBSYMS = SBSYMS; |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1072 if (!pSeg) { | 1053 if (!pSeg) { |
1073 nRet = JBIG2_ERROR_FATAL; | 1054 nRet = JBIG2_ERROR_FATAL; |
1074 goto failed; | 1055 goto failed; |
1075 } | 1056 } |
1076 pTRD->SBHUFFRSIZE = pSeg->m_Result.ht; | 1057 pTRD->SBHUFFRSIZE = pSeg->m_Result.ht; |
1077 } | 1058 } |
1078 } | 1059 } |
1079 if (pTRD->SBREFINE == 1) { | 1060 if (pTRD->SBREFINE == 1) { |
1080 dwTemp = pTRD->SBRTEMPLATE ? 1 << 10 : 1 << 13; | 1061 dwTemp = pTRD->SBRTEMPLATE ? 1 << 10 : 1 << 13; |
1081 grContext = | 1062 grContext = |
1082 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp); | 1063 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
1083 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp); | 1064 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp); |
1084 } | 1065 } |
1085 if (pTRD->SBHUFF == 0) { | 1066 if (pTRD->SBHUFF == 0) { |
1086 pArithDecoder = new CJBig2_ArithDecoder(m_pStream); | 1067 pArithDecoder = new CJBig2_ArithDecoder(m_pStream); |
1087 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; | 1068 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; |
1088 pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext); | 1069 pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext); |
1089 delete pArithDecoder; | 1070 delete pArithDecoder; |
1090 if (pSegment->m_Result.im == NULL) { | 1071 if (pSegment->m_Result.im == NULL) { |
1091 nRet = JBIG2_ERROR_FATAL; | 1072 nRet = JBIG2_ERROR_FATAL; |
1092 goto failed; | 1073 goto failed; |
(...skipping 16 matching lines...) Expand all Loading... | |
1109 (ri.y + ri.height > m_pPage->m_nHeight)) { | 1090 (ri.y + ri.height > m_pPage->m_nHeight)) { |
1110 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0); | 1091 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0); |
1111 } | 1092 } |
1112 } | 1093 } |
1113 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, | 1094 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, |
1114 (JBig2ComposeOp)(ri.flags & 0x03)); | 1095 (JBig2ComposeOp)(ri.flags & 0x03)); |
1115 delete pSegment->m_Result.im; | 1096 delete pSegment->m_Result.im; |
1116 pSegment->m_Result.im = NULL; | 1097 pSegment->m_Result.im = NULL; |
1117 } | 1098 } |
1118 delete pTRD; | 1099 delete pTRD; |
1119 if (SBSYMS) { | 1100 FX_Free(SBSYMS); |
1120 m_pModule->JBig2_Free(SBSYMS); | 1101 FX_Free(SBSYMCODES); |
1121 } | 1102 FX_Free(grContext); |
1122 if (SBSYMCODES) { | |
1123 m_pModule->JBig2_Free(SBSYMCODES); | |
1124 } | |
1125 if (grContext) { | |
1126 m_pModule->JBig2_Free(grContext); | |
1127 } | |
1128 delete Table_B1; | 1103 delete Table_B1; |
1129 delete Table_B6; | 1104 delete Table_B6; |
1130 delete Table_B7; | 1105 delete Table_B7; |
1131 delete Table_B8; | 1106 delete Table_B8; |
1132 delete Table_B9; | 1107 delete Table_B9; |
1133 delete Table_B10; | 1108 delete Table_B10; |
1134 delete Table_B11; | 1109 delete Table_B11; |
1135 delete Table_B12; | 1110 delete Table_B12; |
1136 delete Table_B13; | 1111 delete Table_B13; |
1137 delete Table_B14; | 1112 delete Table_B14; |
1138 delete Table_B15; | 1113 delete Table_B15; |
1139 return JBIG2_SUCCESS; | 1114 return JBIG2_SUCCESS; |
1140 failed: | 1115 failed: |
1141 delete pTRD; | 1116 delete pTRD; |
1142 if (SBSYMS) { | 1117 FX_Free(SBSYMS); |
1143 m_pModule->JBig2_Free(SBSYMS); | 1118 FX_Free(SBSYMCODES); |
1144 } | 1119 FX_Free(grContext); |
1145 if (SBSYMCODES) { | |
1146 m_pModule->JBig2_Free(SBSYMCODES); | |
1147 } | |
1148 if (grContext) { | |
1149 m_pModule->JBig2_Free(grContext); | |
1150 } | |
1151 delete Table_B1; | 1120 delete Table_B1; |
1152 delete Table_B6; | 1121 delete Table_B6; |
1153 delete Table_B7; | 1122 delete Table_B7; |
1154 delete Table_B8; | 1123 delete Table_B8; |
1155 delete Table_B9; | 1124 delete Table_B9; |
1156 delete Table_B10; | 1125 delete Table_B10; |
1157 delete Table_B11; | 1126 delete Table_B11; |
1158 delete Table_B12; | 1127 delete Table_B12; |
1159 delete Table_B13; | 1128 delete Table_B13; |
1160 delete Table_B14; | 1129 delete Table_B14; |
1161 delete Table_B15; | 1130 delete Table_B15; |
1162 return nRet; | 1131 return nRet; |
1163 } | 1132 } |
1164 | 1133 |
1165 int32_t CJBig2_Context::parsePatternDict(CJBig2_Segment* pSegment, | 1134 int32_t CJBig2_Context::parsePatternDict(CJBig2_Segment* pSegment, |
1166 IFX_Pause* pPause) { | 1135 IFX_Pause* pPause) { |
1167 FX_DWORD dwTemp; | 1136 FX_DWORD dwTemp; |
1168 uint8_t cFlags; | 1137 uint8_t cFlags; |
1169 JBig2ArithCtx* gbContext; | 1138 JBig2ArithCtx* gbContext; |
1170 CJBig2_ArithDecoder* pArithDecoder; | 1139 CJBig2_ArithDecoder* pArithDecoder; |
1171 CJBig2_PDDProc* pPDD; | |
1172 int32_t nRet; | 1140 int32_t nRet; |
1173 JBIG2_ALLOC(pPDD, CJBig2_PDDProc()); | 1141 CJBig2_PDDProc* pPDD = new CJBig2_PDDProc(); |
1174 if ((m_pStream->read1Byte(&cFlags) != 0) || | 1142 if ((m_pStream->read1Byte(&cFlags) != 0) || |
1175 (m_pStream->read1Byte(&pPDD->HDPW) != 0) || | 1143 (m_pStream->read1Byte(&pPDD->HDPW) != 0) || |
1176 (m_pStream->read1Byte(&pPDD->HDPH) != 0) || | 1144 (m_pStream->read1Byte(&pPDD->HDPH) != 0) || |
1177 (m_pStream->readInteger(&pPDD->GRAYMAX) != 0)) { | 1145 (m_pStream->readInteger(&pPDD->GRAYMAX) != 0)) { |
1178 nRet = JBIG2_ERROR_TOO_SHORT; | 1146 nRet = JBIG2_ERROR_TOO_SHORT; |
1179 goto failed; | 1147 goto failed; |
1180 } | 1148 } |
1181 if (pPDD->GRAYMAX > JBIG2_MAX_PATTERN_INDEX) { | 1149 if (pPDD->GRAYMAX > JBIG2_MAX_PATTERN_INDEX) { |
1182 nRet = JBIG2_ERROR_LIMIT; | 1150 nRet = JBIG2_ERROR_LIMIT; |
1183 goto failed; | 1151 goto failed; |
1184 } | 1152 } |
1185 pPDD->HDMMR = cFlags & 0x01; | 1153 pPDD->HDMMR = cFlags & 0x01; |
1186 pPDD->HDTEMPLATE = (cFlags >> 1) & 0x03; | 1154 pPDD->HDTEMPLATE = (cFlags >> 1) & 0x03; |
1187 pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER; | 1155 pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER; |
1188 if (pPDD->HDMMR == 0) { | 1156 if (pPDD->HDMMR == 0) { |
1189 dwTemp = | 1157 dwTemp = |
1190 pPDD->HDTEMPLATE == 0 ? 65536 : pPDD->HDTEMPLATE == 1 ? 8192 : 1024; | 1158 pPDD->HDTEMPLATE == 0 ? 65536 : pPDD->HDTEMPLATE == 1 ? 8192 : 1024; |
1191 gbContext = | 1159 gbContext = |
1192 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp); | 1160 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
1193 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); | 1161 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); |
1194 pArithDecoder = new CJBig2_ArithDecoder(m_pStream); | 1162 pArithDecoder = new CJBig2_ArithDecoder(m_pStream); |
1195 pSegment->m_Result.pd = | 1163 pSegment->m_Result.pd = |
1196 pPDD->decode_Arith(pArithDecoder, gbContext, pPause); | 1164 pPDD->decode_Arith(pArithDecoder, gbContext, pPause); |
1197 delete pArithDecoder; | 1165 delete pArithDecoder; |
1198 if (pSegment->m_Result.pd == NULL) { | 1166 if (pSegment->m_Result.pd == NULL) { |
1199 m_pModule->JBig2_Free(gbContext); | 1167 FX_Free(gbContext); |
1200 nRet = JBIG2_ERROR_FATAL; | 1168 nRet = JBIG2_ERROR_FATAL; |
1201 goto failed; | 1169 goto failed; |
1202 } | 1170 } |
1203 m_pModule->JBig2_Free(gbContext); | 1171 FX_Free(gbContext); |
1204 m_pStream->alignByte(); | 1172 m_pStream->alignByte(); |
1205 m_pStream->offset(2); | 1173 m_pStream->offset(2); |
1206 } else { | 1174 } else { |
1207 pSegment->m_Result.pd = pPDD->decode_MMR(m_pStream, pPause); | 1175 pSegment->m_Result.pd = pPDD->decode_MMR(m_pStream, pPause); |
1208 if (pSegment->m_Result.pd == NULL) { | 1176 if (pSegment->m_Result.pd == NULL) { |
1209 nRet = JBIG2_ERROR_FATAL; | 1177 nRet = JBIG2_ERROR_FATAL; |
1210 goto failed; | 1178 goto failed; |
1211 } | 1179 } |
1212 m_pStream->alignByte(); | 1180 m_pStream->alignByte(); |
1213 } | 1181 } |
1214 delete pPDD; | 1182 delete pPDD; |
1215 return JBIG2_SUCCESS; | 1183 return JBIG2_SUCCESS; |
1216 failed: | 1184 failed: |
1217 delete pPDD; | 1185 delete pPDD; |
1218 return nRet; | 1186 return nRet; |
1219 } | 1187 } |
1220 int32_t CJBig2_Context::parseHalftoneRegion(CJBig2_Segment* pSegment, | 1188 int32_t CJBig2_Context::parseHalftoneRegion(CJBig2_Segment* pSegment, |
1221 IFX_Pause* pPause) { | 1189 IFX_Pause* pPause) { |
1222 FX_DWORD dwTemp; | 1190 FX_DWORD dwTemp; |
1223 uint8_t cFlags; | 1191 uint8_t cFlags; |
1224 JBig2RegionInfo ri; | 1192 JBig2RegionInfo ri; |
1225 CJBig2_Segment* pSeg; | 1193 CJBig2_Segment* pSeg; |
1226 CJBig2_PatternDict* pPatternDict; | 1194 CJBig2_PatternDict* pPatternDict; |
1227 JBig2ArithCtx* gbContext; | 1195 JBig2ArithCtx* gbContext; |
1228 CJBig2_ArithDecoder* pArithDecoder; | 1196 CJBig2_ArithDecoder* pArithDecoder; |
1229 CJBig2_HTRDProc* pHRD; | |
1230 int32_t nRet; | 1197 int32_t nRet; |
1231 JBIG2_ALLOC(pHRD, CJBig2_HTRDProc()); | 1198 CJBig2_HTRDProc* pHRD = new CJBig2_HTRDProc(); |
1232 if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) || | 1199 if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) || |
1233 (m_pStream->read1Byte(&cFlags) != 0) || | 1200 (m_pStream->read1Byte(&cFlags) != 0) || |
1234 (m_pStream->readInteger(&pHRD->HGW) != 0) || | 1201 (m_pStream->readInteger(&pHRD->HGW) != 0) || |
1235 (m_pStream->readInteger(&pHRD->HGH) != 0) || | 1202 (m_pStream->readInteger(&pHRD->HGH) != 0) || |
1236 (m_pStream->readInteger((FX_DWORD*)&pHRD->HGX) != 0) || | 1203 (m_pStream->readInteger((FX_DWORD*)&pHRD->HGX) != 0) || |
1237 (m_pStream->readInteger((FX_DWORD*)&pHRD->HGY) != 0) || | 1204 (m_pStream->readInteger((FX_DWORD*)&pHRD->HGY) != 0) || |
1238 (m_pStream->readShortInteger(&pHRD->HRX) != 0) || | 1205 (m_pStream->readShortInteger(&pHRD->HRX) != 0) || |
1239 (m_pStream->readShortInteger(&pHRD->HRY) != 0)) { | 1206 (m_pStream->readShortInteger(&pHRD->HRY) != 0)) { |
1240 nRet = JBIG2_ERROR_TOO_SHORT; | 1207 nRet = JBIG2_ERROR_TOO_SHORT; |
1241 goto failed; | 1208 goto failed; |
(...skipping 20 matching lines...) Expand all Loading... | |
1262 goto failed; | 1229 goto failed; |
1263 } | 1230 } |
1264 pHRD->HNUMPATS = pPatternDict->NUMPATS; | 1231 pHRD->HNUMPATS = pPatternDict->NUMPATS; |
1265 pHRD->HPATS = pPatternDict->HDPATS; | 1232 pHRD->HPATS = pPatternDict->HDPATS; |
1266 pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth; | 1233 pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth; |
1267 pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight; | 1234 pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight; |
1268 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; | 1235 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; |
1269 if (pHRD->HMMR == 0) { | 1236 if (pHRD->HMMR == 0) { |
1270 dwTemp = pHRD->HTEMPLATE == 0 ? 65536 : pHRD->HTEMPLATE == 1 ? 8192 : 1024; | 1237 dwTemp = pHRD->HTEMPLATE == 0 ? 65536 : pHRD->HTEMPLATE == 1 ? 8192 : 1024; |
1271 gbContext = | 1238 gbContext = |
1272 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp); | 1239 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
1273 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); | 1240 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); |
1274 pArithDecoder = new CJBig2_ArithDecoder(m_pStream); | 1241 pArithDecoder = new CJBig2_ArithDecoder(m_pStream); |
1275 pSegment->m_Result.im = | 1242 pSegment->m_Result.im = |
1276 pHRD->decode_Arith(pArithDecoder, gbContext, pPause); | 1243 pHRD->decode_Arith(pArithDecoder, gbContext, pPause); |
1277 delete pArithDecoder; | 1244 delete pArithDecoder; |
1278 if (pSegment->m_Result.im == NULL) { | 1245 if (pSegment->m_Result.im == NULL) { |
1279 m_pModule->JBig2_Free(gbContext); | 1246 FX_Free(gbContext); |
1280 nRet = JBIG2_ERROR_FATAL; | 1247 nRet = JBIG2_ERROR_FATAL; |
1281 goto failed; | 1248 goto failed; |
1282 } | 1249 } |
1283 m_pModule->JBig2_Free(gbContext); | 1250 FX_Free(gbContext); |
1284 m_pStream->alignByte(); | 1251 m_pStream->alignByte(); |
1285 m_pStream->offset(2); | 1252 m_pStream->offset(2); |
1286 } else { | 1253 } else { |
1287 pSegment->m_Result.im = pHRD->decode_MMR(m_pStream, pPause); | 1254 pSegment->m_Result.im = pHRD->decode_MMR(m_pStream, pPause); |
1288 if (pSegment->m_Result.im == NULL) { | 1255 if (pSegment->m_Result.im == NULL) { |
1289 nRet = JBIG2_ERROR_FATAL; | 1256 nRet = JBIG2_ERROR_FATAL; |
1290 goto failed; | 1257 goto failed; |
1291 } | 1258 } |
1292 m_pStream->alignByte(); | 1259 m_pStream->alignByte(); |
1293 } | 1260 } |
(...skipping 16 matching lines...) Expand all Loading... | |
1310 delete pHRD; | 1277 delete pHRD; |
1311 return nRet; | 1278 return nRet; |
1312 } | 1279 } |
1313 | 1280 |
1314 int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment* pSegment, | 1281 int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment* pSegment, |
1315 IFX_Pause* pPause) { | 1282 IFX_Pause* pPause) { |
1316 FX_DWORD dwTemp; | 1283 FX_DWORD dwTemp; |
1317 uint8_t cFlags; | 1284 uint8_t cFlags; |
1318 int32_t i, nRet; | 1285 int32_t i, nRet; |
1319 if (m_pGRD == NULL) { | 1286 if (m_pGRD == NULL) { |
1320 JBIG2_ALLOC(m_pGRD, CJBig2_GRDProc()); | 1287 m_pGRD = new CJBig2_GRDProc(); |
1321 if ((parseRegionInfo(&m_ri) != JBIG2_SUCCESS) || | 1288 if ((parseRegionInfo(&m_ri) != JBIG2_SUCCESS) || |
1322 (m_pStream->read1Byte(&cFlags) != 0)) { | 1289 (m_pStream->read1Byte(&cFlags) != 0)) { |
1323 nRet = JBIG2_ERROR_TOO_SHORT; | 1290 nRet = JBIG2_ERROR_TOO_SHORT; |
1324 goto failed; | 1291 goto failed; |
1325 } | 1292 } |
1326 if (m_ri.height < 0 || m_ri.width < 0) { | 1293 if (m_ri.height < 0 || m_ri.width < 0) { |
1327 nRet = JBIG2_FAILED; | 1294 nRet = JBIG2_FAILED; |
1328 goto failed; | 1295 goto failed; |
1329 } | 1296 } |
1330 m_pGRD->GBW = m_ri.width; | 1297 m_pGRD->GBW = m_ri.width; |
(...skipping 18 matching lines...) Expand all Loading... | |
1349 } | 1316 } |
1350 } | 1317 } |
1351 } | 1318 } |
1352 m_pGRD->USESKIP = 0; | 1319 m_pGRD->USESKIP = 0; |
1353 } | 1320 } |
1354 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; | 1321 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; |
1355 if (m_pGRD->MMR == 0) { | 1322 if (m_pGRD->MMR == 0) { |
1356 dwTemp = | 1323 dwTemp = |
1357 m_pGRD->GBTEMPLATE == 0 ? 65536 : m_pGRD->GBTEMPLATE == 1 ? 8192 : 1024; | 1324 m_pGRD->GBTEMPLATE == 0 ? 65536 : m_pGRD->GBTEMPLATE == 1 ? 8192 : 1024; |
1358 if (m_gbContext == NULL) { | 1325 if (m_gbContext == NULL) { |
1359 m_gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc( | 1326 m_gbContext = |
1360 sizeof(JBig2ArithCtx) * dwTemp); | 1327 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
1361 JBIG2_memset(m_gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); | 1328 JBIG2_memset(m_gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp); |
1362 } | 1329 } |
1363 if (m_pArithDecoder == NULL) { | 1330 if (m_pArithDecoder == NULL) { |
1364 m_pArithDecoder = new CJBig2_ArithDecoder(m_pStream); | 1331 m_pArithDecoder = new CJBig2_ArithDecoder(m_pStream); |
1365 m_ProcessiveStatus = m_pGRD->Start_decode_Arith( | 1332 m_ProcessiveStatus = m_pGRD->Start_decode_Arith( |
1366 &pSegment->m_Result.im, m_pArithDecoder, m_gbContext, pPause); | 1333 &pSegment->m_Result.im, m_pArithDecoder, m_gbContext, pPause); |
1367 } else { | 1334 } else { |
1368 m_ProcessiveStatus = m_pGRD->Continue_decode(pPause); | 1335 m_ProcessiveStatus = m_pGRD->Continue_decode(pPause); |
1369 } | 1336 } |
1370 if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) { | 1337 if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
1371 if (pSegment->m_cFlags.s.type != 36) { | 1338 if (pSegment->m_cFlags.s.type != 36) { |
1372 if (!m_bBufSpecified) { | 1339 if (!m_bBufSpecified) { |
1373 JBig2PageInfo* pPageInfo = m_PageInfoList.back(); | 1340 JBig2PageInfo* pPageInfo = m_PageInfoList.back(); |
1374 if ((pPageInfo->m_bIsStriped == 1) && | 1341 if ((pPageInfo->m_bIsStriped == 1) && |
1375 (m_ri.y + m_ri.height > m_pPage->m_nHeight)) { | 1342 (m_ri.y + m_ri.height > m_pPage->m_nHeight)) { |
1376 m_pPage->expand(m_ri.y + m_ri.height, | 1343 m_pPage->expand(m_ri.y + m_ri.height, |
1377 (pPageInfo->m_cFlags & 4) ? 1 : 0); | 1344 (pPageInfo->m_cFlags & 4) ? 1 : 0); |
1378 } | 1345 } |
1379 } | 1346 } |
1380 FX_RECT Rect = m_pGRD->GetReplaceRect(); | 1347 FX_RECT Rect = m_pGRD->GetReplaceRect(); |
1381 m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top, | 1348 m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top, |
1382 pSegment->m_Result.im, | 1349 pSegment->m_Result.im, |
1383 (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect); | 1350 (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect); |
1384 } | 1351 } |
1385 return JBIG2_SUCCESS; | 1352 return JBIG2_SUCCESS; |
1386 } else { | 1353 } else { |
1387 delete m_pArithDecoder; | 1354 delete m_pArithDecoder; |
1388 m_pArithDecoder = NULL; | 1355 m_pArithDecoder = NULL; |
1389 if (pSegment->m_Result.im == NULL) { | 1356 if (pSegment->m_Result.im == NULL) { |
1390 m_pModule->JBig2_Free(m_gbContext); | 1357 FX_Free(m_gbContext); |
1391 nRet = JBIG2_ERROR_FATAL; | 1358 nRet = JBIG2_ERROR_FATAL; |
1392 m_gbContext = NULL; | 1359 m_gbContext = NULL; |
1393 m_ProcessiveStatus = FXCODEC_STATUS_ERROR; | 1360 m_ProcessiveStatus = FXCODEC_STATUS_ERROR; |
1394 goto failed; | 1361 goto failed; |
1395 } | 1362 } |
1396 m_pModule->JBig2_Free(m_gbContext); | 1363 FX_Free(m_gbContext); |
1397 m_gbContext = NULL; | 1364 m_gbContext = NULL; |
1398 m_pStream->alignByte(); | 1365 m_pStream->alignByte(); |
1399 m_pStream->offset(2); | 1366 m_pStream->offset(2); |
1400 } | 1367 } |
1401 } else { | 1368 } else { |
1402 FXCODEC_STATUS status = | 1369 FXCODEC_STATUS status = |
1403 m_pGRD->Start_decode_MMR(&pSegment->m_Result.im, m_pStream, pPause); | 1370 m_pGRD->Start_decode_MMR(&pSegment->m_Result.im, m_pStream, pPause); |
1404 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { | 1371 while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
1405 m_pGRD->Continue_decode(pPause); | 1372 m_pGRD->Continue_decode(pPause); |
1406 } | 1373 } |
(...skipping 28 matching lines...) Expand all Loading... | |
1435 return nRet; | 1402 return nRet; |
1436 } | 1403 } |
1437 | 1404 |
1438 int32_t CJBig2_Context::parseGenericRefinementRegion(CJBig2_Segment* pSegment) { | 1405 int32_t CJBig2_Context::parseGenericRefinementRegion(CJBig2_Segment* pSegment) { |
1439 FX_DWORD dwTemp; | 1406 FX_DWORD dwTemp; |
1440 JBig2RegionInfo ri; | 1407 JBig2RegionInfo ri; |
1441 CJBig2_Segment* pSeg; | 1408 CJBig2_Segment* pSeg; |
1442 int32_t i, nRet; | 1409 int32_t i, nRet; |
1443 uint8_t cFlags; | 1410 uint8_t cFlags; |
1444 JBig2ArithCtx* grContext; | 1411 JBig2ArithCtx* grContext; |
1445 CJBig2_GRRDProc* pGRRD; | |
1446 CJBig2_ArithDecoder* pArithDecoder; | 1412 CJBig2_ArithDecoder* pArithDecoder; |
1447 JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc()); | 1413 CJBig2_GRRDProc* pGRRD = new CJBig2_GRRDProc(); |
1448 if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) || | 1414 if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) || |
1449 (m_pStream->read1Byte(&cFlags) != 0)) { | 1415 (m_pStream->read1Byte(&cFlags) != 0)) { |
1450 nRet = JBIG2_ERROR_TOO_SHORT; | 1416 nRet = JBIG2_ERROR_TOO_SHORT; |
1451 goto failed; | 1417 goto failed; |
1452 } | 1418 } |
1453 pGRRD->GRW = ri.width; | 1419 pGRRD->GRW = ri.width; |
1454 pGRRD->GRH = ri.height; | 1420 pGRRD->GRH = ri.height; |
1455 pGRRD->GRTEMPLATE = cFlags & 0x01; | 1421 pGRRD->GRTEMPLATE = cFlags & 0x01; |
1456 pGRRD->TPGRON = (cFlags >> 1) & 0x01; | 1422 pGRRD->TPGRON = (cFlags >> 1) & 0x01; |
1457 if (pGRRD->GRTEMPLATE == 0) { | 1423 if (pGRRD->GRTEMPLATE == 0) { |
(...skipping 22 matching lines...) Expand all Loading... | |
1480 goto failed; | 1446 goto failed; |
1481 } | 1447 } |
1482 pGRRD->GRREFERENCE = pSeg->m_Result.im; | 1448 pGRRD->GRREFERENCE = pSeg->m_Result.im; |
1483 } else { | 1449 } else { |
1484 pGRRD->GRREFERENCE = m_pPage; | 1450 pGRRD->GRREFERENCE = m_pPage; |
1485 } | 1451 } |
1486 pGRRD->GRREFERENCEDX = 0; | 1452 pGRRD->GRREFERENCEDX = 0; |
1487 pGRRD->GRREFERENCEDY = 0; | 1453 pGRRD->GRREFERENCEDY = 0; |
1488 dwTemp = pGRRD->GRTEMPLATE ? 1 << 10 : 1 << 13; | 1454 dwTemp = pGRRD->GRTEMPLATE ? 1 << 10 : 1 << 13; |
1489 grContext = | 1455 grContext = |
1490 (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp); | 1456 (JBig2ArithCtx*)FX_Alloc2D(uint8_t, sizeof(JBig2ArithCtx), dwTemp); |
1491 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp); | 1457 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp); |
1492 pArithDecoder = new CJBig2_ArithDecoder(m_pStream); | 1458 pArithDecoder = new CJBig2_ArithDecoder(m_pStream); |
1493 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; | 1459 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; |
1494 pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext); | 1460 pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext); |
1495 delete pArithDecoder; | 1461 delete pArithDecoder; |
1496 if (pSegment->m_Result.im == NULL) { | 1462 if (pSegment->m_Result.im == NULL) { |
1497 m_pModule->JBig2_Free(grContext); | 1463 FX_Free(grContext); |
1498 nRet = JBIG2_ERROR_FATAL; | 1464 nRet = JBIG2_ERROR_FATAL; |
1499 goto failed; | 1465 goto failed; |
1500 } | 1466 } |
1501 m_pModule->JBig2_Free(grContext); | 1467 FX_Free(grContext); |
1502 m_pStream->alignByte(); | 1468 m_pStream->alignByte(); |
1503 m_pStream->offset(2); | 1469 m_pStream->offset(2); |
1504 if (pSegment->m_cFlags.s.type != 40) { | 1470 if (pSegment->m_cFlags.s.type != 40) { |
1505 if (!m_bBufSpecified) { | 1471 if (!m_bBufSpecified) { |
1506 JBig2PageInfo* pPageInfo = m_PageInfoList.back(); | 1472 JBig2PageInfo* pPageInfo = m_PageInfoList.back(); |
1507 if ((pPageInfo->m_bIsStriped == 1) && | 1473 if ((pPageInfo->m_bIsStriped == 1) && |
1508 (ri.y + ri.height > m_pPage->m_nHeight)) { | 1474 (ri.y + ri.height > m_pPage->m_nHeight)) { |
1509 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0); | 1475 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0); |
1510 } | 1476 } |
1511 } | 1477 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1547 JBig2HuffmanCode* SBSYMCODES; | 1513 JBig2HuffmanCode* SBSYMCODES; |
1548 int32_t runcodes[35]; | 1514 int32_t runcodes[35]; |
1549 int32_t runcodes_len[35]; | 1515 int32_t runcodes_len[35]; |
1550 int32_t runcode; | 1516 int32_t runcode; |
1551 int32_t i; | 1517 int32_t i; |
1552 int32_t j; | 1518 int32_t j; |
1553 int32_t nVal; | 1519 int32_t nVal; |
1554 int32_t nBits; | 1520 int32_t nBits; |
1555 int32_t run; | 1521 int32_t run; |
1556 FX_DWORD nTemp; | 1522 FX_DWORD nTemp; |
1557 SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2( | 1523 SBSYMCODES = (JBig2HuffmanCode*)FX_Alloc2D(uint8_t, sizeof(JBig2HuffmanCode), |
1558 sizeof(JBig2HuffmanCode), SBNUMSYMS); | 1524 SBNUMSYMS); |
1559 for (i = 0; i < 35; i++) { | 1525 for (i = 0; i < 35; i++) { |
1560 if (pStream->readNBits(4, &runcodes_len[i]) != 0) { | 1526 if (pStream->readNBits(4, &runcodes_len[i]) != 0) { |
1561 goto failed; | 1527 goto failed; |
1562 } | 1528 } |
1563 } | 1529 } |
1564 huffman_assign_code(runcodes, runcodes_len, 35); | 1530 huffman_assign_code(runcodes, runcodes_len, 35); |
1565 i = 0; | 1531 i = 0; |
1566 while (i < (int)SBNUMSYMS) { | 1532 while (i < (int)SBNUMSYMS) { |
1567 nVal = 0; | 1533 nVal = 0; |
1568 nBits = 0; | 1534 nBits = 0; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1613 } | 1579 } |
1614 } | 1580 } |
1615 i += run; | 1581 i += run; |
1616 } else { | 1582 } else { |
1617 i++; | 1583 i++; |
1618 } | 1584 } |
1619 } | 1585 } |
1620 huffman_assign_code(SBSYMCODES, SBNUMSYMS); | 1586 huffman_assign_code(SBSYMCODES, SBNUMSYMS); |
1621 return SBSYMCODES; | 1587 return SBSYMCODES; |
1622 failed: | 1588 failed: |
1623 m_pModule->JBig2_Free(SBSYMCODES); | 1589 FX_Free(SBSYMCODES); |
1624 return NULL; | 1590 return NULL; |
1625 } | 1591 } |
1626 void CJBig2_Context::huffman_assign_code(int* CODES, int* PREFLEN, int NTEMP) { | 1592 void CJBig2_Context::huffman_assign_code(int* CODES, int* PREFLEN, int NTEMP) { |
1627 int CURLEN, LENMAX, CURCODE, CURTEMP, i; | 1593 int CURLEN, LENMAX, CURCODE, CURTEMP, i; |
1628 int* LENCOUNT; | 1594 int* LENCOUNT; |
1629 int* FIRSTCODE; | 1595 int* FIRSTCODE; |
1630 LENMAX = 0; | 1596 LENMAX = 0; |
1631 for (i = 0; i < NTEMP; i++) { | 1597 for (i = 0; i < NTEMP; i++) { |
1632 if (PREFLEN[i] > LENMAX) { | 1598 if (PREFLEN[i] > LENMAX) { |
1633 LENMAX = PREFLEN[i]; | 1599 LENMAX = PREFLEN[i]; |
1634 } | 1600 } |
1635 } | 1601 } |
1636 LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1)); | 1602 LENCOUNT = (int*)FX_Alloc2D(uint8_t, sizeof(int), (LENMAX + 1)); |
1637 JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1)); | 1603 JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1)); |
1638 FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1)); | 1604 FIRSTCODE = (int*)FX_Alloc2D(uint8_t, sizeof(int), (LENMAX + 1)); |
1639 for (i = 0; i < NTEMP; i++) { | 1605 for (i = 0; i < NTEMP; i++) { |
1640 LENCOUNT[PREFLEN[i]]++; | 1606 LENCOUNT[PREFLEN[i]]++; |
1641 } | 1607 } |
1642 CURLEN = 1; | 1608 CURLEN = 1; |
1643 FIRSTCODE[0] = 0; | 1609 FIRSTCODE[0] = 0; |
1644 LENCOUNT[0] = 0; | 1610 LENCOUNT[0] = 0; |
1645 while (CURLEN <= LENMAX) { | 1611 while (CURLEN <= LENMAX) { |
1646 FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1; | 1612 FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1; |
1647 CURCODE = FIRSTCODE[CURLEN]; | 1613 CURCODE = FIRSTCODE[CURLEN]; |
1648 CURTEMP = 0; | 1614 CURTEMP = 0; |
1649 while (CURTEMP < NTEMP) { | 1615 while (CURTEMP < NTEMP) { |
1650 if (PREFLEN[CURTEMP] == CURLEN) { | 1616 if (PREFLEN[CURTEMP] == CURLEN) { |
1651 CODES[CURTEMP] = CURCODE; | 1617 CODES[CURTEMP] = CURCODE; |
1652 CURCODE = CURCODE + 1; | 1618 CURCODE = CURCODE + 1; |
1653 } | 1619 } |
1654 CURTEMP = CURTEMP + 1; | 1620 CURTEMP = CURTEMP + 1; |
1655 } | 1621 } |
1656 CURLEN = CURLEN + 1; | 1622 CURLEN = CURLEN + 1; |
1657 } | 1623 } |
1658 m_pModule->JBig2_Free(LENCOUNT); | 1624 FX_Free(LENCOUNT); |
1659 m_pModule->JBig2_Free(FIRSTCODE); | 1625 FX_Free(FIRSTCODE); |
1660 } | 1626 } |
1661 void CJBig2_Context::huffman_assign_code(JBig2HuffmanCode* SBSYMCODES, | 1627 void CJBig2_Context::huffman_assign_code(JBig2HuffmanCode* SBSYMCODES, |
1662 int NTEMP) { | 1628 int NTEMP) { |
1663 int CURLEN, LENMAX, CURCODE, CURTEMP, i; | 1629 int CURLEN, LENMAX, CURCODE, CURTEMP, i; |
1664 int* LENCOUNT; | 1630 int* LENCOUNT; |
1665 int* FIRSTCODE; | 1631 int* FIRSTCODE; |
1666 LENMAX = 0; | 1632 LENMAX = 0; |
1667 for (i = 0; i < NTEMP; i++) { | 1633 for (i = 0; i < NTEMP; i++) { |
1668 if (SBSYMCODES[i].codelen > LENMAX) { | 1634 if (SBSYMCODES[i].codelen > LENMAX) { |
1669 LENMAX = SBSYMCODES[i].codelen; | 1635 LENMAX = SBSYMCODES[i].codelen; |
1670 } | 1636 } |
1671 } | 1637 } |
1672 LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1)); | 1638 LENCOUNT = (int*)FX_Alloc2D(uint8_t, sizeof(int), (LENMAX + 1)); |
1673 JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1)); | 1639 JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1)); |
1674 FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1)); | 1640 FIRSTCODE = (int*)FX_Alloc2D(uint8_t, sizeof(int), (LENMAX + 1)); |
1675 for (i = 0; i < NTEMP; i++) { | 1641 for (i = 0; i < NTEMP; i++) { |
1676 LENCOUNT[SBSYMCODES[i].codelen]++; | 1642 LENCOUNT[SBSYMCODES[i].codelen]++; |
1677 } | 1643 } |
1678 CURLEN = 1; | 1644 CURLEN = 1; |
1679 FIRSTCODE[0] = 0; | 1645 FIRSTCODE[0] = 0; |
1680 LENCOUNT[0] = 0; | 1646 LENCOUNT[0] = 0; |
1681 while (CURLEN <= LENMAX) { | 1647 while (CURLEN <= LENMAX) { |
1682 FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1; | 1648 FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1; |
1683 CURCODE = FIRSTCODE[CURLEN]; | 1649 CURCODE = FIRSTCODE[CURLEN]; |
1684 CURTEMP = 0; | 1650 CURTEMP = 0; |
1685 while (CURTEMP < NTEMP) { | 1651 while (CURTEMP < NTEMP) { |
1686 if (SBSYMCODES[CURTEMP].codelen == CURLEN) { | 1652 if (SBSYMCODES[CURTEMP].codelen == CURLEN) { |
1687 SBSYMCODES[CURTEMP].code = CURCODE; | 1653 SBSYMCODES[CURTEMP].code = CURCODE; |
1688 CURCODE = CURCODE + 1; | 1654 CURCODE = CURCODE + 1; |
1689 } | 1655 } |
1690 CURTEMP = CURTEMP + 1; | 1656 CURTEMP = CURTEMP + 1; |
1691 } | 1657 } |
1692 CURLEN = CURLEN + 1; | 1658 CURLEN = CURLEN + 1; |
1693 } | 1659 } |
1694 m_pModule->JBig2_Free(LENCOUNT); | 1660 FX_Free(LENCOUNT); |
1695 m_pModule->JBig2_Free(FIRSTCODE); | 1661 FX_Free(FIRSTCODE); |
1696 } | 1662 } |
OLD | NEW |