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