Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / core / src / fxcodec / jbig2 / JBig2_GeneralDecoder.h
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     uint8_t *   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     uint8_t 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     int32_t GRREFERENCEDX;
144     int32_t 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     uint8_t 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     uint8_t 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     uint8_t 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     int32_t HGX,
242              HGY;
243     FX_WORD HRX,
244             HRY;
245     uint8_t 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     uint8_t HDPW,
258             HDPH;
259     FX_DWORD GRAYMAX;
260     uint8_t 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     uint8_t GSBPP;
273     FX_DWORD GSW,
274              GSH;
275     uint8_t GSTEMPLATE;
276     CJBig2_Image *GSKIP;
277 };
278 #endif