1 // Copyright 2015 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_SRC_FXCODEC_JBIG2_JBIG2_GRDPROC_H_ 8 #define CORE_SRC_FXCODEC_JBIG2_JBIG2_GRDPROC_H_ 9 10 #include "core/include/fxcodec/fx_codec_def.h" 11 #include "core/include/fxcrt/fx_coordinates.h" 12 #include "core/include/fxcrt/fx_system.h" 13 14 class CJBig2_ArithDecoder; 15 class CJBig2_BitStream; 16 class CJBig2_Image; 17 class IFX_Pause; 18 struct JBig2ArithCtx; 19 20 class CJBig2_GRDProc { 21 public: 22 CJBig2_GRDProc(); 23 24 CJBig2_Image* decode_Arith(CJBig2_ArithDecoder* pArithDecoder, 25 JBig2ArithCtx* gbContext); 26 27 FXCODEC_STATUS Start_decode_Arith(CJBig2_Image** pImage, 28 CJBig2_ArithDecoder* pArithDecoder, 29 JBig2ArithCtx* gbContext, 30 IFX_Pause* pPause); 31 FXCODEC_STATUS Start_decode_MMR(CJBig2_Image** pImage, 32 CJBig2_BitStream* pStream, 33 IFX_Pause* pPause); 34 FXCODEC_STATUS Continue_decode(IFX_Pause* pPause); GetReplaceRect()35 FX_RECT GetReplaceRect() const { return m_ReplaceRect; } 36 37 FX_BOOL MMR; 38 FX_DWORD GBW; 39 FX_DWORD GBH; 40 uint8_t GBTEMPLATE; 41 FX_BOOL TPGDON; 42 FX_BOOL USESKIP; 43 CJBig2_Image* SKIP; 44 int8_t GBAT[8]; 45 46 private: 47 bool UseTemplate0Opt3() const; 48 bool UseTemplate1Opt3() const; 49 bool UseTemplate23Opt3() const; 50 51 FXCODEC_STATUS decode_Arith(IFX_Pause* pPause); 52 FXCODEC_STATUS decode_Arith_Template0_opt3(CJBig2_Image* pImage, 53 CJBig2_ArithDecoder* pArithDecoder, 54 JBig2ArithCtx* gbContext, 55 IFX_Pause* pPause); 56 FXCODEC_STATUS decode_Arith_Template0_unopt( 57 CJBig2_Image* pImage, 58 CJBig2_ArithDecoder* pArithDecoder, 59 JBig2ArithCtx* gbContext, 60 IFX_Pause* pPause); 61 FXCODEC_STATUS decode_Arith_Template1_opt3(CJBig2_Image* pImage, 62 CJBig2_ArithDecoder* pArithDecoder, 63 JBig2ArithCtx* gbContext, 64 IFX_Pause* pPause); 65 FXCODEC_STATUS decode_Arith_Template1_unopt( 66 CJBig2_Image* pImage, 67 CJBig2_ArithDecoder* pArithDecoder, 68 JBig2ArithCtx* gbContext, 69 IFX_Pause* pPause); 70 FXCODEC_STATUS decode_Arith_Template2_opt3(CJBig2_Image* pImage, 71 CJBig2_ArithDecoder* pArithDecoder, 72 JBig2ArithCtx* gbContext, 73 IFX_Pause* pPause); 74 FXCODEC_STATUS decode_Arith_Template2_unopt( 75 CJBig2_Image* pImage, 76 CJBig2_ArithDecoder* pArithDecoder, 77 JBig2ArithCtx* gbContext, 78 IFX_Pause* pPause); 79 FXCODEC_STATUS decode_Arith_Template3_opt3(CJBig2_Image* pImage, 80 CJBig2_ArithDecoder* pArithDecoder, 81 JBig2ArithCtx* gbContext, 82 IFX_Pause* pPause); 83 FXCODEC_STATUS decode_Arith_Template3_unopt( 84 CJBig2_Image* pImage, 85 CJBig2_ArithDecoder* pArithDecoder, 86 JBig2ArithCtx* gbContext, 87 IFX_Pause* pPause); 88 CJBig2_Image* decode_Arith_Template0_opt3(CJBig2_ArithDecoder* pArithDecoder, 89 JBig2ArithCtx* gbContext); 90 91 CJBig2_Image* decode_Arith_Template0_unopt(CJBig2_ArithDecoder* pArithDecoder, 92 JBig2ArithCtx* gbContext); 93 94 CJBig2_Image* decode_Arith_Template1_opt3(CJBig2_ArithDecoder* pArithDecoder, 95 JBig2ArithCtx* gbContext); 96 97 CJBig2_Image* decode_Arith_Template1_unopt(CJBig2_ArithDecoder* pArithDecoder, 98 JBig2ArithCtx* gbContext); 99 100 CJBig2_Image* decode_Arith_Template2_opt3(CJBig2_ArithDecoder* pArithDecoder, 101 JBig2ArithCtx* gbContext); 102 103 CJBig2_Image* decode_Arith_Template2_unopt(CJBig2_ArithDecoder* pArithDecoder, 104 JBig2ArithCtx* gbContext); 105 106 CJBig2_Image* decode_Arith_Template3_opt3(CJBig2_ArithDecoder* pArithDecoder, 107 JBig2ArithCtx* gbContext); 108 109 CJBig2_Image* decode_Arith_Template3_unopt(CJBig2_ArithDecoder* pArithDecoder, 110 JBig2ArithCtx* gbContext); 111 112 FX_DWORD m_loopIndex; 113 uint8_t* m_pLine; 114 IFX_Pause* m_pPause; 115 FXCODEC_STATUS m_ProssiveStatus; 116 CJBig2_Image** m_pImage; 117 CJBig2_ArithDecoder* m_pArithDecoder; 118 JBig2ArithCtx* m_gbContext; 119 FX_WORD m_DecodeType; 120 FX_BOOL LTP; 121 FX_RECT m_ReplaceRect; 122 }; 123 124 #endif // CORE_SRC_FXCODEC_JBIG2_JBIG2_GRDPROC_H_ 125