Initial commit.
[pdfium.git] / core / src / fxcodec / jbig2 / JBig2_Context.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4  \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _JBIG2_CONTEXT_H_\r
8 #define _JBIG2_CONTEXT_H_\r
9 #include "JBig2_Module.h"\r
10 #include "JBig2_List.h"\r
11 #include "JBig2_Segment.h"\r
12 #include "JBig2_Page.h"\r
13 #include "JBig2_GeneralDecoder.h"\r
14 #include "../../../include/fxcodec/fx_codec_def.h"\r
15 #include "../../../include/fxcrt/fx_basic.h"\r
16 typedef enum {\r
17     JBIG2_OUT_OF_PAGE = 0,\r
18     JBIG2_IN_PAGE,\r
19 } JBig2State;\r
20 #define JBIG2_SUCCESS                    0\r
21 #define JBIG2_FAILED                    -1\r
22 #define JBIG2_ERROR_TOO_SHORT   -2\r
23 #define JBIG2_ERROR_FETAL               -3\r
24 #define JBIG2_END_OF_PAGE                2\r
25 #define JBIG2_END_OF_FILE                3\r
26 #define JBIG2_ERROR_FILE_FORMAT -4\r
27 #define JBIG2_ERROR_STREAM_TYPE -5\r
28 #define JBIG2_ERROR_LIMIT               -6\r
29 #define JBIG2_FILE_STREAM                       0\r
30 #define JBIG2_SQUENTIAL_STREAM          1\r
31 #define JBIG2_RANDOM_STREAM                     2\r
32 #define JBIG2_EMBED_STREAM                      3\r
33 #define JBIG2_MIN_SEGMENT_SIZE                                  11\r
34 class CJBig2_Context : public CJBig2_Object\r
35 {\r
36 public:\r
37 \r
38     static CJBig2_Context *CreateContext(CJBig2_Module *pModule, FX_BYTE *pGlobalData, FX_DWORD dwGlobalLength,\r
39                                          FX_BYTE *pData, FX_DWORD dwLength, FX_INT32 nStreamType, IFX_Pause* pPause = NULL);\r
40 \r
41     static void DestroyContext(CJBig2_Context *pContext);\r
42 \r
43     FX_INT32 getFirstPage(FX_BYTE *pBuf, FX_INT32 width, FX_INT32 height, FX_INT32 stride, IFX_Pause* pPause);\r
44 \r
45     FX_INT32 getNextPage(FX_BYTE *pBuf, FX_INT32 width, FX_INT32 height, FX_INT32 stride, IFX_Pause* pPause);\r
46 \r
47     FX_INT32 getFirstPage(CJBig2_Image **image, IFX_Pause* pPause);\r
48 \r
49     FX_INT32 getNextPage(CJBig2_Image **image, IFX_Pause* pPause);\r
50     FX_INT32 Continue(IFX_Pause* pPause);\r
51     FXCODEC_STATUS GetProcessiveStatus()\r
52     {\r
53         return m_ProcessiveStatus;\r
54     };\r
55 private:\r
56 \r
57     CJBig2_Context(FX_BYTE *pGlobalData, FX_DWORD dwGlobalLength,\r
58                    FX_BYTE *pData, FX_DWORD dwLength, FX_INT32 nStreamType, IFX_Pause* pPause);\r
59 \r
60     ~CJBig2_Context();\r
61 \r
62     FX_INT32 decodeFile(IFX_Pause* pPause);\r
63 \r
64     FX_INT32 decode_SquentialOrgnazation(IFX_Pause* pPause);\r
65 \r
66     FX_INT32 decode_EmbedOrgnazation(IFX_Pause* pPause);\r
67 \r
68     FX_INT32 decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause);\r
69 \r
70     FX_INT32 decode_RandomOrgnazation(IFX_Pause* pPause);\r
71 \r
72     CJBig2_Segment *findSegmentByNumber(FX_DWORD dwNumber);\r
73 \r
74     CJBig2_Segment *findReferredSegmentByTypeAndIndex(CJBig2_Segment *pSegment, FX_BYTE cType, FX_INT32 nIndex);\r
75 \r
76     FX_INT32 parseSegmentHeader(CJBig2_Segment *pSegment);\r
77 \r
78     FX_INT32 parseSegmentData(CJBig2_Segment *pSegment, IFX_Pause* pPause);\r
79     FX_INT32 ProcessiveParseSegmentData(CJBig2_Segment *pSegment, IFX_Pause* pPause);\r
80 \r
81     FX_INT32 parseSymbolDict(CJBig2_Segment *pSegment, IFX_Pause* pPause);\r
82 \r
83     FX_INT32 parseTextRegion(CJBig2_Segment *pSegment);\r
84 \r
85     FX_INT32 parsePatternDict(CJBig2_Segment *pSegment, IFX_Pause* pPause);\r
86 \r
87     FX_INT32 parseHalftoneRegion(CJBig2_Segment *pSegment, IFX_Pause* pPause);\r
88 \r
89     FX_INT32 parseGenericRegion(CJBig2_Segment *pSegment, IFX_Pause* pPause);\r
90 \r
91     FX_INT32 parseGenericRefinementRegion(CJBig2_Segment *pSegment);\r
92 \r
93     FX_INT32 parseTable(CJBig2_Segment *pSegment);\r
94 \r
95     FX_INT32 parseRegionInfo(JBig2RegionInfo *pRI);\r
96 \r
97 \r
98 \r
99     JBig2HuffmanCode *decodeSymbolIDHuffmanTable(CJBig2_BitStream *pStream, FX_DWORD SBNUMSYMS);\r
100 \r
101     void huffman_assign_code(int* CODES, int* PREFLEN, int NTEMP);\r
102 \r
103     void huffman_assign_code(JBig2HuffmanCode *SBSYMCODES, int NTEMP);\r
104 \r
105 private:\r
106 \r
107     CJBig2_Context *m_pGlobalContext;\r
108 \r
109     FX_INT32 m_nStreamType;\r
110 \r
111     CJBig2_BitStream *m_pStream;\r
112 \r
113     FX_INT32 m_nState;\r
114 \r
115     CJBig2_List<CJBig2_Segment> *m_pSegmentList;\r
116 \r
117     CJBig2_List<JBig2PageInfo> *m_pPageInfoList;\r
118 \r
119     CJBig2_Image *m_pPage;\r
120 \r
121     FX_BOOL m_bBufSpecified;\r
122 \r
123     FX_INT32 m_nSegmentDecoded;\r
124     IFX_Pause*  m_pPause;\r
125     FX_INT32    m_PauseStep;\r
126     FXCODEC_STATUS m_ProcessiveStatus;\r
127     FX_BOOL     m_bFirstPage;\r
128     CJBig2_ArithDecoder *m_pArithDecoder;\r
129     CJBig2_GRDProc *m_pGRD;\r
130     JBig2ArithCtx *m_gbContext;\r
131     CJBig2_Segment *m_pSegment;\r
132     FX_DWORD m_dwOffset;\r
133     JBig2RegionInfo m_ri;\r
134 };\r
135 #endif\r