| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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 _JBIG2_GENERAL_DECODER_H_ | |
| 8 #define _JBIG2_GENERAL_DECODER_H_ | |
| 9 | |
| 10 #include "../../../include/fxcodec/fx_codec_def.h" | |
| 11 #include "../../../include/fxcrt/fx_coordinates.h" | |
| 12 #include "JBig2_ArithDecoder.h" | |
| 13 #include "JBig2_ArithIntDecoder.h" | |
| 14 #include "JBig2_Define.h" | |
| 15 #include "JBig2_SymbolDict.h" | |
| 16 | |
| 17 class CJBig2_HuffmanTable; | |
| 18 class CJBig2_Image; | |
| 19 class CJBig2_PatternDict; | |
| 20 | |
| 21 enum JBig2Corner { | |
| 22 JBIG2_CORNER_BOTTOMLEFT = 0, | |
| 23 JBIG2_CORNER_TOPLEFT = 1, | |
| 24 JBIG2_CORNER_BOTTOMRIGHT = 2, | |
| 25 JBIG2_CORNER_TOPRIGHT = 3 | |
| 26 }; | |
| 27 | |
| 28 class CJBig2_GRDProc { | |
| 29 public: | |
| 30 CJBig2_GRDProc() { | |
| 31 m_loopIndex = 0; | |
| 32 m_pLine = NULL; | |
| 33 m_pPause = NULL; | |
| 34 m_DecodeType = 0; | |
| 35 LTP = 0; | |
| 36 m_ReplaceRect.left = 0; | |
| 37 m_ReplaceRect.bottom = 0; | |
| 38 m_ReplaceRect.top = 0; | |
| 39 m_ReplaceRect.right = 0; | |
| 40 } | |
| 41 | |
| 42 CJBig2_Image* decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | |
| 43 JBig2ArithCtx* gbContext); | |
| 44 | |
| 45 FXCODEC_STATUS Start_decode_Arith(CJBig2_Image** pImage, | |
| 46 CJBig2_ArithDecoder* pArithDecoder, | |
| 47 JBig2ArithCtx* gbContext, | |
| 48 IFX_Pause* pPause = NULL); | |
| 49 FXCODEC_STATUS Start_decode_MMR(CJBig2_Image** pImage, | |
| 50 CJBig2_BitStream* pStream, | |
| 51 IFX_Pause* pPause = NULL); | |
| 52 FXCODEC_STATUS Continue_decode(IFX_Pause* pPause); | |
| 53 FX_RECT GetReplaceRect() { return m_ReplaceRect; } | |
| 54 | |
| 55 FX_BOOL MMR; | |
| 56 FX_DWORD GBW; | |
| 57 FX_DWORD GBH; | |
| 58 uint8_t GBTEMPLATE; | |
| 59 FX_BOOL TPGDON; | |
| 60 FX_BOOL USESKIP; | |
| 61 CJBig2_Image* SKIP; | |
| 62 int8_t GBAT[8]; | |
| 63 | |
| 64 private: | |
| 65 bool UseTemplate0Opt3() const; | |
| 66 bool UseTemplate1Opt3() const; | |
| 67 bool UseTemplate23Opt3() const; | |
| 68 | |
| 69 FXCODEC_STATUS decode_Arith(IFX_Pause* pPause); | |
| 70 FXCODEC_STATUS decode_Arith_Template0_opt3(CJBig2_Image* pImage, | |
| 71 CJBig2_ArithDecoder* pArithDecoder, | |
| 72 JBig2ArithCtx* gbContext, | |
| 73 IFX_Pause* pPause); | |
| 74 FXCODEC_STATUS decode_Arith_Template0_unopt( | |
| 75 CJBig2_Image* pImage, | |
| 76 CJBig2_ArithDecoder* pArithDecoder, | |
| 77 JBig2ArithCtx* gbContext, | |
| 78 IFX_Pause* pPause); | |
| 79 FXCODEC_STATUS decode_Arith_Template1_opt3(CJBig2_Image* pImage, | |
| 80 CJBig2_ArithDecoder* pArithDecoder, | |
| 81 JBig2ArithCtx* gbContext, | |
| 82 IFX_Pause* pPause); | |
| 83 FXCODEC_STATUS decode_Arith_Template1_unopt( | |
| 84 CJBig2_Image* pImage, | |
| 85 CJBig2_ArithDecoder* pArithDecoder, | |
| 86 JBig2ArithCtx* gbContext, | |
| 87 IFX_Pause* pPause); | |
| 88 FXCODEC_STATUS decode_Arith_Template2_opt3(CJBig2_Image* pImage, | |
| 89 CJBig2_ArithDecoder* pArithDecoder, | |
| 90 JBig2ArithCtx* gbContext, | |
| 91 IFX_Pause* pPause); | |
| 92 FXCODEC_STATUS decode_Arith_Template2_unopt( | |
| 93 CJBig2_Image* pImage, | |
| 94 CJBig2_ArithDecoder* pArithDecoder, | |
| 95 JBig2ArithCtx* gbContext, | |
| 96 IFX_Pause* pPause); | |
| 97 FXCODEC_STATUS decode_Arith_Template3_opt3(CJBig2_Image* pImage, | |
| 98 CJBig2_ArithDecoder* pArithDecoder, | |
| 99 JBig2ArithCtx* gbContext, | |
| 100 IFX_Pause* pPause); | |
| 101 FXCODEC_STATUS decode_Arith_Template3_unopt( | |
| 102 CJBig2_Image* pImage, | |
| 103 CJBig2_ArithDecoder* pArithDecoder, | |
| 104 JBig2ArithCtx* gbContext, | |
| 105 IFX_Pause* pPause); | |
| 106 CJBig2_Image* decode_Arith_Template0_opt3(CJBig2_ArithDecoder* pArithDecoder, | |
| 107 JBig2ArithCtx* gbContext); | |
| 108 | |
| 109 CJBig2_Image* decode_Arith_Template0_unopt(CJBig2_ArithDecoder* pArithDecoder, | |
| 110 JBig2ArithCtx* gbContext); | |
| 111 | |
| 112 CJBig2_Image* decode_Arith_Template1_opt3(CJBig2_ArithDecoder* pArithDecoder, | |
| 113 JBig2ArithCtx* gbContext); | |
| 114 | |
| 115 CJBig2_Image* decode_Arith_Template1_unopt(CJBig2_ArithDecoder* pArithDecoder, | |
| 116 JBig2ArithCtx* gbContext); | |
| 117 | |
| 118 CJBig2_Image* decode_Arith_Template2_opt3(CJBig2_ArithDecoder* pArithDecoder, | |
| 119 JBig2ArithCtx* gbContext); | |
| 120 | |
| 121 CJBig2_Image* decode_Arith_Template2_unopt(CJBig2_ArithDecoder* pArithDecoder, | |
| 122 JBig2ArithCtx* gbContext); | |
| 123 | |
| 124 CJBig2_Image* decode_Arith_Template3_opt3(CJBig2_ArithDecoder* pArithDecoder, | |
| 125 JBig2ArithCtx* gbContext); | |
| 126 | |
| 127 CJBig2_Image* decode_Arith_Template3_unopt(CJBig2_ArithDecoder* pArithDecoder, | |
| 128 JBig2ArithCtx* gbContext); | |
| 129 | |
| 130 FX_DWORD m_loopIndex; | |
| 131 uint8_t* m_pLine; | |
| 132 IFX_Pause* m_pPause; | |
| 133 FXCODEC_STATUS m_ProssiveStatus; | |
| 134 CJBig2_Image** m_pImage; | |
| 135 CJBig2_ArithDecoder* m_pArithDecoder; | |
| 136 JBig2ArithCtx* m_gbContext; | |
| 137 FX_WORD m_DecodeType; | |
| 138 FX_BOOL LTP; | |
| 139 FX_RECT m_ReplaceRect; | |
| 140 }; | |
| 141 | |
| 142 class CJBig2_GRRDProc { | |
| 143 public: | |
| 144 CJBig2_Image* decode(CJBig2_ArithDecoder* pArithDecoder, | |
| 145 JBig2ArithCtx* grContext); | |
| 146 | |
| 147 CJBig2_Image* decode_Template0_unopt(CJBig2_ArithDecoder* pArithDecoder, | |
| 148 JBig2ArithCtx* grContext); | |
| 149 | |
| 150 CJBig2_Image* decode_Template0_opt(CJBig2_ArithDecoder* pArithDecoder, | |
| 151 JBig2ArithCtx* grContext); | |
| 152 | |
| 153 CJBig2_Image* decode_Template1_unopt(CJBig2_ArithDecoder* pArithDecoder, | |
| 154 JBig2ArithCtx* grContext); | |
| 155 | |
| 156 CJBig2_Image* decode_Template1_opt(CJBig2_ArithDecoder* pArithDecoder, | |
| 157 JBig2ArithCtx* grContext); | |
| 158 | |
| 159 FX_DWORD GRW; | |
| 160 FX_DWORD GRH; | |
| 161 FX_BOOL GRTEMPLATE; | |
| 162 CJBig2_Image* GRREFERENCE; | |
| 163 int32_t GRREFERENCEDX; | |
| 164 int32_t GRREFERENCEDY; | |
| 165 FX_BOOL TPGRON; | |
| 166 int8_t GRAT[4]; | |
| 167 }; | |
| 168 | |
| 169 typedef struct { | |
| 170 CJBig2_ArithIntDecoder *IADT, *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH, | |
| 171 *IARDX, *IARDY; | |
| 172 CJBig2_ArithIaidDecoder* IAID; | |
| 173 } JBig2IntDecoderState; | |
| 174 | |
| 175 class CJBig2_TRDProc { | |
| 176 public: | |
| 177 CJBig2_Image* decode_Huffman(CJBig2_BitStream* pStream, | |
| 178 JBig2ArithCtx* grContext); | |
| 179 | |
| 180 CJBig2_Image* decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | |
| 181 JBig2ArithCtx* grContext, | |
| 182 JBig2IntDecoderState* pIDS = NULL); | |
| 183 | |
| 184 public: | |
| 185 FX_BOOL SBHUFF; | |
| 186 FX_BOOL SBREFINE; | |
| 187 FX_DWORD SBW; | |
| 188 FX_DWORD SBH; | |
| 189 FX_DWORD SBNUMINSTANCES; | |
| 190 FX_DWORD SBSTRIPS; | |
| 191 FX_DWORD SBNUMSYMS; | |
| 192 | |
| 193 JBig2HuffmanCode* SBSYMCODES; | |
| 194 uint8_t SBSYMCODELEN; | |
| 195 | |
| 196 CJBig2_Image** SBSYMS; | |
| 197 FX_BOOL SBDEFPIXEL; | |
| 198 | |
| 199 JBig2ComposeOp SBCOMBOP; | |
| 200 FX_BOOL TRANSPOSED; | |
| 201 | |
| 202 JBig2Corner REFCORNER; | |
| 203 int8_t SBDSOFFSET; | |
| 204 CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH, | |
| 205 *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE; | |
| 206 FX_BOOL SBRTEMPLATE; | |
| 207 int8_t SBRAT[4]; | |
| 208 }; | |
| 209 class CJBig2_SDDProc { | |
| 210 public: | |
| 211 CJBig2_SymbolDict* decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | |
| 212 JBig2ArithCtx* gbContext, | |
| 213 JBig2ArithCtx* grContext); | |
| 214 | |
| 215 CJBig2_SymbolDict* decode_Huffman(CJBig2_BitStream* pStream, | |
| 216 JBig2ArithCtx* gbContext, | |
| 217 JBig2ArithCtx* grContext, | |
| 218 IFX_Pause* pPause); | |
| 219 | |
| 220 public: | |
| 221 FX_BOOL SDHUFF; | |
| 222 FX_BOOL SDREFAGG; | |
| 223 FX_DWORD SDNUMINSYMS; | |
| 224 CJBig2_Image** SDINSYMS; | |
| 225 FX_DWORD SDNUMNEWSYMS; | |
| 226 FX_DWORD SDNUMEXSYMS; | |
| 227 CJBig2_HuffmanTable *SDHUFFDH, *SDHUFFDW, *SDHUFFBMSIZE, *SDHUFFAGGINST; | |
| 228 uint8_t SDTEMPLATE; | |
| 229 int8_t SDAT[8]; | |
| 230 FX_BOOL SDRTEMPLATE; | |
| 231 int8_t SDRAT[4]; | |
| 232 }; | |
| 233 class CJBig2_HTRDProc { | |
| 234 public: | |
| 235 CJBig2_Image* decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | |
| 236 JBig2ArithCtx* gbContext, | |
| 237 IFX_Pause* pPause); | |
| 238 | |
| 239 CJBig2_Image* decode_MMR(CJBig2_BitStream* pStream, IFX_Pause* pPause); | |
| 240 | |
| 241 public: | |
| 242 FX_DWORD HBW, HBH; | |
| 243 FX_BOOL HMMR; | |
| 244 uint8_t HTEMPLATE; | |
| 245 FX_DWORD HNUMPATS; | |
| 246 CJBig2_Image** HPATS; | |
| 247 FX_BOOL HDEFPIXEL; | |
| 248 JBig2ComposeOp HCOMBOP; | |
| 249 FX_BOOL HENABLESKIP; | |
| 250 FX_DWORD HGW, HGH; | |
| 251 int32_t HGX, HGY; | |
| 252 FX_WORD HRX, HRY; | |
| 253 uint8_t HPW, HPH; | |
| 254 }; | |
| 255 class CJBig2_PDDProc { | |
| 256 public: | |
| 257 CJBig2_PatternDict* decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | |
| 258 JBig2ArithCtx* gbContext, | |
| 259 IFX_Pause* pPause); | |
| 260 | |
| 261 CJBig2_PatternDict* decode_MMR(CJBig2_BitStream* pStream, IFX_Pause* pPause); | |
| 262 | |
| 263 public: | |
| 264 FX_BOOL HDMMR; | |
| 265 uint8_t HDPW, HDPH; | |
| 266 FX_DWORD GRAYMAX; | |
| 267 uint8_t HDTEMPLATE; | |
| 268 }; | |
| 269 class CJBig2_GSIDProc { | |
| 270 public: | |
| 271 FX_DWORD* decode_Arith(CJBig2_ArithDecoder* pArithDecoder, | |
| 272 JBig2ArithCtx* gbContext, | |
| 273 IFX_Pause* pPause); | |
| 274 | |
| 275 FX_DWORD* decode_MMR(CJBig2_BitStream* pStream, IFX_Pause* pPause); | |
| 276 | |
| 277 public: | |
| 278 FX_BOOL GSMMR; | |
| 279 FX_BOOL GSUSESKIP; | |
| 280 uint8_t GSBPP; | |
| 281 FX_DWORD GSW, GSH; | |
| 282 uint8_t GSTEMPLATE; | |
| 283 CJBig2_Image* GSKIP; | |
| 284 }; | |
| 285 #endif | |
| OLD | NEW |