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

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

Issue 1547833002: Switch from nonstd::unique_ptr to std::unique_ptr. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: rebase Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_Context.h ('k') | core/src/fxcodec/jbig2/JBig2_GrdProc.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "core/src/fxcodec/jbig2/JBig2_Context.h" 7 #include "core/src/fxcodec/jbig2/JBig2_Context.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <list> 10 #include <list>
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 } 131 }
132 } 132 }
133 return JBIG2_SUCCESS; 133 return JBIG2_SUCCESS;
134 } 134 }
135 int32_t CJBig2_Context::decode_EmbedOrgnazation(IFX_Pause* pPause) { 135 int32_t CJBig2_Context::decode_EmbedOrgnazation(IFX_Pause* pPause) {
136 return decode_SquentialOrgnazation(pPause); 136 return decode_SquentialOrgnazation(pPause);
137 } 137 }
138 int32_t CJBig2_Context::decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause) { 138 int32_t CJBig2_Context::decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause) {
139 int32_t nRet; 139 int32_t nRet;
140 while (m_pStream->getByteLeft() > JBIG2_MIN_SEGMENT_SIZE) { 140 while (m_pStream->getByteLeft() > JBIG2_MIN_SEGMENT_SIZE) {
141 nonstd::unique_ptr<CJBig2_Segment> pSegment(new CJBig2_Segment); 141 std::unique_ptr<CJBig2_Segment> pSegment(new CJBig2_Segment);
142 nRet = parseSegmentHeader(pSegment.get()); 142 nRet = parseSegmentHeader(pSegment.get());
143 if (nRet != JBIG2_SUCCESS) { 143 if (nRet != JBIG2_SUCCESS) {
144 return nRet; 144 return nRet;
145 } else if (pSegment->m_cFlags.s.type == 51) { 145 } else if (pSegment->m_cFlags.s.type == 51) {
146 break; 146 break;
147 } 147 }
148 m_SegmentList.push_back(pSegment.release()); 148 m_SegmentList.push_back(pSegment.release());
149 if (pPause && m_pPause && pPause->NeedToPauseNow()) { 149 if (pPause && m_pPause && pPause->NeedToPauseNow()) {
150 m_PauseStep = 3; 150 m_PauseStep = 3;
151 m_ProcessingStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE; 151 m_ProcessingStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 return JBIG2_ERROR_FATAL; 370 return JBIG2_ERROR_FATAL;
371 return parseGenericRegion(pSegment, pPause); 371 return parseGenericRegion(pSegment, pPause);
372 case 40: 372 case 40:
373 case 42: 373 case 42:
374 case 43: 374 case 43:
375 if (!m_bInPage) 375 if (!m_bInPage)
376 return JBIG2_ERROR_FATAL; 376 return JBIG2_ERROR_FATAL;
377 return parseGenericRefinementRegion(pSegment); 377 return parseGenericRefinementRegion(pSegment);
378 case 48: { 378 case 48: {
379 FX_WORD wTemp; 379 FX_WORD wTemp;
380 nonstd::unique_ptr<JBig2PageInfo> pPageInfo(new JBig2PageInfo); 380 std::unique_ptr<JBig2PageInfo> pPageInfo(new JBig2PageInfo);
381 if (m_pStream->readInteger(&pPageInfo->m_dwWidth) != 0 || 381 if (m_pStream->readInteger(&pPageInfo->m_dwWidth) != 0 ||
382 m_pStream->readInteger(&pPageInfo->m_dwHeight) != 0 || 382 m_pStream->readInteger(&pPageInfo->m_dwHeight) != 0 ||
383 m_pStream->readInteger(&pPageInfo->m_dwResolutionX) != 0 || 383 m_pStream->readInteger(&pPageInfo->m_dwResolutionX) != 0 ||
384 m_pStream->readInteger(&pPageInfo->m_dwResolutionY) != 0 || 384 m_pStream->readInteger(&pPageInfo->m_dwResolutionY) != 0 ||
385 m_pStream->read1Byte(&pPageInfo->m_cFlags) != 0 || 385 m_pStream->read1Byte(&pPageInfo->m_cFlags) != 0 ||
386 m_pStream->readShortInteger(&wTemp) != 0) { 386 m_pStream->readShortInteger(&wTemp) != 0) {
387 return JBIG2_ERROR_TOO_SHORT; 387 return JBIG2_ERROR_TOO_SHORT;
388 } 388 }
389 pPageInfo->m_bIsStriped = !!(wTemp & 0x8000); 389 pPageInfo->m_bIsStriped = !!(wTemp & 0x8000);
390 pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff; 390 pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 } 429 }
430 return JBIG2_SUCCESS; 430 return JBIG2_SUCCESS;
431 } 431 }
432 432
433 int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment, 433 int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment,
434 IFX_Pause* pPause) { 434 IFX_Pause* pPause) {
435 FX_WORD wFlags; 435 FX_WORD wFlags;
436 if (m_pStream->readShortInteger(&wFlags) != 0) 436 if (m_pStream->readShortInteger(&wFlags) != 0)
437 return JBIG2_ERROR_TOO_SHORT; 437 return JBIG2_ERROR_TOO_SHORT;
438 438
439 nonstd::unique_ptr<CJBig2_SDDProc> pSymbolDictDecoder(new CJBig2_SDDProc); 439 std::unique_ptr<CJBig2_SDDProc> pSymbolDictDecoder(new CJBig2_SDDProc);
440 pSymbolDictDecoder->SDHUFF = wFlags & 0x0001; 440 pSymbolDictDecoder->SDHUFF = wFlags & 0x0001;
441 pSymbolDictDecoder->SDREFAGG = (wFlags >> 1) & 0x0001; 441 pSymbolDictDecoder->SDREFAGG = (wFlags >> 1) & 0x0001;
442 pSymbolDictDecoder->SDTEMPLATE = (wFlags >> 10) & 0x0003; 442 pSymbolDictDecoder->SDTEMPLATE = (wFlags >> 10) & 0x0003;
443 pSymbolDictDecoder->SDRTEMPLATE = (wFlags >> 12) & 0x0003; 443 pSymbolDictDecoder->SDRTEMPLATE = (wFlags >> 12) & 0x0003;
444 uint8_t cSDHUFFDH = (wFlags >> 2) & 0x0003; 444 uint8_t cSDHUFFDH = (wFlags >> 2) & 0x0003;
445 uint8_t cSDHUFFDW = (wFlags >> 4) & 0x0003; 445 uint8_t cSDHUFFDW = (wFlags >> 4) & 0x0003;
446 uint8_t cSDHUFFBMSIZE = (wFlags >> 6) & 0x0001; 446 uint8_t cSDHUFFBMSIZE = (wFlags >> 6) & 0x0001;
447 uint8_t cSDHUFFAGGINST = (wFlags >> 7) & 0x0001; 447 uint8_t cSDHUFFAGGINST = (wFlags >> 7) & 0x0001;
448 if (pSymbolDictDecoder->SDHUFF == 0) { 448 if (pSymbolDictDecoder->SDHUFF == 0) {
449 const FX_DWORD dwTemp = (pSymbolDictDecoder->SDTEMPLATE == 0) ? 8 : 2; 449 const FX_DWORD dwTemp = (pSymbolDictDecoder->SDTEMPLATE == 0) ? 8 : 2;
(...skipping 25 matching lines...) Expand all
475 pSymbolDictDecoder->SDNUMINSYMS = 0; 475 pSymbolDictDecoder->SDNUMINSYMS = 0;
476 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; ++i) { 476 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; ++i) {
477 CJBig2_Segment* pSeg = 477 CJBig2_Segment* pSeg =
478 findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); 478 findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
479 if (pSeg->m_cFlags.s.type == 0) { 479 if (pSeg->m_cFlags.s.type == 0) {
480 pSymbolDictDecoder->SDNUMINSYMS += pSeg->m_Result.sd->NumImages(); 480 pSymbolDictDecoder->SDNUMINSYMS += pSeg->m_Result.sd->NumImages();
481 pLRSeg = pSeg; 481 pLRSeg = pSeg;
482 } 482 }
483 } 483 }
484 484
485 nonstd::unique_ptr<CJBig2_Image*, FxFreeDeleter> SDINSYMS; 485 std::unique_ptr<CJBig2_Image*, FxFreeDeleter> SDINSYMS;
486 if (pSymbolDictDecoder->SDNUMINSYMS != 0) { 486 if (pSymbolDictDecoder->SDNUMINSYMS != 0) {
487 SDINSYMS.reset(FX_Alloc(CJBig2_Image*, pSymbolDictDecoder->SDNUMINSYMS)); 487 SDINSYMS.reset(FX_Alloc(CJBig2_Image*, pSymbolDictDecoder->SDNUMINSYMS));
488 FX_DWORD dwTemp = 0; 488 FX_DWORD dwTemp = 0;
489 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; ++i) { 489 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; ++i) {
490 CJBig2_Segment* pSeg = 490 CJBig2_Segment* pSeg =
491 findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); 491 findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
492 if (pSeg->m_cFlags.s.type == 0) { 492 if (pSeg->m_cFlags.s.type == 0) {
493 const CJBig2_SymbolDict& dict = *pSeg->m_Result.sd; 493 const CJBig2_SymbolDict& dict = *pSeg->m_Result.sd;
494 for (size_t j = 0; j < dict.NumImages(); ++j) 494 for (size_t j = 0; j < dict.NumImages(); ++j)
495 SDINSYMS.get()[dwTemp + j] = dict.GetImage(j); 495 SDINSYMS.get()[dwTemp + j] = dict.GetImage(j);
496 dwTemp += dict.NumImages(); 496 dwTemp += dict.NumImages();
497 } 497 }
498 } 498 }
499 } 499 }
500 pSymbolDictDecoder->SDINSYMS = SDINSYMS.get(); 500 pSymbolDictDecoder->SDINSYMS = SDINSYMS.get();
501 501
502 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B1; 502 std::unique_ptr<CJBig2_HuffmanTable> Table_B1;
503 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B2; 503 std::unique_ptr<CJBig2_HuffmanTable> Table_B2;
504 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B3; 504 std::unique_ptr<CJBig2_HuffmanTable> Table_B3;
505 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B4; 505 std::unique_ptr<CJBig2_HuffmanTable> Table_B4;
506 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B5; 506 std::unique_ptr<CJBig2_HuffmanTable> Table_B5;
507 if (pSymbolDictDecoder->SDHUFF == 1) { 507 if (pSymbolDictDecoder->SDHUFF == 1) {
508 if (cSDHUFFDH == 2 || cSDHUFFDW == 2) 508 if (cSDHUFFDH == 2 || cSDHUFFDW == 2)
509 return JBIG2_ERROR_FATAL; 509 return JBIG2_ERROR_FATAL;
510 510
511 int32_t nIndex = 0; 511 int32_t nIndex = 0;
512 if (cSDHUFFDH == 0) { 512 if (cSDHUFFDH == 0) {
513 Table_B4.reset(new CJBig2_HuffmanTable(HuffmanTable_B4, 513 Table_B4.reset(new CJBig2_HuffmanTable(HuffmanTable_B4,
514 FX_ArraySize(HuffmanTable_B4), 514 FX_ArraySize(HuffmanTable_B4),
515 HuffmanTable_HTOOB_B4)); 515 HuffmanTable_HTOOB_B4));
516 pSymbolDictDecoder->SDHUFFDH = Table_B4.get(); 516 pSymbolDictDecoder->SDHUFFDH = Table_B4.get();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 } 600 }
601 601
602 CJBig2_CacheKey key = 602 CJBig2_CacheKey key =
603 CJBig2_CacheKey(pSegment->m_dwObjNum, pSegment->m_dwDataOffset); 603 CJBig2_CacheKey(pSegment->m_dwObjNum, pSegment->m_dwDataOffset);
604 FX_BOOL cache_hit = false; 604 FX_BOOL cache_hit = false;
605 pSegment->m_nResultType = JBIG2_SYMBOL_DICT_POINTER; 605 pSegment->m_nResultType = JBIG2_SYMBOL_DICT_POINTER;
606 if (m_bIsGlobal && key.first != 0) { 606 if (m_bIsGlobal && key.first != 0) {
607 for (auto it = m_pSymbolDictCache->begin(); it != m_pSymbolDictCache->end(); 607 for (auto it = m_pSymbolDictCache->begin(); it != m_pSymbolDictCache->end();
608 ++it) { 608 ++it) {
609 if (it->first == key) { 609 if (it->first == key) {
610 nonstd::unique_ptr<CJBig2_SymbolDict> copy(it->second->DeepCopy()); 610 std::unique_ptr<CJBig2_SymbolDict> copy(it->second->DeepCopy());
611 pSegment->m_Result.sd = copy.release(); 611 pSegment->m_Result.sd = copy.release();
612 m_pSymbolDictCache->push_front(*it); 612 m_pSymbolDictCache->push_front(*it);
613 m_pSymbolDictCache->erase(it); 613 m_pSymbolDictCache->erase(it);
614 cache_hit = true; 614 cache_hit = true;
615 break; 615 break;
616 } 616 }
617 } 617 }
618 } 618 }
619 if (!cache_hit) { 619 if (!cache_hit) {
620 if (bUseGbContext) { 620 if (bUseGbContext) {
621 nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder( 621 std::unique_ptr<CJBig2_ArithDecoder> pArithDecoder(
622 new CJBig2_ArithDecoder(m_pStream.get())); 622 new CJBig2_ArithDecoder(m_pStream.get()));
623 pSegment->m_Result.sd = pSymbolDictDecoder->decode_Arith( 623 pSegment->m_Result.sd = pSymbolDictDecoder->decode_Arith(
624 pArithDecoder.get(), &gbContext, &grContext); 624 pArithDecoder.get(), &gbContext, &grContext);
625 if (!pSegment->m_Result.sd) 625 if (!pSegment->m_Result.sd)
626 return JBIG2_ERROR_FATAL; 626 return JBIG2_ERROR_FATAL;
627 627
628 m_pStream->alignByte(); 628 m_pStream->alignByte();
629 m_pStream->offset(2); 629 m_pStream->offset(2);
630 } else { 630 } else {
631 pSegment->m_Result.sd = pSymbolDictDecoder->decode_Huffman( 631 pSegment->m_Result.sd = pSymbolDictDecoder->decode_Huffman(
632 m_pStream.get(), &gbContext, &grContext, pPause); 632 m_pStream.get(), &gbContext, &grContext, pPause);
633 if (!pSegment->m_Result.sd) 633 if (!pSegment->m_Result.sd)
634 return JBIG2_ERROR_FATAL; 634 return JBIG2_ERROR_FATAL;
635 m_pStream->alignByte(); 635 m_pStream->alignByte();
636 } 636 }
637 if (m_bIsGlobal && kSymbolDictCacheMaxSize > 0) { 637 if (m_bIsGlobal && kSymbolDictCacheMaxSize > 0) {
638 nonstd::unique_ptr<CJBig2_SymbolDict> value = 638 std::unique_ptr<CJBig2_SymbolDict> value =
639 pSegment->m_Result.sd->DeepCopy(); 639 pSegment->m_Result.sd->DeepCopy();
640 while (m_pSymbolDictCache->size() >= kSymbolDictCacheMaxSize) { 640 while (m_pSymbolDictCache->size() >= kSymbolDictCacheMaxSize) {
641 delete m_pSymbolDictCache->back().second; 641 delete m_pSymbolDictCache->back().second;
642 m_pSymbolDictCache->pop_back(); 642 m_pSymbolDictCache->pop_back();
643 } 643 }
644 m_pSymbolDictCache->push_front(CJBig2_CachePair(key, value.release())); 644 m_pSymbolDictCache->push_front(CJBig2_CachePair(key, value.release()));
645 } 645 }
646 } 646 }
647 if (wFlags & 0x0200) { 647 if (wFlags & 0x0200) {
648 if (bUseGbContext) 648 if (bUseGbContext)
649 pSegment->m_Result.sd->SetGbContext(gbContext); 649 pSegment->m_Result.sd->SetGbContext(gbContext);
650 if (bUseGrContext) 650 if (bUseGrContext)
651 pSegment->m_Result.sd->SetGrContext(grContext); 651 pSegment->m_Result.sd->SetGrContext(grContext);
652 } 652 }
653 return JBIG2_SUCCESS; 653 return JBIG2_SUCCESS;
654 } 654 }
655 655
656 int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) { 656 int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
657 FX_WORD wFlags; 657 FX_WORD wFlags;
658 JBig2RegionInfo ri; 658 JBig2RegionInfo ri;
659 if (parseRegionInfo(&ri) != JBIG2_SUCCESS || 659 if (parseRegionInfo(&ri) != JBIG2_SUCCESS ||
660 m_pStream->readShortInteger(&wFlags) != 0) { 660 m_pStream->readShortInteger(&wFlags) != 0) {
661 return JBIG2_ERROR_TOO_SHORT; 661 return JBIG2_ERROR_TOO_SHORT;
662 } 662 }
663 663
664 nonstd::unique_ptr<CJBig2_TRDProc> pTRD(new CJBig2_TRDProc); 664 std::unique_ptr<CJBig2_TRDProc> pTRD(new CJBig2_TRDProc);
665 pTRD->SBW = ri.width; 665 pTRD->SBW = ri.width;
666 pTRD->SBH = ri.height; 666 pTRD->SBH = ri.height;
667 pTRD->SBHUFF = wFlags & 0x0001; 667 pTRD->SBHUFF = wFlags & 0x0001;
668 pTRD->SBREFINE = (wFlags >> 1) & 0x0001; 668 pTRD->SBREFINE = (wFlags >> 1) & 0x0001;
669 FX_DWORD dwTemp = (wFlags >> 2) & 0x0003; 669 FX_DWORD dwTemp = (wFlags >> 2) & 0x0003;
670 pTRD->SBSTRIPS = 1 << dwTemp; 670 pTRD->SBSTRIPS = 1 << dwTemp;
671 pTRD->REFCORNER = (JBig2Corner)((wFlags >> 4) & 0x0003); 671 pTRD->REFCORNER = (JBig2Corner)((wFlags >> 4) & 0x0003);
672 pTRD->TRANSPOSED = (wFlags >> 6) & 0x0001; 672 pTRD->TRANSPOSED = (wFlags >> 6) & 0x0001;
673 pTRD->SBCOMBOP = (JBig2ComposeOp)((wFlags >> 7) & 0x0003); 673 pTRD->SBCOMBOP = (JBig2ComposeOp)((wFlags >> 7) & 0x0003);
674 pTRD->SBDEFPIXEL = (wFlags >> 9) & 0x0001; 674 pTRD->SBDEFPIXEL = (wFlags >> 9) & 0x0001;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 715
716 pTRD->SBNUMSYMS = 0; 716 pTRD->SBNUMSYMS = 0;
717 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; ++i) { 717 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; ++i) {
718 CJBig2_Segment* pSeg = 718 CJBig2_Segment* pSeg =
719 findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); 719 findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
720 if (pSeg->m_cFlags.s.type == 0) { 720 if (pSeg->m_cFlags.s.type == 0) {
721 pTRD->SBNUMSYMS += pSeg->m_Result.sd->NumImages(); 721 pTRD->SBNUMSYMS += pSeg->m_Result.sd->NumImages();
722 } 722 }
723 } 723 }
724 724
725 nonstd::unique_ptr<CJBig2_Image*, FxFreeDeleter> SBSYMS; 725 std::unique_ptr<CJBig2_Image*, FxFreeDeleter> SBSYMS;
726 if (pTRD->SBNUMSYMS > 0) { 726 if (pTRD->SBNUMSYMS > 0) {
727 SBSYMS.reset(FX_Alloc(CJBig2_Image*, pTRD->SBNUMSYMS)); 727 SBSYMS.reset(FX_Alloc(CJBig2_Image*, pTRD->SBNUMSYMS));
728 dwTemp = 0; 728 dwTemp = 0;
729 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; ++i) { 729 for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; ++i) {
730 CJBig2_Segment* pSeg = 730 CJBig2_Segment* pSeg =
731 findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]); 731 findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
732 if (pSeg->m_cFlags.s.type == 0) { 732 if (pSeg->m_cFlags.s.type == 0) {
733 const CJBig2_SymbolDict& dict = *pSeg->m_Result.sd; 733 const CJBig2_SymbolDict& dict = *pSeg->m_Result.sd;
734 for (size_t j = 0; j < dict.NumImages(); ++j) 734 for (size_t j = 0; j < dict.NumImages(); ++j)
735 SBSYMS.get()[dwTemp + j] = dict.GetImage(j); 735 SBSYMS.get()[dwTemp + j] = dict.GetImage(j);
736 dwTemp += dict.NumImages(); 736 dwTemp += dict.NumImages();
737 } 737 }
738 } 738 }
739 pTRD->SBSYMS = SBSYMS.get(); 739 pTRD->SBSYMS = SBSYMS.get();
740 } else { 740 } else {
741 pTRD->SBSYMS = NULL; 741 pTRD->SBSYMS = NULL;
742 } 742 }
743 743
744 nonstd::unique_ptr<JBig2HuffmanCode, FxFreeDeleter> SBSYMCODES; 744 std::unique_ptr<JBig2HuffmanCode, FxFreeDeleter> SBSYMCODES;
745 if (pTRD->SBHUFF == 1) { 745 if (pTRD->SBHUFF == 1) {
746 SBSYMCODES.reset( 746 SBSYMCODES.reset(
747 decodeSymbolIDHuffmanTable(m_pStream.get(), pTRD->SBNUMSYMS)); 747 decodeSymbolIDHuffmanTable(m_pStream.get(), pTRD->SBNUMSYMS));
748 if (!SBSYMCODES) 748 if (!SBSYMCODES)
749 return JBIG2_ERROR_FATAL; 749 return JBIG2_ERROR_FATAL;
750 750
751 m_pStream->alignByte(); 751 m_pStream->alignByte();
752 pTRD->SBSYMCODES = SBSYMCODES.get(); 752 pTRD->SBSYMCODES = SBSYMCODES.get();
753 } else { 753 } else {
754 dwTemp = 0; 754 dwTemp = 0;
755 while ((FX_DWORD)(1 << dwTemp) < pTRD->SBNUMSYMS) { 755 while ((FX_DWORD)(1 << dwTemp) < pTRD->SBNUMSYMS) {
756 ++dwTemp; 756 ++dwTemp;
757 } 757 }
758 pTRD->SBSYMCODELEN = (uint8_t)dwTemp; 758 pTRD->SBSYMCODELEN = (uint8_t)dwTemp;
759 } 759 }
760 760
761 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B1; 761 std::unique_ptr<CJBig2_HuffmanTable> Table_B1;
762 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B6; 762 std::unique_ptr<CJBig2_HuffmanTable> Table_B6;
763 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B7; 763 std::unique_ptr<CJBig2_HuffmanTable> Table_B7;
764 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B8; 764 std::unique_ptr<CJBig2_HuffmanTable> Table_B8;
765 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B9; 765 std::unique_ptr<CJBig2_HuffmanTable> Table_B9;
766 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B10; 766 std::unique_ptr<CJBig2_HuffmanTable> Table_B10;
767 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B11; 767 std::unique_ptr<CJBig2_HuffmanTable> Table_B11;
768 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B12; 768 std::unique_ptr<CJBig2_HuffmanTable> Table_B12;
769 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B13; 769 std::unique_ptr<CJBig2_HuffmanTable> Table_B13;
770 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B14; 770 std::unique_ptr<CJBig2_HuffmanTable> Table_B14;
771 nonstd::unique_ptr<CJBig2_HuffmanTable> Table_B15; 771 std::unique_ptr<CJBig2_HuffmanTable> Table_B15;
772 if (pTRD->SBHUFF == 1) { 772 if (pTRD->SBHUFF == 1) {
773 if (cSBHUFFFS == 2 || cSBHUFFRDW == 2 || cSBHUFFRDH == 2 || 773 if (cSBHUFFFS == 2 || cSBHUFFRDW == 2 || cSBHUFFRDH == 2 ||
774 cSBHUFFRDX == 2 || cSBHUFFRDY == 2) { 774 cSBHUFFRDX == 2 || cSBHUFFRDY == 2) {
775 return JBIG2_ERROR_FATAL; 775 return JBIG2_ERROR_FATAL;
776 } 776 }
777 int32_t nIndex = 0; 777 int32_t nIndex = 0;
778 if (cSBHUFFFS == 0) { 778 if (cSBHUFFFS == 0) {
779 Table_B6.reset(new CJBig2_HuffmanTable(HuffmanTable_B6, 779 Table_B6.reset(new CJBig2_HuffmanTable(HuffmanTable_B6,
780 FX_ArraySize(HuffmanTable_B6), 780 FX_ArraySize(HuffmanTable_B6),
781 HuffmanTable_HTOOB_B6)); 781 HuffmanTable_HTOOB_B6));
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 HuffmanTable_HTOOB_B1)); 922 HuffmanTable_HTOOB_B1));
923 pTRD->SBHUFFRSIZE = Table_B1.get(); 923 pTRD->SBHUFFRSIZE = Table_B1.get();
924 } else { 924 } else {
925 CJBig2_Segment* pSeg = 925 CJBig2_Segment* pSeg =
926 findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++); 926 findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
927 if (!pSeg) 927 if (!pSeg)
928 return JBIG2_ERROR_FATAL; 928 return JBIG2_ERROR_FATAL;
929 pTRD->SBHUFFRSIZE = pSeg->m_Result.ht; 929 pTRD->SBHUFFRSIZE = pSeg->m_Result.ht;
930 } 930 }
931 } 931 }
932 nonstd::unique_ptr<JBig2ArithCtx, FxFreeDeleter> grContext; 932 std::unique_ptr<JBig2ArithCtx, FxFreeDeleter> grContext;
933 if (pTRD->SBREFINE == 1) { 933 if (pTRD->SBREFINE == 1) {
934 const size_t size = GetRefAggContextSize(pTRD->SBRTEMPLATE); 934 const size_t size = GetRefAggContextSize(pTRD->SBRTEMPLATE);
935 grContext.reset(FX_Alloc(JBig2ArithCtx, size)); 935 grContext.reset(FX_Alloc(JBig2ArithCtx, size));
936 JBIG2_memset(grContext.get(), 0, sizeof(JBig2ArithCtx) * size); 936 JBIG2_memset(grContext.get(), 0, sizeof(JBig2ArithCtx) * size);
937 } 937 }
938 if (pTRD->SBHUFF == 0) { 938 if (pTRD->SBHUFF == 0) {
939 nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder( 939 std::unique_ptr<CJBig2_ArithDecoder> pArithDecoder(
940 new CJBig2_ArithDecoder(m_pStream.get())); 940 new CJBig2_ArithDecoder(m_pStream.get()));
941 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 941 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
942 pSegment->m_Result.im = 942 pSegment->m_Result.im =
943 pTRD->decode_Arith(pArithDecoder.get(), grContext.get()); 943 pTRD->decode_Arith(pArithDecoder.get(), grContext.get());
944 if (!pSegment->m_Result.im) 944 if (!pSegment->m_Result.im)
945 return JBIG2_ERROR_FATAL; 945 return JBIG2_ERROR_FATAL;
946 m_pStream->alignByte(); 946 m_pStream->alignByte();
947 m_pStream->offset(2); 947 m_pStream->offset(2);
948 } else { 948 } else {
949 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 949 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
(...skipping 15 matching lines...) Expand all
965 (JBig2ComposeOp)(ri.flags & 0x03)); 965 (JBig2ComposeOp)(ri.flags & 0x03));
966 delete pSegment->m_Result.im; 966 delete pSegment->m_Result.im;
967 pSegment->m_Result.im = NULL; 967 pSegment->m_Result.im = NULL;
968 } 968 }
969 return JBIG2_SUCCESS; 969 return JBIG2_SUCCESS;
970 } 970 }
971 971
972 int32_t CJBig2_Context::parsePatternDict(CJBig2_Segment* pSegment, 972 int32_t CJBig2_Context::parsePatternDict(CJBig2_Segment* pSegment,
973 IFX_Pause* pPause) { 973 IFX_Pause* pPause) {
974 uint8_t cFlags; 974 uint8_t cFlags;
975 nonstd::unique_ptr<CJBig2_PDDProc> pPDD(new CJBig2_PDDProc); 975 std::unique_ptr<CJBig2_PDDProc> pPDD(new CJBig2_PDDProc);
976 if (m_pStream->read1Byte(&cFlags) != 0 || 976 if (m_pStream->read1Byte(&cFlags) != 0 ||
977 m_pStream->read1Byte(&pPDD->HDPW) != 0 || 977 m_pStream->read1Byte(&pPDD->HDPW) != 0 ||
978 m_pStream->read1Byte(&pPDD->HDPH) != 0 || 978 m_pStream->read1Byte(&pPDD->HDPH) != 0 ||
979 m_pStream->readInteger(&pPDD->GRAYMAX) != 0) { 979 m_pStream->readInteger(&pPDD->GRAYMAX) != 0) {
980 return JBIG2_ERROR_TOO_SHORT; 980 return JBIG2_ERROR_TOO_SHORT;
981 } 981 }
982 if (pPDD->GRAYMAX > JBIG2_MAX_PATTERN_INDEX) 982 if (pPDD->GRAYMAX > JBIG2_MAX_PATTERN_INDEX)
983 return JBIG2_ERROR_LIMIT; 983 return JBIG2_ERROR_LIMIT;
984 984
985 pPDD->HDMMR = cFlags & 0x01; 985 pPDD->HDMMR = cFlags & 0x01;
986 pPDD->HDTEMPLATE = (cFlags >> 1) & 0x03; 986 pPDD->HDTEMPLATE = (cFlags >> 1) & 0x03;
987 pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER; 987 pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER;
988 if (pPDD->HDMMR == 0) { 988 if (pPDD->HDMMR == 0) {
989 const size_t size = GetHuffContextSize(pPDD->HDTEMPLATE); 989 const size_t size = GetHuffContextSize(pPDD->HDTEMPLATE);
990 nonstd::unique_ptr<JBig2ArithCtx, FxFreeDeleter> gbContext( 990 std::unique_ptr<JBig2ArithCtx, FxFreeDeleter> gbContext(
991 FX_Alloc(JBig2ArithCtx, size)); 991 FX_Alloc(JBig2ArithCtx, size));
992 JBIG2_memset(gbContext.get(), 0, sizeof(JBig2ArithCtx) * size); 992 JBIG2_memset(gbContext.get(), 0, sizeof(JBig2ArithCtx) * size);
993 nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder( 993 std::unique_ptr<CJBig2_ArithDecoder> pArithDecoder(
994 new CJBig2_ArithDecoder(m_pStream.get())); 994 new CJBig2_ArithDecoder(m_pStream.get()));
995 pSegment->m_Result.pd = 995 pSegment->m_Result.pd =
996 pPDD->decode_Arith(pArithDecoder.get(), gbContext.get(), pPause); 996 pPDD->decode_Arith(pArithDecoder.get(), gbContext.get(), pPause);
997 if (!pSegment->m_Result.pd) 997 if (!pSegment->m_Result.pd)
998 return JBIG2_ERROR_FATAL; 998 return JBIG2_ERROR_FATAL;
999 999
1000 m_pStream->alignByte(); 1000 m_pStream->alignByte();
1001 m_pStream->offset(2); 1001 m_pStream->offset(2);
1002 } else { 1002 } else {
1003 pSegment->m_Result.pd = pPDD->decode_MMR(m_pStream.get(), pPause); 1003 pSegment->m_Result.pd = pPDD->decode_MMR(m_pStream.get(), pPause);
1004 if (!pSegment->m_Result.pd) 1004 if (!pSegment->m_Result.pd)
1005 return JBIG2_ERROR_FATAL; 1005 return JBIG2_ERROR_FATAL;
1006 m_pStream->alignByte(); 1006 m_pStream->alignByte();
1007 } 1007 }
1008 return JBIG2_SUCCESS; 1008 return JBIG2_SUCCESS;
1009 } 1009 }
1010 1010
1011 int32_t CJBig2_Context::parseHalftoneRegion(CJBig2_Segment* pSegment, 1011 int32_t CJBig2_Context::parseHalftoneRegion(CJBig2_Segment* pSegment,
1012 IFX_Pause* pPause) { 1012 IFX_Pause* pPause) {
1013 uint8_t cFlags; 1013 uint8_t cFlags;
1014 JBig2RegionInfo ri; 1014 JBig2RegionInfo ri;
1015 nonstd::unique_ptr<CJBig2_HTRDProc> pHRD(new CJBig2_HTRDProc); 1015 std::unique_ptr<CJBig2_HTRDProc> pHRD(new CJBig2_HTRDProc);
1016 if (parseRegionInfo(&ri) != JBIG2_SUCCESS || 1016 if (parseRegionInfo(&ri) != JBIG2_SUCCESS ||
1017 m_pStream->read1Byte(&cFlags) != 0 || 1017 m_pStream->read1Byte(&cFlags) != 0 ||
1018 m_pStream->readInteger(&pHRD->HGW) != 0 || 1018 m_pStream->readInteger(&pHRD->HGW) != 0 ||
1019 m_pStream->readInteger(&pHRD->HGH) != 0 || 1019 m_pStream->readInteger(&pHRD->HGH) != 0 ||
1020 m_pStream->readInteger((FX_DWORD*)&pHRD->HGX) != 0 || 1020 m_pStream->readInteger((FX_DWORD*)&pHRD->HGX) != 0 ||
1021 m_pStream->readInteger((FX_DWORD*)&pHRD->HGY) != 0 || 1021 m_pStream->readInteger((FX_DWORD*)&pHRD->HGY) != 0 ||
1022 m_pStream->readShortInteger(&pHRD->HRX) != 0 || 1022 m_pStream->readShortInteger(&pHRD->HRX) != 0 ||
1023 m_pStream->readShortInteger(&pHRD->HRY) != 0) { 1023 m_pStream->readShortInteger(&pHRD->HRY) != 0) {
1024 return JBIG2_ERROR_TOO_SHORT; 1024 return JBIG2_ERROR_TOO_SHORT;
1025 } 1025 }
(...skipping 20 matching lines...) Expand all
1046 if (!pPatternDict || (pPatternDict->NUMPATS == 0)) 1046 if (!pPatternDict || (pPatternDict->NUMPATS == 0))
1047 return JBIG2_ERROR_FATAL; 1047 return JBIG2_ERROR_FATAL;
1048 1048
1049 pHRD->HNUMPATS = pPatternDict->NUMPATS; 1049 pHRD->HNUMPATS = pPatternDict->NUMPATS;
1050 pHRD->HPATS = pPatternDict->HDPATS; 1050 pHRD->HPATS = pPatternDict->HDPATS;
1051 pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth; 1051 pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth;
1052 pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight; 1052 pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight;
1053 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 1053 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
1054 if (pHRD->HMMR == 0) { 1054 if (pHRD->HMMR == 0) {
1055 const size_t size = GetHuffContextSize(pHRD->HTEMPLATE); 1055 const size_t size = GetHuffContextSize(pHRD->HTEMPLATE);
1056 nonstd::unique_ptr<JBig2ArithCtx, FxFreeDeleter> gbContext( 1056 std::unique_ptr<JBig2ArithCtx, FxFreeDeleter> gbContext(
1057 FX_Alloc(JBig2ArithCtx, size)); 1057 FX_Alloc(JBig2ArithCtx, size));
1058 JBIG2_memset(gbContext.get(), 0, sizeof(JBig2ArithCtx) * size); 1058 JBIG2_memset(gbContext.get(), 0, sizeof(JBig2ArithCtx) * size);
1059 nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder( 1059 std::unique_ptr<CJBig2_ArithDecoder> pArithDecoder(
1060 new CJBig2_ArithDecoder(m_pStream.get())); 1060 new CJBig2_ArithDecoder(m_pStream.get()));
1061 pSegment->m_Result.im = 1061 pSegment->m_Result.im =
1062 pHRD->decode_Arith(pArithDecoder.get(), gbContext.get(), pPause); 1062 pHRD->decode_Arith(pArithDecoder.get(), gbContext.get(), pPause);
1063 if (!pSegment->m_Result.im) 1063 if (!pSegment->m_Result.im)
1064 return JBIG2_ERROR_FATAL; 1064 return JBIG2_ERROR_FATAL;
1065 1065
1066 m_pStream->alignByte(); 1066 m_pStream->alignByte();
1067 m_pStream->offset(2); 1067 m_pStream->offset(2);
1068 } else { 1068 } else {
1069 pSegment->m_Result.im = pHRD->decode_MMR(m_pStream.get(), pPause); 1069 pSegment->m_Result.im = pHRD->decode_MMR(m_pStream.get(), pPause);
(...skipping 13 matching lines...) Expand all
1083 (JBig2ComposeOp)(ri.flags & 0x03)); 1083 (JBig2ComposeOp)(ri.flags & 0x03));
1084 delete pSegment->m_Result.im; 1084 delete pSegment->m_Result.im;
1085 pSegment->m_Result.im = NULL; 1085 pSegment->m_Result.im = NULL;
1086 } 1086 }
1087 return JBIG2_SUCCESS; 1087 return JBIG2_SUCCESS;
1088 } 1088 }
1089 1089
1090 int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment* pSegment, 1090 int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment* pSegment,
1091 IFX_Pause* pPause) { 1091 IFX_Pause* pPause) {
1092 if (!m_pGRD) { 1092 if (!m_pGRD) {
1093 nonstd::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc); 1093 std::unique_ptr<CJBig2_GRDProc> pGRD(new CJBig2_GRDProc);
1094 uint8_t cFlags; 1094 uint8_t cFlags;
1095 if (parseRegionInfo(&m_ri) != JBIG2_SUCCESS || 1095 if (parseRegionInfo(&m_ri) != JBIG2_SUCCESS ||
1096 m_pStream->read1Byte(&cFlags) != 0) { 1096 m_pStream->read1Byte(&cFlags) != 0) {
1097 return JBIG2_ERROR_TOO_SHORT; 1097 return JBIG2_ERROR_TOO_SHORT;
1098 } 1098 }
1099 if (m_ri.height < 0 || m_ri.width < 0) 1099 if (m_ri.height < 0 || m_ri.width < 0)
1100 return JBIG2_FAILED; 1100 return JBIG2_FAILED;
1101 1101
1102 pGRD->GBW = m_ri.width; 1102 pGRD->GBW = m_ri.width;
1103 pGRD->GBH = m_ri.height; 1103 pGRD->GBH = m_ri.height;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 return JBIG2_SUCCESS; 1196 return JBIG2_SUCCESS;
1197 } 1197 }
1198 1198
1199 int32_t CJBig2_Context::parseGenericRefinementRegion(CJBig2_Segment* pSegment) { 1199 int32_t CJBig2_Context::parseGenericRefinementRegion(CJBig2_Segment* pSegment) {
1200 JBig2RegionInfo ri; 1200 JBig2RegionInfo ri;
1201 uint8_t cFlags; 1201 uint8_t cFlags;
1202 if (parseRegionInfo(&ri) != JBIG2_SUCCESS || 1202 if (parseRegionInfo(&ri) != JBIG2_SUCCESS ||
1203 m_pStream->read1Byte(&cFlags) != 0) { 1203 m_pStream->read1Byte(&cFlags) != 0) {
1204 return JBIG2_ERROR_TOO_SHORT; 1204 return JBIG2_ERROR_TOO_SHORT;
1205 } 1205 }
1206 nonstd::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc); 1206 std::unique_ptr<CJBig2_GRRDProc> pGRRD(new CJBig2_GRRDProc);
1207 pGRRD->GRW = ri.width; 1207 pGRRD->GRW = ri.width;
1208 pGRRD->GRH = ri.height; 1208 pGRRD->GRH = ri.height;
1209 pGRRD->GRTEMPLATE = cFlags & 0x01; 1209 pGRRD->GRTEMPLATE = cFlags & 0x01;
1210 pGRRD->TPGRON = (cFlags >> 1) & 0x01; 1210 pGRRD->TPGRON = (cFlags >> 1) & 0x01;
1211 if (pGRRD->GRTEMPLATE == 0) { 1211 if (pGRRD->GRTEMPLATE == 0) {
1212 for (int32_t i = 0; i < 4; ++i) { 1212 for (int32_t i = 0; i < 4; ++i) {
1213 if (m_pStream->read1Byte((uint8_t*)&pGRRD->GRAT[i]) != 0) 1213 if (m_pStream->read1Byte((uint8_t*)&pGRRD->GRAT[i]) != 0)
1214 return JBIG2_ERROR_TOO_SHORT; 1214 return JBIG2_ERROR_TOO_SHORT;
1215 } 1215 }
1216 } 1216 }
(...skipping 13 matching lines...) Expand all
1230 if (i >= pSegment->m_nReferred_to_segment_count) 1230 if (i >= pSegment->m_nReferred_to_segment_count)
1231 return JBIG2_ERROR_FATAL; 1231 return JBIG2_ERROR_FATAL;
1232 1232
1233 pGRRD->GRREFERENCE = pSeg->m_Result.im; 1233 pGRRD->GRREFERENCE = pSeg->m_Result.im;
1234 } else { 1234 } else {
1235 pGRRD->GRREFERENCE = m_pPage.get(); 1235 pGRRD->GRREFERENCE = m_pPage.get();
1236 } 1236 }
1237 pGRRD->GRREFERENCEDX = 0; 1237 pGRRD->GRREFERENCEDX = 0;
1238 pGRRD->GRREFERENCEDY = 0; 1238 pGRRD->GRREFERENCEDY = 0;
1239 const size_t size = GetRefAggContextSize(pGRRD->GRTEMPLATE); 1239 const size_t size = GetRefAggContextSize(pGRRD->GRTEMPLATE);
1240 nonstd::unique_ptr<JBig2ArithCtx, FxFreeDeleter> grContext( 1240 std::unique_ptr<JBig2ArithCtx, FxFreeDeleter> grContext(
1241 FX_Alloc(JBig2ArithCtx, size)); 1241 FX_Alloc(JBig2ArithCtx, size));
1242 JBIG2_memset(grContext.get(), 0, sizeof(JBig2ArithCtx) * size); 1242 JBIG2_memset(grContext.get(), 0, sizeof(JBig2ArithCtx) * size);
1243 nonstd::unique_ptr<CJBig2_ArithDecoder> pArithDecoder( 1243 std::unique_ptr<CJBig2_ArithDecoder> pArithDecoder(
1244 new CJBig2_ArithDecoder(m_pStream.get())); 1244 new CJBig2_ArithDecoder(m_pStream.get()));
1245 pSegment->m_nResultType = JBIG2_IMAGE_POINTER; 1245 pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
1246 pSegment->m_Result.im = pGRRD->decode(pArithDecoder.get(), grContext.get()); 1246 pSegment->m_Result.im = pGRRD->decode(pArithDecoder.get(), grContext.get());
1247 if (!pSegment->m_Result.im) 1247 if (!pSegment->m_Result.im)
1248 return JBIG2_ERROR_FATAL; 1248 return JBIG2_ERROR_FATAL;
1249 1249
1250 m_pStream->alignByte(); 1250 m_pStream->alignByte();
1251 m_pStream->offset(2); 1251 m_pStream->offset(2);
1252 if (pSegment->m_cFlags.s.type != 40) { 1252 if (pSegment->m_cFlags.s.type != 40) {
1253 if (!m_bBufSpecified) { 1253 if (!m_bBufSpecified) {
1254 JBig2PageInfo* pPageInfo = m_PageInfoList.back(); 1254 JBig2PageInfo* pPageInfo = m_PageInfoList.back();
1255 if ((pPageInfo->m_bIsStriped == 1) && 1255 if ((pPageInfo->m_bIsStriped == 1) &&
1256 (ri.y + ri.height > m_pPage->m_nHeight)) { 1256 (ri.y + ri.height > m_pPage->m_nHeight)) {
1257 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0); 1257 m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
1258 } 1258 }
1259 } 1259 }
1260 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, 1260 m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im,
1261 (JBig2ComposeOp)(ri.flags & 0x03)); 1261 (JBig2ComposeOp)(ri.flags & 0x03));
1262 delete pSegment->m_Result.im; 1262 delete pSegment->m_Result.im;
1263 pSegment->m_Result.im = NULL; 1263 pSegment->m_Result.im = NULL;
1264 } 1264 }
1265 return JBIG2_SUCCESS; 1265 return JBIG2_SUCCESS;
1266 } 1266 }
1267 1267
1268 int32_t CJBig2_Context::parseTable(CJBig2_Segment* pSegment) { 1268 int32_t CJBig2_Context::parseTable(CJBig2_Segment* pSegment) {
1269 pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER; 1269 pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER;
1270 pSegment->m_Result.ht = nullptr; 1270 pSegment->m_Result.ht = nullptr;
1271 nonstd::unique_ptr<CJBig2_HuffmanTable> pHuff( 1271 std::unique_ptr<CJBig2_HuffmanTable> pHuff(
1272 new CJBig2_HuffmanTable(m_pStream.get())); 1272 new CJBig2_HuffmanTable(m_pStream.get()));
1273 if (!pHuff->IsOK()) 1273 if (!pHuff->IsOK())
1274 return JBIG2_ERROR_FATAL; 1274 return JBIG2_ERROR_FATAL;
1275 1275
1276 pSegment->m_Result.ht = pHuff.release(); 1276 pSegment->m_Result.ht = pHuff.release();
1277 m_pStream->alignByte(); 1277 m_pStream->alignByte();
1278 return JBIG2_SUCCESS; 1278 return JBIG2_SUCCESS;
1279 } 1279 }
1280 1280
1281 int32_t CJBig2_Context::parseRegionInfo(JBig2RegionInfo* pRI) { 1281 int32_t CJBig2_Context::parseRegionInfo(JBig2RegionInfo* pRI) {
(...skipping 12 matching lines...) Expand all
1294 FX_DWORD SBNUMSYMS) { 1294 FX_DWORD SBNUMSYMS) {
1295 const size_t kRunCodesSize = 35; 1295 const size_t kRunCodesSize = 35;
1296 int32_t runcodes[kRunCodesSize]; 1296 int32_t runcodes[kRunCodesSize];
1297 int32_t runcodes_len[kRunCodesSize]; 1297 int32_t runcodes_len[kRunCodesSize];
1298 for (int32_t i = 0; i < kRunCodesSize; ++i) { 1298 for (int32_t i = 0; i < kRunCodesSize; ++i) {
1299 if (pStream->readNBits(4, &runcodes_len[i]) != 0) 1299 if (pStream->readNBits(4, &runcodes_len[i]) != 0)
1300 return nullptr; 1300 return nullptr;
1301 } 1301 }
1302 huffman_assign_code(runcodes, runcodes_len, kRunCodesSize); 1302 huffman_assign_code(runcodes, runcodes_len, kRunCodesSize);
1303 1303
1304 nonstd::unique_ptr<JBig2HuffmanCode, FxFreeDeleter> SBSYMCODES( 1304 std::unique_ptr<JBig2HuffmanCode, FxFreeDeleter> SBSYMCODES(
1305 FX_Alloc(JBig2HuffmanCode, SBNUMSYMS)); 1305 FX_Alloc(JBig2HuffmanCode, SBNUMSYMS));
1306 int32_t run; 1306 int32_t run;
1307 int32_t i = 0; 1307 int32_t i = 0;
1308 while (i < (int)SBNUMSYMS) { 1308 while (i < (int)SBNUMSYMS) {
1309 int32_t j; 1309 int32_t j;
1310 int32_t nVal = 0; 1310 int32_t nVal = 0;
1311 int32_t nBits = 0; 1311 int32_t nBits = 0;
1312 FX_DWORD nTemp; 1312 FX_DWORD nTemp;
1313 while (true) { 1313 while (true) {
1314 if (pStream->read1Bit(&nTemp) != 0) 1314 if (pStream->read1Bit(&nTemp) != 0)
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1426 SBSYMCODES[CURTEMP].code = CURCODE; 1426 SBSYMCODES[CURTEMP].code = CURCODE;
1427 CURCODE = CURCODE + 1; 1427 CURCODE = CURCODE + 1;
1428 } 1428 }
1429 CURTEMP = CURTEMP + 1; 1429 CURTEMP = CURTEMP + 1;
1430 } 1430 }
1431 CURLEN = CURLEN + 1; 1431 CURLEN = CURLEN + 1;
1432 } 1432 }
1433 FX_Free(LENCOUNT); 1433 FX_Free(LENCOUNT);
1434 FX_Free(FIRSTCODE); 1434 FX_Free(FIRSTCODE);
1435 } 1435 }
OLDNEW
« no previous file with comments | « core/src/fxcodec/jbig2/JBig2_Context.h ('k') | core/src/fxcodec/jbig2/JBig2_GrdProc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698