| 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 <map> | 7 #include <map> |
| 8 #include <list> | 8 #include <list> |
| 9 #include "JBig2_Context.h" | 9 #include "JBig2_Context.h" |
| 10 | 10 |
| (...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 break; | 584 break; |
| 585 default: | 585 default: |
| 586 break; | 586 break; |
| 587 } | 587 } |
| 588 return JBIG2_SUCCESS; | 588 return JBIG2_SUCCESS; |
| 589 failed1: | 589 failed1: |
| 590 m_pModule->JBig2_Error("segment data too short."); | 590 m_pModule->JBig2_Error("segment data too short."); |
| 591 return JBIG2_ERROR_TOO_SHORT; | 591 return JBIG2_ERROR_TOO_SHORT; |
| 592 failed2: | 592 failed2: |
| 593 m_pModule->JBig2_Error("segment syntax error."); | 593 m_pModule->JBig2_Error("segment syntax error."); |
| 594 return JBIG2_ERROR_FETAL; | 594 return JBIG2_ERROR_FATAL; |
| 595 } | 595 } |
| 596 int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment *pSegment, IFX_Pause* pPa
use) | 596 int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment *pSegment, IFX_Pause* pPa
use) |
| 597 { | 597 { |
| 598 FX_DWORD dwTemp; | 598 FX_DWORD dwTemp; |
| 599 FX_WORD wFlags; | 599 FX_WORD wFlags; |
| 600 uint8_t cSDHUFFDH, cSDHUFFDW, cSDHUFFBMSIZE, cSDHUFFAGGINST; | 600 uint8_t cSDHUFFDH, cSDHUFFDW, cSDHUFFBMSIZE, cSDHUFFAGGINST; |
| 601 CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B2 = NULL, *Table_B3 = NULL, *T
able_B4 = NULL, *Table_B5 = NULL; | 601 CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B2 = NULL, *Table_B3 = NULL, *T
able_B4 = NULL, *Table_B5 = NULL; |
| 602 int32_t i, nIndex, nRet; | 602 int32_t i, nIndex, nRet; |
| 603 CJBig2_Segment *pSeg = NULL, *pLRSeg = NULL; | 603 CJBig2_Segment *pSeg = NULL, *pLRSeg = NULL; |
| 604 FX_BOOL bUsed; | 604 FX_BOOL bUsed; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 } | 653 } |
| 654 if (pSymbolDictDecoder->SDNUMEXSYMS > JBIG2_MAX_EXPORT_SYSMBOLS | 654 if (pSymbolDictDecoder->SDNUMEXSYMS > JBIG2_MAX_EXPORT_SYSMBOLS |
| 655 || pSymbolDictDecoder->SDNUMNEWSYMS > JBIG2_MAX_NEW_SYSMBOLS) { | 655 || pSymbolDictDecoder->SDNUMNEWSYMS > JBIG2_MAX_NEW_SYSMBOLS) { |
| 656 m_pModule->JBig2_Error("symbol dictionary segment : too many export/new
symbols."); | 656 m_pModule->JBig2_Error("symbol dictionary segment : too many export/new
symbols."); |
| 657 nRet = JBIG2_ERROR_LIMIT; | 657 nRet = JBIG2_ERROR_LIMIT; |
| 658 goto failed; | 658 goto failed; |
| 659 } | 659 } |
| 660 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 660 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
| 661 if(!findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i])) { | 661 if(!findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i])) { |
| 662 m_pModule->JBig2_Error("symbol dictionary segment : can't find refer
ed to segments"); | 662 m_pModule->JBig2_Error("symbol dictionary segment : can't find refer
ed to segments"); |
| 663 nRet = JBIG2_ERROR_FETAL; | 663 nRet = JBIG2_ERROR_FATAL; |
| 664 goto failed; | 664 goto failed; |
| 665 } | 665 } |
| 666 } | 666 } |
| 667 pSymbolDictDecoder->SDNUMINSYMS = 0; | 667 pSymbolDictDecoder->SDNUMINSYMS = 0; |
| 668 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 668 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
| 669 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); | 669 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); |
| 670 if(pSeg->m_cFlags.s.type == 0) { | 670 if(pSeg->m_cFlags.s.type == 0) { |
| 671 pSymbolDictDecoder->SDNUMINSYMS += pSeg->m_Result.sd->SDNUMEXSYMS; | 671 pSymbolDictDecoder->SDNUMINSYMS += pSeg->m_Result.sd->SDNUMEXSYMS; |
| 672 pLRSeg = pSeg; | 672 pLRSeg = pSeg; |
| 673 } | 673 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 684 JBIG2_memcpy(SDINSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS, | 684 JBIG2_memcpy(SDINSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS, |
| 685 pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Imag
e*)); | 685 pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Imag
e*)); |
| 686 dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS; | 686 dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS; |
| 687 } | 687 } |
| 688 } | 688 } |
| 689 } | 689 } |
| 690 pSymbolDictDecoder->SDINSYMS = SDINSYMS; | 690 pSymbolDictDecoder->SDINSYMS = SDINSYMS; |
| 691 if(pSymbolDictDecoder->SDHUFF == 1) { | 691 if(pSymbolDictDecoder->SDHUFF == 1) { |
| 692 if((cSDHUFFDH == 2) || (cSDHUFFDW == 2)) { | 692 if((cSDHUFFDH == 2) || (cSDHUFFDW == 2)) { |
| 693 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDH=2 or SD
HUFFDW=2 is not permitted."); | 693 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDH=2 or SD
HUFFDW=2 is not permitted."); |
| 694 nRet = JBIG2_ERROR_FETAL; | 694 nRet = JBIG2_ERROR_FATAL; |
| 695 goto failed; | 695 goto failed; |
| 696 } | 696 } |
| 697 nIndex = 0; | 697 nIndex = 0; |
| 698 if(cSDHUFFDH == 0) { | 698 if(cSDHUFFDH == 0) { |
| 699 JBIG2_ALLOC(Table_B4, CJBig2_HuffmanTable(HuffmanTable_B4, | 699 JBIG2_ALLOC(Table_B4, CJBig2_HuffmanTable(HuffmanTable_B4, |
| 700 sizeof(HuffmanTable_B4) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B4)); | 700 sizeof(HuffmanTable_B4) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B4)); |
| 701 pSymbolDictDecoder->SDHUFFDH = Table_B4; | 701 pSymbolDictDecoder->SDHUFFDH = Table_B4; |
| 702 } else if(cSDHUFFDH == 1) { | 702 } else if(cSDHUFFDH == 1) { |
| 703 JBIG2_ALLOC(Table_B5, CJBig2_HuffmanTable(HuffmanTable_B5, | 703 JBIG2_ALLOC(Table_B5, CJBig2_HuffmanTable(HuffmanTable_B5, |
| 704 sizeof(HuffmanTable_B5) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B5)); | 704 sizeof(HuffmanTable_B5) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B5)); |
| 705 pSymbolDictDecoder->SDHUFFDH = Table_B5; | 705 pSymbolDictDecoder->SDHUFFDH = Table_B5; |
| 706 } else { | 706 } else { |
| 707 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 707 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 708 if(!pSeg) { | 708 if(!pSeg) { |
| 709 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDH can
't find user supplied table."); | 709 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDH can
't find user supplied table."); |
| 710 nRet = JBIG2_ERROR_FETAL; | 710 nRet = JBIG2_ERROR_FATAL; |
| 711 goto failed; | 711 goto failed; |
| 712 } | 712 } |
| 713 pSymbolDictDecoder->SDHUFFDH = pSeg->m_Result.ht; | 713 pSymbolDictDecoder->SDHUFFDH = pSeg->m_Result.ht; |
| 714 } | 714 } |
| 715 if(cSDHUFFDW == 0) { | 715 if(cSDHUFFDW == 0) { |
| 716 JBIG2_ALLOC(Table_B2, CJBig2_HuffmanTable(HuffmanTable_B2, | 716 JBIG2_ALLOC(Table_B2, CJBig2_HuffmanTable(HuffmanTable_B2, |
| 717 sizeof(HuffmanTable_B2) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B2)); | 717 sizeof(HuffmanTable_B2) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B2)); |
| 718 pSymbolDictDecoder->SDHUFFDW = Table_B2; | 718 pSymbolDictDecoder->SDHUFFDW = Table_B2; |
| 719 } else if(cSDHUFFDW == 1) { | 719 } else if(cSDHUFFDW == 1) { |
| 720 JBIG2_ALLOC(Table_B3, CJBig2_HuffmanTable(HuffmanTable_B3, | 720 JBIG2_ALLOC(Table_B3, CJBig2_HuffmanTable(HuffmanTable_B3, |
| 721 sizeof(HuffmanTable_B3) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B3)); | 721 sizeof(HuffmanTable_B3) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B3)); |
| 722 pSymbolDictDecoder->SDHUFFDW = Table_B3; | 722 pSymbolDictDecoder->SDHUFFDW = Table_B3; |
| 723 } else { | 723 } else { |
| 724 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 724 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 725 if(!pSeg) { | 725 if(!pSeg) { |
| 726 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDW can
't find user supplied table."); | 726 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDW can
't find user supplied table."); |
| 727 nRet = JBIG2_ERROR_FETAL; | 727 nRet = JBIG2_ERROR_FATAL; |
| 728 goto failed; | 728 goto failed; |
| 729 } | 729 } |
| 730 pSymbolDictDecoder->SDHUFFDW = pSeg->m_Result.ht; | 730 pSymbolDictDecoder->SDHUFFDW = pSeg->m_Result.ht; |
| 731 } | 731 } |
| 732 if(cSDHUFFBMSIZE == 0) { | 732 if(cSDHUFFBMSIZE == 0) { |
| 733 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, | 733 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, |
| 734 sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B1)); | 734 sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B1)); |
| 735 pSymbolDictDecoder->SDHUFFBMSIZE = Table_B1; | 735 pSymbolDictDecoder->SDHUFFBMSIZE = Table_B1; |
| 736 } else { | 736 } else { |
| 737 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 737 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 738 if(!pSeg) { | 738 if(!pSeg) { |
| 739 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFBMSIZE
can't find user supplied table."); | 739 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFBMSIZE
can't find user supplied table."); |
| 740 nRet = JBIG2_ERROR_FETAL; | 740 nRet = JBIG2_ERROR_FATAL; |
| 741 goto failed; | 741 goto failed; |
| 742 } | 742 } |
| 743 pSymbolDictDecoder->SDHUFFBMSIZE = pSeg->m_Result.ht; | 743 pSymbolDictDecoder->SDHUFFBMSIZE = pSeg->m_Result.ht; |
| 744 } | 744 } |
| 745 if(pSymbolDictDecoder->SDREFAGG == 1) { | 745 if(pSymbolDictDecoder->SDREFAGG == 1) { |
| 746 if(cSDHUFFAGGINST == 0) { | 746 if(cSDHUFFAGGINST == 0) { |
| 747 if(!Table_B1) { | 747 if(!Table_B1) { |
| 748 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, | 748 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, |
| 749 sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine)
, HuffmanTable_HTOOB_B1)); | 749 sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine)
, HuffmanTable_HTOOB_B1)); |
| 750 } | 750 } |
| 751 pSymbolDictDecoder->SDHUFFAGGINST = Table_B1; | 751 pSymbolDictDecoder->SDHUFFAGGINST = Table_B1; |
| 752 } else { | 752 } else { |
| 753 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++)
; | 753 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++)
; |
| 754 if(!pSeg) { | 754 if(!pSeg) { |
| 755 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFAG
GINST can't find user supplied table."); | 755 m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFAG
GINST can't find user supplied table."); |
| 756 nRet = JBIG2_ERROR_FETAL; | 756 nRet = JBIG2_ERROR_FATAL; |
| 757 goto failed; | 757 goto failed; |
| 758 } | 758 } |
| 759 pSymbolDictDecoder->SDHUFFAGGINST = pSeg->m_Result.ht; | 759 pSymbolDictDecoder->SDHUFFAGGINST = pSeg->m_Result.ht; |
| 760 } | 760 } |
| 761 } | 761 } |
| 762 } | 762 } |
| 763 if((wFlags & 0x0100) && pLRSeg && pLRSeg->m_Result.sd->m_bContextRetained) { | 763 if((wFlags & 0x0100) && pLRSeg && pLRSeg->m_Result.sd->m_bContextRetained) { |
| 764 if (pSymbolDictDecoder->SDHUFF == 0) { | 764 if (pSymbolDictDecoder->SDHUFF == 0) { |
| 765 dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0 ? 65536 : pSymbolDictDe
coder->SDTEMPLATE == 1 ? | 765 dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0 ? 65536 : pSymbolDictDe
coder->SDTEMPLATE == 1 ? |
| 766 8192 : 1024; | 766 8192 : 1024; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 795 cache_hit = true; | 795 cache_hit = true; |
| 796 break; | 796 break; |
| 797 } | 797 } |
| 798 } | 798 } |
| 799 if (!cache_hit) { | 799 if (!cache_hit) { |
| 800 if(pSymbolDictDecoder->SDHUFF == 0) { | 800 if(pSymbolDictDecoder->SDHUFF == 0) { |
| 801 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); | 801 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); |
| 802 pSegment->m_Result.sd = pSymbolDictDecoder->decode_Arith(pArithDecod
er, gbContext, grContext); | 802 pSegment->m_Result.sd = pSymbolDictDecoder->decode_Arith(pArithDecod
er, gbContext, grContext); |
| 803 delete pArithDecoder; | 803 delete pArithDecoder; |
| 804 if(pSegment->m_Result.sd == NULL) { | 804 if(pSegment->m_Result.sd == NULL) { |
| 805 nRet = JBIG2_ERROR_FETAL; | 805 nRet = JBIG2_ERROR_FATAL; |
| 806 goto failed; | 806 goto failed; |
| 807 } | 807 } |
| 808 m_pStream->alignByte(); | 808 m_pStream->alignByte(); |
| 809 m_pStream->offset(2); | 809 m_pStream->offset(2); |
| 810 } else { | 810 } else { |
| 811 pSegment->m_Result.sd = pSymbolDictDecoder->decode_Huffman(m_pStream
, gbContext, grContext, pPause); | 811 pSegment->m_Result.sd = pSymbolDictDecoder->decode_Huffman(m_pStream
, gbContext, grContext, pPause); |
| 812 if(pSegment->m_Result.sd == NULL) { | 812 if(pSegment->m_Result.sd == NULL) { |
| 813 nRet = JBIG2_ERROR_FETAL; | 813 nRet = JBIG2_ERROR_FATAL; |
| 814 goto failed; | 814 goto failed; |
| 815 } | 815 } |
| 816 m_pStream->alignByte(); | 816 m_pStream->alignByte(); |
| 817 } | 817 } |
| 818 CJBig2_SymbolDict *value = pSegment->m_Result.sd->DeepCopy(); | 818 CJBig2_SymbolDict *value = pSegment->m_Result.sd->DeepCopy(); |
| 819 if (value && kSymbolDictCacheMaxSize > 0) { | 819 if (value && kSymbolDictCacheMaxSize > 0) { |
| 820 while (m_pSymbolDictCache->size() >= kSymbolDictCacheMaxSize) { | 820 while (m_pSymbolDictCache->size() >= kSymbolDictCacheMaxSize) { |
| 821 delete m_pSymbolDictCache->back().second; | 821 delete m_pSymbolDictCache->back().second; |
| 822 m_pSymbolDictCache->pop_back(); | 822 m_pSymbolDictCache->pop_back(); |
| 823 } | 823 } |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 944 } | 944 } |
| 945 } | 945 } |
| 946 if(m_pStream->readInteger(&pTRD->SBNUMINSTANCES) != 0) { | 946 if(m_pStream->readInteger(&pTRD->SBNUMINSTANCES) != 0) { |
| 947 m_pModule->JBig2_Error("text region segment : data header too short."); | 947 m_pModule->JBig2_Error("text region segment : data header too short."); |
| 948 nRet = JBIG2_ERROR_TOO_SHORT; | 948 nRet = JBIG2_ERROR_TOO_SHORT; |
| 949 goto failed; | 949 goto failed; |
| 950 } | 950 } |
| 951 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 951 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
| 952 if(!findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i])) { | 952 if(!findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i])) { |
| 953 m_pModule->JBig2_Error("text region segment : can't find refered to
segments"); | 953 m_pModule->JBig2_Error("text region segment : can't find refered to
segments"); |
| 954 nRet = JBIG2_ERROR_FETAL; | 954 nRet = JBIG2_ERROR_FATAL; |
| 955 goto failed; | 955 goto failed; |
| 956 } | 956 } |
| 957 } | 957 } |
| 958 pTRD->SBNUMSYMS = 0; | 958 pTRD->SBNUMSYMS = 0; |
| 959 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 959 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
| 960 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); | 960 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); |
| 961 if(pSeg->m_cFlags.s.type == 0) { | 961 if(pSeg->m_cFlags.s.type == 0) { |
| 962 pTRD->SBNUMSYMS += pSeg->m_Result.sd->SDNUMEXSYMS; | 962 pTRD->SBNUMSYMS += pSeg->m_Result.sd->SDNUMEXSYMS; |
| 963 } | 963 } |
| 964 } | 964 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 975 } | 975 } |
| 976 } | 976 } |
| 977 pTRD->SBSYMS = SBSYMS; | 977 pTRD->SBSYMS = SBSYMS; |
| 978 } else { | 978 } else { |
| 979 pTRD->SBSYMS = NULL; | 979 pTRD->SBSYMS = NULL; |
| 980 } | 980 } |
| 981 if(pTRD->SBHUFF == 1) { | 981 if(pTRD->SBHUFF == 1) { |
| 982 SBSYMCODES = decodeSymbolIDHuffmanTable(m_pStream, pTRD->SBNUMSYMS); | 982 SBSYMCODES = decodeSymbolIDHuffmanTable(m_pStream, pTRD->SBNUMSYMS); |
| 983 if(SBSYMCODES == NULL) { | 983 if(SBSYMCODES == NULL) { |
| 984 m_pModule->JBig2_Error("text region segment: symbol ID huffman table
decode failure!"); | 984 m_pModule->JBig2_Error("text region segment: symbol ID huffman table
decode failure!"); |
| 985 nRet = JBIG2_ERROR_FETAL; | 985 nRet = JBIG2_ERROR_FATAL; |
| 986 goto failed; | 986 goto failed; |
| 987 } | 987 } |
| 988 m_pStream->alignByte(); | 988 m_pStream->alignByte(); |
| 989 pTRD->SBSYMCODES = SBSYMCODES; | 989 pTRD->SBSYMCODES = SBSYMCODES; |
| 990 } else { | 990 } else { |
| 991 dwTemp = 0; | 991 dwTemp = 0; |
| 992 while((FX_DWORD)(1 << dwTemp) < pTRD->SBNUMSYMS) { | 992 while((FX_DWORD)(1 << dwTemp) < pTRD->SBNUMSYMS) { |
| 993 dwTemp ++; | 993 dwTemp ++; |
| 994 } | 994 } |
| 995 pTRD->SBSYMCODELEN = (uint8_t)dwTemp; | 995 pTRD->SBSYMCODELEN = (uint8_t)dwTemp; |
| 996 } | 996 } |
| 997 if(pTRD->SBHUFF == 1) { | 997 if(pTRD->SBHUFF == 1) { |
| 998 if((cSBHUFFFS == 2) || (cSBHUFFRDW == 2) || (cSBHUFFRDH == 2) | 998 if((cSBHUFFFS == 2) || (cSBHUFFRDW == 2) || (cSBHUFFRDH == 2) |
| 999 || (cSBHUFFRDX == 2) || (cSBHUFFRDY == 2)) { | 999 || (cSBHUFFRDX == 2) || (cSBHUFFRDY == 2)) { |
| 1000 m_pModule->JBig2_Error("text region segment : SBHUFFFS=2 or SBHUFFRD
W=2 or " | 1000 m_pModule->JBig2_Error("text region segment : SBHUFFFS=2 or SBHUFFRD
W=2 or " |
| 1001 "SBHUFFRDH=2 or SBHUFFRDX=2 or SBHUFFRDY=2 is
not permitted"); | 1001 "SBHUFFRDH=2 or SBHUFFRDX=2 or SBHUFFRDY=2 is
not permitted"); |
| 1002 nRet = JBIG2_ERROR_FETAL; | 1002 nRet = JBIG2_ERROR_FATAL; |
| 1003 goto failed; | 1003 goto failed; |
| 1004 } | 1004 } |
| 1005 nIndex = 0; | 1005 nIndex = 0; |
| 1006 if(cSBHUFFFS == 0) { | 1006 if(cSBHUFFFS == 0) { |
| 1007 JBIG2_ALLOC(Table_B6, CJBig2_HuffmanTable(HuffmanTable_B6, | 1007 JBIG2_ALLOC(Table_B6, CJBig2_HuffmanTable(HuffmanTable_B6, |
| 1008 sizeof(HuffmanTable_B6) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B6)); | 1008 sizeof(HuffmanTable_B6) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B6)); |
| 1009 pTRD->SBHUFFFS = Table_B6; | 1009 pTRD->SBHUFFFS = Table_B6; |
| 1010 } else if(cSBHUFFFS == 1) { | 1010 } else if(cSBHUFFFS == 1) { |
| 1011 JBIG2_ALLOC(Table_B7, CJBig2_HuffmanTable(HuffmanTable_B7, | 1011 JBIG2_ALLOC(Table_B7, CJBig2_HuffmanTable(HuffmanTable_B7, |
| 1012 sizeof(HuffmanTable_B7) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B7)); | 1012 sizeof(HuffmanTable_B7) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B7)); |
| 1013 pTRD->SBHUFFFS = Table_B7; | 1013 pTRD->SBHUFFFS = Table_B7; |
| 1014 } else { | 1014 } else { |
| 1015 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 1015 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 1016 if(!pSeg) { | 1016 if(!pSeg) { |
| 1017 m_pModule->JBig2_Error("text region segment : SBHUFFFS can't fin
d user supplied table"); | 1017 m_pModule->JBig2_Error("text region segment : SBHUFFFS can't fin
d user supplied table"); |
| 1018 nRet = JBIG2_ERROR_FETAL; | 1018 nRet = JBIG2_ERROR_FATAL; |
| 1019 goto failed; | 1019 goto failed; |
| 1020 } | 1020 } |
| 1021 pTRD->SBHUFFFS = pSeg->m_Result.ht; | 1021 pTRD->SBHUFFFS = pSeg->m_Result.ht; |
| 1022 } | 1022 } |
| 1023 if(cSBHUFFDS == 0) { | 1023 if(cSBHUFFDS == 0) { |
| 1024 JBIG2_ALLOC(Table_B8, CJBig2_HuffmanTable(HuffmanTable_B8, | 1024 JBIG2_ALLOC(Table_B8, CJBig2_HuffmanTable(HuffmanTable_B8, |
| 1025 sizeof(HuffmanTable_B8) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B8)); | 1025 sizeof(HuffmanTable_B8) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B8)); |
| 1026 pTRD->SBHUFFDS = Table_B8; | 1026 pTRD->SBHUFFDS = Table_B8; |
| 1027 } else if(cSBHUFFDS == 1) { | 1027 } else if(cSBHUFFDS == 1) { |
| 1028 JBIG2_ALLOC(Table_B9, CJBig2_HuffmanTable(HuffmanTable_B9, | 1028 JBIG2_ALLOC(Table_B9, CJBig2_HuffmanTable(HuffmanTable_B9, |
| 1029 sizeof(HuffmanTable_B9) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B9)); | 1029 sizeof(HuffmanTable_B9) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B9)); |
| 1030 pTRD->SBHUFFDS = Table_B9; | 1030 pTRD->SBHUFFDS = Table_B9; |
| 1031 } else if(cSBHUFFDS == 2) { | 1031 } else if(cSBHUFFDS == 2) { |
| 1032 JBIG2_ALLOC(Table_B10, CJBig2_HuffmanTable(HuffmanTable_B10, | 1032 JBIG2_ALLOC(Table_B10, CJBig2_HuffmanTable(HuffmanTable_B10, |
| 1033 sizeof(HuffmanTable_B10) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B10)); | 1033 sizeof(HuffmanTable_B10) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B10)); |
| 1034 pTRD->SBHUFFDS = Table_B10; | 1034 pTRD->SBHUFFDS = Table_B10; |
| 1035 } else { | 1035 } else { |
| 1036 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 1036 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 1037 if(!pSeg) { | 1037 if(!pSeg) { |
| 1038 m_pModule->JBig2_Error("text region segment : SBHUFFDS can't fin
d user supplied table"); | 1038 m_pModule->JBig2_Error("text region segment : SBHUFFDS can't fin
d user supplied table"); |
| 1039 nRet = JBIG2_ERROR_FETAL; | 1039 nRet = JBIG2_ERROR_FATAL; |
| 1040 goto failed; | 1040 goto failed; |
| 1041 } | 1041 } |
| 1042 pTRD->SBHUFFDS = pSeg->m_Result.ht; | 1042 pTRD->SBHUFFDS = pSeg->m_Result.ht; |
| 1043 } | 1043 } |
| 1044 if(cSBHUFFDT == 0) { | 1044 if(cSBHUFFDT == 0) { |
| 1045 JBIG2_ALLOC(Table_B11, CJBig2_HuffmanTable(HuffmanTable_B11, | 1045 JBIG2_ALLOC(Table_B11, CJBig2_HuffmanTable(HuffmanTable_B11, |
| 1046 sizeof(HuffmanTable_B11) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B11)); | 1046 sizeof(HuffmanTable_B11) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B11)); |
| 1047 pTRD->SBHUFFDT = Table_B11; | 1047 pTRD->SBHUFFDT = Table_B11; |
| 1048 } else if(cSBHUFFDT == 1) { | 1048 } else if(cSBHUFFDT == 1) { |
| 1049 JBIG2_ALLOC(Table_B12, CJBig2_HuffmanTable(HuffmanTable_B12, | 1049 JBIG2_ALLOC(Table_B12, CJBig2_HuffmanTable(HuffmanTable_B12, |
| 1050 sizeof(HuffmanTable_B12) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B12)); | 1050 sizeof(HuffmanTable_B12) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B12)); |
| 1051 pTRD->SBHUFFDT = Table_B12; | 1051 pTRD->SBHUFFDT = Table_B12; |
| 1052 } else if(cSBHUFFDT == 2) { | 1052 } else if(cSBHUFFDT == 2) { |
| 1053 JBIG2_ALLOC(Table_B13, CJBig2_HuffmanTable(HuffmanTable_B13, | 1053 JBIG2_ALLOC(Table_B13, CJBig2_HuffmanTable(HuffmanTable_B13, |
| 1054 sizeof(HuffmanTable_B13) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B13)); | 1054 sizeof(HuffmanTable_B13) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B13)); |
| 1055 pTRD->SBHUFFDT = Table_B13; | 1055 pTRD->SBHUFFDT = Table_B13; |
| 1056 } else { | 1056 } else { |
| 1057 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 1057 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 1058 if(!pSeg) { | 1058 if(!pSeg) { |
| 1059 m_pModule->JBig2_Error("text region segment : SBHUFFDT can't fin
d user supplied table"); | 1059 m_pModule->JBig2_Error("text region segment : SBHUFFDT can't fin
d user supplied table"); |
| 1060 nRet = JBIG2_ERROR_FETAL; | 1060 nRet = JBIG2_ERROR_FATAL; |
| 1061 goto failed; | 1061 goto failed; |
| 1062 } | 1062 } |
| 1063 pTRD->SBHUFFDT = pSeg->m_Result.ht; | 1063 pTRD->SBHUFFDT = pSeg->m_Result.ht; |
| 1064 } | 1064 } |
| 1065 if(cSBHUFFRDW == 0) { | 1065 if(cSBHUFFRDW == 0) { |
| 1066 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, | 1066 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, |
| 1067 sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B14)); | 1067 sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B14)); |
| 1068 pTRD->SBHUFFRDW = Table_B14; | 1068 pTRD->SBHUFFRDW = Table_B14; |
| 1069 } else if(cSBHUFFRDW == 1) { | 1069 } else if(cSBHUFFRDW == 1) { |
| 1070 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, | 1070 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, |
| 1071 sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B15)); | 1071 sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), Huffm
anTable_HTOOB_B15)); |
| 1072 pTRD->SBHUFFRDW = Table_B15; | 1072 pTRD->SBHUFFRDW = Table_B15; |
| 1073 } else { | 1073 } else { |
| 1074 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 1074 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 1075 if(!pSeg) { | 1075 if(!pSeg) { |
| 1076 m_pModule->JBig2_Error("text region segment : SBHUFFRDW can't fi
nd user supplied table"); | 1076 m_pModule->JBig2_Error("text region segment : SBHUFFRDW can't fi
nd user supplied table"); |
| 1077 nRet = JBIG2_ERROR_FETAL; | 1077 nRet = JBIG2_ERROR_FATAL; |
| 1078 goto failed; | 1078 goto failed; |
| 1079 } | 1079 } |
| 1080 pTRD->SBHUFFRDW = pSeg->m_Result.ht; | 1080 pTRD->SBHUFFRDW = pSeg->m_Result.ht; |
| 1081 } | 1081 } |
| 1082 if(cSBHUFFRDH == 0) { | 1082 if(cSBHUFFRDH == 0) { |
| 1083 if(!Table_B14) { | 1083 if(!Table_B14) { |
| 1084 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, | 1084 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, |
| 1085 sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B14)); | 1085 sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B14)); |
| 1086 } | 1086 } |
| 1087 pTRD->SBHUFFRDH = Table_B14; | 1087 pTRD->SBHUFFRDH = Table_B14; |
| 1088 } else if(cSBHUFFRDH == 1) { | 1088 } else if(cSBHUFFRDH == 1) { |
| 1089 if(!Table_B15) { | 1089 if(!Table_B15) { |
| 1090 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, | 1090 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, |
| 1091 sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B15)); | 1091 sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B15)); |
| 1092 } | 1092 } |
| 1093 pTRD->SBHUFFRDH = Table_B15; | 1093 pTRD->SBHUFFRDH = Table_B15; |
| 1094 } else { | 1094 } else { |
| 1095 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 1095 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 1096 if(!pSeg) { | 1096 if(!pSeg) { |
| 1097 m_pModule->JBig2_Error("text region segment : SBHUFFRDH can't fi
nd user supplied table"); | 1097 m_pModule->JBig2_Error("text region segment : SBHUFFRDH can't fi
nd user supplied table"); |
| 1098 nRet = JBIG2_ERROR_FETAL; | 1098 nRet = JBIG2_ERROR_FATAL; |
| 1099 goto failed; | 1099 goto failed; |
| 1100 } | 1100 } |
| 1101 pTRD->SBHUFFRDH = pSeg->m_Result.ht; | 1101 pTRD->SBHUFFRDH = pSeg->m_Result.ht; |
| 1102 } | 1102 } |
| 1103 if(cSBHUFFRDX == 0) { | 1103 if(cSBHUFFRDX == 0) { |
| 1104 if(!Table_B14) { | 1104 if(!Table_B14) { |
| 1105 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, | 1105 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, |
| 1106 sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B14)); | 1106 sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B14)); |
| 1107 } | 1107 } |
| 1108 pTRD->SBHUFFRDX = Table_B14; | 1108 pTRD->SBHUFFRDX = Table_B14; |
| 1109 } else if(cSBHUFFRDX == 1) { | 1109 } else if(cSBHUFFRDX == 1) { |
| 1110 if(!Table_B15) { | 1110 if(!Table_B15) { |
| 1111 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, | 1111 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, |
| 1112 sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B15)); | 1112 sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B15)); |
| 1113 } | 1113 } |
| 1114 pTRD->SBHUFFRDX = Table_B15; | 1114 pTRD->SBHUFFRDX = Table_B15; |
| 1115 } else { | 1115 } else { |
| 1116 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 1116 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 1117 if(!pSeg) { | 1117 if(!pSeg) { |
| 1118 m_pModule->JBig2_Error("text region segment : SBHUFFRDX can't fi
nd user supplied table"); | 1118 m_pModule->JBig2_Error("text region segment : SBHUFFRDX can't fi
nd user supplied table"); |
| 1119 nRet = JBIG2_ERROR_FETAL; | 1119 nRet = JBIG2_ERROR_FATAL; |
| 1120 goto failed; | 1120 goto failed; |
| 1121 } | 1121 } |
| 1122 pTRD->SBHUFFRDX = pSeg->m_Result.ht; | 1122 pTRD->SBHUFFRDX = pSeg->m_Result.ht; |
| 1123 } | 1123 } |
| 1124 if(cSBHUFFRDY == 0) { | 1124 if(cSBHUFFRDY == 0) { |
| 1125 if(!Table_B14) { | 1125 if(!Table_B14) { |
| 1126 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, | 1126 JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14, |
| 1127 sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B14)); | 1127 sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B14)); |
| 1128 } | 1128 } |
| 1129 pTRD->SBHUFFRDY = Table_B14; | 1129 pTRD->SBHUFFRDY = Table_B14; |
| 1130 } else if(cSBHUFFRDY == 1) { | 1130 } else if(cSBHUFFRDY == 1) { |
| 1131 if(!Table_B15) { | 1131 if(!Table_B15) { |
| 1132 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, | 1132 JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15, |
| 1133 sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B15)); | 1133 sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), H
uffmanTable_HTOOB_B15)); |
| 1134 } | 1134 } |
| 1135 pTRD->SBHUFFRDY = Table_B15; | 1135 pTRD->SBHUFFRDY = Table_B15; |
| 1136 } else { | 1136 } else { |
| 1137 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 1137 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 1138 if(!pSeg) { | 1138 if(!pSeg) { |
| 1139 m_pModule->JBig2_Error("text region segment : SBHUFFRDY can't fi
nd user supplied table"); | 1139 m_pModule->JBig2_Error("text region segment : SBHUFFRDY can't fi
nd user supplied table"); |
| 1140 nRet = JBIG2_ERROR_FETAL; | 1140 nRet = JBIG2_ERROR_FATAL; |
| 1141 goto failed; | 1141 goto failed; |
| 1142 } | 1142 } |
| 1143 pTRD->SBHUFFRDY = pSeg->m_Result.ht; | 1143 pTRD->SBHUFFRDY = pSeg->m_Result.ht; |
| 1144 } | 1144 } |
| 1145 if(cSBHUFFRSIZE == 0) { | 1145 if(cSBHUFFRSIZE == 0) { |
| 1146 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, | 1146 JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1, |
| 1147 sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B1)); | 1147 sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), Huffma
nTable_HTOOB_B1)); |
| 1148 pTRD->SBHUFFRSIZE = Table_B1; | 1148 pTRD->SBHUFFRSIZE = Table_B1; |
| 1149 } else { | 1149 } else { |
| 1150 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); | 1150 pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); |
| 1151 if(!pSeg) { | 1151 if(!pSeg) { |
| 1152 m_pModule->JBig2_Error("text region segment : SBHUFFRSIZE can't
find user supplied table"); | 1152 m_pModule->JBig2_Error("text region segment : SBHUFFRSIZE can't
find user supplied table"); |
| 1153 nRet = JBIG2_ERROR_FETAL; | 1153 nRet = JBIG2_ERROR_FATAL; |
| 1154 goto failed; | 1154 goto failed; |
| 1155 } | 1155 } |
| 1156 pTRD->SBHUFFRSIZE = pSeg->m_Result.ht; | 1156 pTRD->SBHUFFRSIZE = pSeg->m_Result.ht; |
| 1157 } | 1157 } |
| 1158 } | 1158 } |
| 1159 if(pTRD->SBREFINE == 1) { | 1159 if(pTRD->SBREFINE == 1) { |
| 1160 dwTemp = pTRD->SBRTEMPLATE ? 1 << 10 : 1 << 13; | 1160 dwTemp = pTRD->SBRTEMPLATE ? 1 << 10 : 1 << 13; |
| 1161 grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCt
x), dwTemp); | 1161 grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCt
x), dwTemp); |
| 1162 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx)*dwTemp); | 1162 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx)*dwTemp); |
| 1163 } | 1163 } |
| 1164 if(pTRD->SBHUFF == 0) { | 1164 if(pTRD->SBHUFF == 0) { |
| 1165 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); | 1165 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); |
| 1166 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; | 1166 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; |
| 1167 pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext); | 1167 pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext); |
| 1168 delete pArithDecoder; | 1168 delete pArithDecoder; |
| 1169 if(pSegment->m_Result.im == NULL) { | 1169 if(pSegment->m_Result.im == NULL) { |
| 1170 nRet = JBIG2_ERROR_FETAL; | 1170 nRet = JBIG2_ERROR_FATAL; |
| 1171 goto failed; | 1171 goto failed; |
| 1172 } | 1172 } |
| 1173 m_pStream->alignByte(); | 1173 m_pStream->alignByte(); |
| 1174 m_pStream->offset(2); | 1174 m_pStream->offset(2); |
| 1175 } else { | 1175 } else { |
| 1176 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; | 1176 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; |
| 1177 pSegment->m_Result.im = pTRD->decode_Huffman(m_pStream, grContext); | 1177 pSegment->m_Result.im = pTRD->decode_Huffman(m_pStream, grContext); |
| 1178 if(pSegment->m_Result.im == NULL) { | 1178 if(pSegment->m_Result.im == NULL) { |
| 1179 nRet = JBIG2_ERROR_FETAL; | 1179 nRet = JBIG2_ERROR_FATAL; |
| 1180 goto failed; | 1180 goto failed; |
| 1181 } | 1181 } |
| 1182 m_pStream->alignByte(); | 1182 m_pStream->alignByte(); |
| 1183 } | 1183 } |
| 1184 if(pSegment->m_cFlags.s.type != 4) { | 1184 if(pSegment->m_cFlags.s.type != 4) { |
| 1185 if(!m_bBufSpecified) { | 1185 if(!m_bBufSpecified) { |
| 1186 JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast(); | 1186 JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast(); |
| 1187 if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m
_nHeight)) { | 1187 if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m
_nHeight)) { |
| 1188 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1
: 0); | 1188 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1
: 0); |
| 1189 } | 1189 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1266 pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER; | 1266 pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER; |
| 1267 if(pPDD->HDMMR == 0) { | 1267 if(pPDD->HDMMR == 0) { |
| 1268 dwTemp = pPDD->HDTEMPLATE == 0 ? 65536 : pPDD->HDTEMPLATE == 1 ? 8192 :
1024; | 1268 dwTemp = pPDD->HDTEMPLATE == 0 ? 65536 : pPDD->HDTEMPLATE == 1 ? 8192 :
1024; |
| 1269 gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCt
x), dwTemp); | 1269 gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCt
x), dwTemp); |
| 1270 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx)*dwTemp); | 1270 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx)*dwTemp); |
| 1271 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); | 1271 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); |
| 1272 pSegment->m_Result.pd = pPDD->decode_Arith(pArithDecoder, gbContext, pPa
use); | 1272 pSegment->m_Result.pd = pPDD->decode_Arith(pArithDecoder, gbContext, pPa
use); |
| 1273 delete pArithDecoder; | 1273 delete pArithDecoder; |
| 1274 if(pSegment->m_Result.pd == NULL) { | 1274 if(pSegment->m_Result.pd == NULL) { |
| 1275 m_pModule->JBig2_Free(gbContext); | 1275 m_pModule->JBig2_Free(gbContext); |
| 1276 nRet = JBIG2_ERROR_FETAL; | 1276 nRet = JBIG2_ERROR_FATAL; |
| 1277 goto failed; | 1277 goto failed; |
| 1278 } | 1278 } |
| 1279 m_pModule->JBig2_Free(gbContext); | 1279 m_pModule->JBig2_Free(gbContext); |
| 1280 m_pStream->alignByte(); | 1280 m_pStream->alignByte(); |
| 1281 m_pStream->offset(2); | 1281 m_pStream->offset(2); |
| 1282 } else { | 1282 } else { |
| 1283 pSegment->m_Result.pd = pPDD->decode_MMR(m_pStream, pPause); | 1283 pSegment->m_Result.pd = pPDD->decode_MMR(m_pStream, pPause); |
| 1284 if(pSegment->m_Result.pd == NULL) { | 1284 if(pSegment->m_Result.pd == NULL) { |
| 1285 nRet = JBIG2_ERROR_FETAL; | 1285 nRet = JBIG2_ERROR_FATAL; |
| 1286 goto failed; | 1286 goto failed; |
| 1287 } | 1287 } |
| 1288 m_pStream->alignByte(); | 1288 m_pStream->alignByte(); |
| 1289 } | 1289 } |
| 1290 delete pPDD; | 1290 delete pPDD; |
| 1291 return JBIG2_SUCCESS; | 1291 return JBIG2_SUCCESS; |
| 1292 failed: | 1292 failed: |
| 1293 delete pPDD; | 1293 delete pPDD; |
| 1294 return nRet; | 1294 return nRet; |
| 1295 } | 1295 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1319 } | 1319 } |
| 1320 pHRD->HBW = ri.width; | 1320 pHRD->HBW = ri.width; |
| 1321 pHRD->HBH = ri.height; | 1321 pHRD->HBH = ri.height; |
| 1322 pHRD->HMMR = cFlags & 0x01; | 1322 pHRD->HMMR = cFlags & 0x01; |
| 1323 pHRD->HTEMPLATE = (cFlags >> 1) & 0x03; | 1323 pHRD->HTEMPLATE = (cFlags >> 1) & 0x03; |
| 1324 pHRD->HENABLESKIP = (cFlags >> 3) & 0x01; | 1324 pHRD->HENABLESKIP = (cFlags >> 3) & 0x01; |
| 1325 pHRD->HCOMBOP = (JBig2ComposeOp)((cFlags >> 4) & 0x07); | 1325 pHRD->HCOMBOP = (JBig2ComposeOp)((cFlags >> 4) & 0x07); |
| 1326 pHRD->HDEFPIXEL = (cFlags >> 7) & 0x01; | 1326 pHRD->HDEFPIXEL = (cFlags >> 7) & 0x01; |
| 1327 if(pSegment->m_nReferred_to_segment_count != 1) { | 1327 if(pSegment->m_nReferred_to_segment_count != 1) { |
| 1328 m_pModule->JBig2_Error("halftone region segment : refered to segment cou
nt not equals 1"); | 1328 m_pModule->JBig2_Error("halftone region segment : refered to segment cou
nt not equals 1"); |
| 1329 nRet = JBIG2_ERROR_FETAL; | 1329 nRet = JBIG2_ERROR_FATAL; |
| 1330 goto failed; | 1330 goto failed; |
| 1331 } | 1331 } |
| 1332 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[0]); | 1332 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[0]); |
| 1333 if( (pSeg == NULL) || (pSeg->m_cFlags.s.type != 16)) { | 1333 if( (pSeg == NULL) || (pSeg->m_cFlags.s.type != 16)) { |
| 1334 m_pModule->JBig2_Error("halftone region segment : refered to segment is
not pattern dict"); | 1334 m_pModule->JBig2_Error("halftone region segment : refered to segment is
not pattern dict"); |
| 1335 nRet = JBIG2_ERROR_FETAL; | 1335 nRet = JBIG2_ERROR_FATAL; |
| 1336 goto failed; | 1336 goto failed; |
| 1337 } | 1337 } |
| 1338 pPatternDict = pSeg->m_Result.pd; | 1338 pPatternDict = pSeg->m_Result.pd; |
| 1339 if((pPatternDict == NULL) || (pPatternDict->NUMPATS == 0)) { | 1339 if((pPatternDict == NULL) || (pPatternDict->NUMPATS == 0)) { |
| 1340 m_pModule->JBig2_Error("halftone region segment : has no patterns input"
); | 1340 m_pModule->JBig2_Error("halftone region segment : has no patterns input"
); |
| 1341 nRet = JBIG2_ERROR_FETAL; | 1341 nRet = JBIG2_ERROR_FATAL; |
| 1342 goto failed; | 1342 goto failed; |
| 1343 } | 1343 } |
| 1344 pHRD->HNUMPATS = pPatternDict->NUMPATS; | 1344 pHRD->HNUMPATS = pPatternDict->NUMPATS; |
| 1345 pHRD->HPATS = pPatternDict->HDPATS; | 1345 pHRD->HPATS = pPatternDict->HDPATS; |
| 1346 pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth; | 1346 pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth; |
| 1347 pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight; | 1347 pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight; |
| 1348 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; | 1348 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; |
| 1349 if(pHRD->HMMR == 0) { | 1349 if(pHRD->HMMR == 0) { |
| 1350 dwTemp = pHRD->HTEMPLATE == 0 ? 65536 : pHRD->HTEMPLATE == 1 ? 8192 : 10
24; | 1350 dwTemp = pHRD->HTEMPLATE == 0 ? 65536 : pHRD->HTEMPLATE == 1 ? 8192 : 10
24; |
| 1351 gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCt
x), dwTemp); | 1351 gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCt
x), dwTemp); |
| 1352 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx)*dwTemp); | 1352 JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx)*dwTemp); |
| 1353 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); | 1353 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); |
| 1354 pSegment->m_Result.im = pHRD->decode_Arith(pArithDecoder, gbContext, pPa
use); | 1354 pSegment->m_Result.im = pHRD->decode_Arith(pArithDecoder, gbContext, pPa
use); |
| 1355 delete pArithDecoder; | 1355 delete pArithDecoder; |
| 1356 if(pSegment->m_Result.im == NULL) { | 1356 if(pSegment->m_Result.im == NULL) { |
| 1357 m_pModule->JBig2_Free(gbContext); | 1357 m_pModule->JBig2_Free(gbContext); |
| 1358 nRet = JBIG2_ERROR_FETAL; | 1358 nRet = JBIG2_ERROR_FATAL; |
| 1359 goto failed; | 1359 goto failed; |
| 1360 } | 1360 } |
| 1361 m_pModule->JBig2_Free(gbContext); | 1361 m_pModule->JBig2_Free(gbContext); |
| 1362 m_pStream->alignByte(); | 1362 m_pStream->alignByte(); |
| 1363 m_pStream->offset(2); | 1363 m_pStream->offset(2); |
| 1364 } else { | 1364 } else { |
| 1365 pSegment->m_Result.im = pHRD->decode_MMR(m_pStream, pPause); | 1365 pSegment->m_Result.im = pHRD->decode_MMR(m_pStream, pPause); |
| 1366 if(pSegment->m_Result.im == NULL) { | 1366 if(pSegment->m_Result.im == NULL) { |
| 1367 nRet = JBIG2_ERROR_FETAL; | 1367 nRet = JBIG2_ERROR_FATAL; |
| 1368 goto failed; | 1368 goto failed; |
| 1369 } | 1369 } |
| 1370 m_pStream->alignByte(); | 1370 m_pStream->alignByte(); |
| 1371 } | 1371 } |
| 1372 if(pSegment->m_cFlags.s.type != 20) { | 1372 if(pSegment->m_cFlags.s.type != 20) { |
| 1373 if(!m_bBufSpecified) { | 1373 if(!m_bBufSpecified) { |
| 1374 JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast(); | 1374 JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast(); |
| 1375 if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m
_nHeight)) { | 1375 if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m
_nHeight)) { |
| 1376 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1
: 0); | 1376 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1
: 0); |
| 1377 } | 1377 } |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1455 } | 1455 } |
| 1456 FX_RECT Rect = m_pGRD->GetReplaceRect(); | 1456 FX_RECT Rect = m_pGRD->GetReplaceRect(); |
| 1457 m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top, pSeg
ment->m_Result.im, (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect); | 1457 m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top, pSeg
ment->m_Result.im, (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect); |
| 1458 } | 1458 } |
| 1459 return JBIG2_SUCCESS; | 1459 return JBIG2_SUCCESS; |
| 1460 } else { | 1460 } else { |
| 1461 delete m_pArithDecoder; | 1461 delete m_pArithDecoder; |
| 1462 m_pArithDecoder = NULL; | 1462 m_pArithDecoder = NULL; |
| 1463 if(pSegment->m_Result.im == NULL) { | 1463 if(pSegment->m_Result.im == NULL) { |
| 1464 m_pModule->JBig2_Free(m_gbContext); | 1464 m_pModule->JBig2_Free(m_gbContext); |
| 1465 nRet = JBIG2_ERROR_FETAL; | 1465 nRet = JBIG2_ERROR_FATAL; |
| 1466 m_gbContext = NULL; | 1466 m_gbContext = NULL; |
| 1467 m_ProcessiveStatus = FXCODEC_STATUS_ERROR; | 1467 m_ProcessiveStatus = FXCODEC_STATUS_ERROR; |
| 1468 goto failed; | 1468 goto failed; |
| 1469 } | 1469 } |
| 1470 m_pModule->JBig2_Free(m_gbContext); | 1470 m_pModule->JBig2_Free(m_gbContext); |
| 1471 m_gbContext = NULL; | 1471 m_gbContext = NULL; |
| 1472 m_pStream->alignByte(); | 1472 m_pStream->alignByte(); |
| 1473 m_pStream->offset(2); | 1473 m_pStream->offset(2); |
| 1474 } | 1474 } |
| 1475 } else { | 1475 } else { |
| 1476 FXCODEC_STATUS status = m_pGRD->Start_decode_MMR(&pSegment->m_Result.im,
m_pStream, pPause); | 1476 FXCODEC_STATUS status = m_pGRD->Start_decode_MMR(&pSegment->m_Result.im,
m_pStream, pPause); |
| 1477 while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { | 1477 while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { |
| 1478 m_pGRD->Continue_decode(pPause); | 1478 m_pGRD->Continue_decode(pPause); |
| 1479 } | 1479 } |
| 1480 if(pSegment->m_Result.im == NULL) { | 1480 if(pSegment->m_Result.im == NULL) { |
| 1481 nRet = JBIG2_ERROR_FETAL; | 1481 nRet = JBIG2_ERROR_FATAL; |
| 1482 goto failed; | 1482 goto failed; |
| 1483 } | 1483 } |
| 1484 m_pStream->alignByte(); | 1484 m_pStream->alignByte(); |
| 1485 } | 1485 } |
| 1486 if(pSegment->m_cFlags.s.type != 36) { | 1486 if(pSegment->m_cFlags.s.type != 36) { |
| 1487 if(!m_bBufSpecified) { | 1487 if(!m_bBufSpecified) { |
| 1488 JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast(); | 1488 JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast(); |
| 1489 if ((pPageInfo->m_bIsStriped == 1) && (m_ri.y + m_ri.height > m_pPag
e->m_nHeight)) { | 1489 if ((pPageInfo->m_bIsStriped == 1) && (m_ri.y + m_ri.height > m_pPag
e->m_nHeight)) { |
| 1490 m_pPage->expand(m_ri.y + m_ri.height, (pPageInfo->m_cFlags & 4)
? 1 : 0); | 1490 m_pPage->expand(m_ri.y + m_ri.height, (pPageInfo->m_cFlags & 4)
? 1 : 0); |
| 1491 } | 1491 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1533 goto failed; | 1533 goto failed; |
| 1534 } | 1534 } |
| 1535 } | 1535 } |
| 1536 } | 1536 } |
| 1537 pSeg = NULL; | 1537 pSeg = NULL; |
| 1538 if(pSegment->m_nReferred_to_segment_count > 0) { | 1538 if(pSegment->m_nReferred_to_segment_count > 0) { |
| 1539 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { | 1539 for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) { |
| 1540 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[
0]); | 1540 pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[
0]); |
| 1541 if(pSeg == NULL) { | 1541 if(pSeg == NULL) { |
| 1542 m_pModule->JBig2_Error("generic refinement region segment : can'
t find refered to segments"); | 1542 m_pModule->JBig2_Error("generic refinement region segment : can'
t find refered to segments"); |
| 1543 nRet = JBIG2_ERROR_FETAL; | 1543 nRet = JBIG2_ERROR_FATAL; |
| 1544 goto failed; | 1544 goto failed; |
| 1545 } | 1545 } |
| 1546 if((pSeg->m_cFlags.s.type == 4) || (pSeg->m_cFlags.s.type == 20) | 1546 if((pSeg->m_cFlags.s.type == 4) || (pSeg->m_cFlags.s.type == 20) |
| 1547 || (pSeg->m_cFlags.s.type == 36) || (pSeg->m_cFlags.s.type =
= 40)) { | 1547 || (pSeg->m_cFlags.s.type == 36) || (pSeg->m_cFlags.s.type =
= 40)) { |
| 1548 break; | 1548 break; |
| 1549 } | 1549 } |
| 1550 } | 1550 } |
| 1551 if(i >= pSegment->m_nReferred_to_segment_count) { | 1551 if(i >= pSegment->m_nReferred_to_segment_count) { |
| 1552 m_pModule->JBig2_Error("generic refinement region segment : can't fi
nd refered to intermediate region"); | 1552 m_pModule->JBig2_Error("generic refinement region segment : can't fi
nd refered to intermediate region"); |
| 1553 nRet = JBIG2_ERROR_FETAL; | 1553 nRet = JBIG2_ERROR_FATAL; |
| 1554 goto failed; | 1554 goto failed; |
| 1555 } | 1555 } |
| 1556 pGRRD->GRREFERENCE = pSeg->m_Result.im; | 1556 pGRRD->GRREFERENCE = pSeg->m_Result.im; |
| 1557 } else { | 1557 } else { |
| 1558 pGRRD->GRREFERENCE = m_pPage; | 1558 pGRRD->GRREFERENCE = m_pPage; |
| 1559 } | 1559 } |
| 1560 pGRRD->GRREFERENCEDX = 0; | 1560 pGRRD->GRREFERENCEDX = 0; |
| 1561 pGRRD->GRREFERENCEDY = 0; | 1561 pGRRD->GRREFERENCEDY = 0; |
| 1562 dwTemp = pGRRD->GRTEMPLATE ? 1 << 10 : 1 << 13; | 1562 dwTemp = pGRRD->GRTEMPLATE ? 1 << 10 : 1 << 13; |
| 1563 grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx),
dwTemp); | 1563 grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx),
dwTemp); |
| 1564 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx)*dwTemp); | 1564 JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx)*dwTemp); |
| 1565 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); | 1565 JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream)); |
| 1566 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; | 1566 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; |
| 1567 pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext); | 1567 pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext); |
| 1568 delete pArithDecoder; | 1568 delete pArithDecoder; |
| 1569 if(pSegment->m_Result.im == NULL) { | 1569 if(pSegment->m_Result.im == NULL) { |
| 1570 m_pModule->JBig2_Free(grContext); | 1570 m_pModule->JBig2_Free(grContext); |
| 1571 nRet = JBIG2_ERROR_FETAL; | 1571 nRet = JBIG2_ERROR_FATAL; |
| 1572 goto failed; | 1572 goto failed; |
| 1573 } | 1573 } |
| 1574 m_pModule->JBig2_Free(grContext); | 1574 m_pModule->JBig2_Free(grContext); |
| 1575 m_pStream->alignByte(); | 1575 m_pStream->alignByte(); |
| 1576 m_pStream->offset(2); | 1576 m_pStream->offset(2); |
| 1577 if(pSegment->m_cFlags.s.type != 40) { | 1577 if(pSegment->m_cFlags.s.type != 40) { |
| 1578 if(!m_bBufSpecified) { | 1578 if(!m_bBufSpecified) { |
| 1579 JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast(); | 1579 JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast(); |
| 1580 if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m
_nHeight)) { | 1580 if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m
_nHeight)) { |
| 1581 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1
: 0); | 1581 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1
: 0); |
| 1582 } | 1582 } |
| 1583 } | 1583 } |
| 1584 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, (JBig2ComposeOp)
(ri.flags & 0x03)); | 1584 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, (JBig2ComposeOp)
(ri.flags & 0x03)); |
| 1585 delete pSegment->m_Result.im; | 1585 delete pSegment->m_Result.im; |
| 1586 pSegment->m_Result.im = NULL; | 1586 pSegment->m_Result.im = NULL; |
| 1587 } | 1587 } |
| 1588 delete pGRRD; | 1588 delete pGRRD; |
| 1589 return JBIG2_SUCCESS; | 1589 return JBIG2_SUCCESS; |
| 1590 failed: | 1590 failed: |
| 1591 delete pGRRD; | 1591 delete pGRRD; |
| 1592 return nRet; | 1592 return nRet; |
| 1593 } | 1593 } |
| 1594 FX_BOOL CJBig2_Context::parseTable(CJBig2_Segment *pSegment) | 1594 FX_BOOL CJBig2_Context::parseTable(CJBig2_Segment *pSegment) |
| 1595 { | 1595 { |
| 1596 pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER; | 1596 pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER; |
| 1597 JBIG2_ALLOC(pSegment->m_Result.ht, CJBig2_HuffmanTable(m_pStream)); | 1597 JBIG2_ALLOC(pSegment->m_Result.ht, CJBig2_HuffmanTable(m_pStream)); |
| 1598 if(!pSegment->m_Result.ht->isOK()) { | 1598 if(!pSegment->m_Result.ht->isOK()) { |
| 1599 delete pSegment->m_Result.ht; | 1599 delete pSegment->m_Result.ht; |
| 1600 pSegment->m_Result.ht = NULL; | 1600 pSegment->m_Result.ht = NULL; |
| 1601 return JBIG2_ERROR_FETAL; | 1601 return JBIG2_ERROR_FATAL; |
| 1602 } | 1602 } |
| 1603 m_pStream->alignByte(); | 1603 m_pStream->alignByte(); |
| 1604 return JBIG2_SUCCESS; | 1604 return JBIG2_SUCCESS; |
| 1605 } | 1605 } |
| 1606 int32_t CJBig2_Context::parseRegionInfo(JBig2RegionInfo *pRI) | 1606 int32_t CJBig2_Context::parseRegionInfo(JBig2RegionInfo *pRI) |
| 1607 { | 1607 { |
| 1608 if((m_pStream->readInteger((FX_DWORD*)&pRI->width) != 0) | 1608 if((m_pStream->readInteger((FX_DWORD*)&pRI->width) != 0) |
| 1609 || (m_pStream->readInteger((FX_DWORD*)&pRI->height) != 0) | 1609 || (m_pStream->readInteger((FX_DWORD*)&pRI->height) != 0) |
| 1610 || (m_pStream->readInteger((FX_DWORD*)&pRI->x) != 0) | 1610 || (m_pStream->readInteger((FX_DWORD*)&pRI->x) != 0) |
| 1611 || (m_pStream->readInteger((FX_DWORD*)&pRI->y) != 0) | 1611 || (m_pStream->readInteger((FX_DWORD*)&pRI->y) != 0) |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1754 SBSYMCODES[CURTEMP].code = CURCODE; | 1754 SBSYMCODES[CURTEMP].code = CURCODE; |
| 1755 CURCODE = CURCODE + 1; | 1755 CURCODE = CURCODE + 1; |
| 1756 } | 1756 } |
| 1757 CURTEMP = CURTEMP + 1; | 1757 CURTEMP = CURTEMP + 1; |
| 1758 } | 1758 } |
| 1759 CURLEN = CURLEN + 1; | 1759 CURLEN = CURLEN + 1; |
| 1760 } | 1760 } |
| 1761 m_pModule->JBig2_Free(LENCOUNT); | 1761 m_pModule->JBig2_Free(LENCOUNT); |
| 1762 m_pModule->JBig2_Free(FIRSTCODE); | 1762 m_pModule->JBig2_Free(FIRSTCODE); |
| 1763 } | 1763 } |
| OLD | NEW |