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