// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#ifndef _JBIG2_GENERAL_DECODER_H_ | |
#define _JBIG2_GENERAL_DECODER_H_ | |
#include "../../../include/fxcodec/fx_codec_def.h" | |
#include "../../../include/fxcrt/fx_basic.h" | |
#include "JBig2_Define.h" | |
#include "JBig2_SymbolDict.h" | |
#include "JBig2_ArithDecoder.h" | |
#include "JBig2_ArithIntDecoder.h" | |
#include "../../../include/fxcrt/fx_coordinates.h" | |
class CJBig2_HuffmanTable; | |
class CJBig2_Image; | |
class CJBig2_PatternDict; | |
typedef enum { | |
JBIG2_CORNER_BOTTOMLEFT = 0, | |
JBIG2_CORNER_TOPLEFT = 1, | |
JBIG2_CORNER_BOTTOMRIGHT = 2, | |
JBIG2_CORNER_TOPRIGHT = 3 | |
} JBig2Corner; | |
class CJBig2_GRDProc : public CJBig2_Object | |
{ | |
public: | |
CJBig2_GRDProc() | |
{ | |
m_loopIndex = 0; | |
m_pLine = NULL; | |
m_pPause = NULL; | |
m_DecodeType = 0; | |
LTP = 0; | |
m_ReplaceRect.left = 0; | |
m_ReplaceRect.bottom = 0; | |
m_ReplaceRect.top = 0; | |
m_ReplaceRect.right = 0; | |
} | |
CJBig2_Image *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_V2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_V1(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_MMR(CJBig2_BitStream *pStream); | |
FXCODEC_STATUS Start_decode_Arith(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause = NULL); | |
FXCODEC_STATUS Start_decode_Arith_V2(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause = NULL); | |
FXCODEC_STATUS Start_decode_Arith_V1(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause = NULL); | |
FXCODEC_STATUS Start_decode_MMR(CJBig2_Image** pImage, CJBig2_BitStream *pStream, IFX_Pause* pPause = NULL); | |
FXCODEC_STATUS Continue_decode(IFX_Pause* pPause); | |
FX_RECT GetReplaceRect() | |
{ | |
return m_ReplaceRect; | |
}; | |
private: | |
FXCODEC_STATUS decode_Arith(IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_V2(IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_V1(IFX_Pause* pPause); | |
FXCODEC_STATUS decode_MMR(); | |
FXCODEC_STATUS decode_Arith_Template0_opt3(CJBig2_Image*pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_Template0_unopt(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_Template1_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_Template1_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_Template2_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_Template2_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_Template3_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FXCODEC_STATUS decode_Arith_Template3_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FX_DWORD m_loopIndex; | |
FX_BYTE * m_pLine; | |
IFX_Pause* m_pPause; | |
FXCODEC_STATUS m_ProssiveStatus; | |
CJBig2_Image** m_pImage; | |
CJBig2_ArithDecoder *m_pArithDecoder; | |
JBig2ArithCtx *m_gbContext; | |
FX_WORD m_DecodeType; | |
FX_BOOL LTP; | |
FX_RECT m_ReplaceRect; | |
private: | |
CJBig2_Image *decode_Arith_Template0_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template0_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template0_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template0_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template1_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template1_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template1_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template1_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template2_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template2_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template2_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template2_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template3_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template3_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template3_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
CJBig2_Image *decode_Arith_Template3_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext); | |
public: | |
FX_BOOL MMR; | |
FX_DWORD GBW; | |
FX_DWORD GBH; | |
FX_BYTE GBTEMPLATE; | |
FX_BOOL TPGDON; | |
FX_BOOL USESKIP; | |
CJBig2_Image * SKIP; | |
signed char GBAT[8]; | |
}; | |
class CJBig2_GRRDProc : public CJBig2_Object | |
{ | |
public: | |
CJBig2_Image *decode(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext); | |
CJBig2_Image *decode_Template0_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext); | |
CJBig2_Image *decode_Template0_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext); | |
CJBig2_Image *decode_Template1_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext); | |
CJBig2_Image *decode_Template1_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext); | |
CJBig2_Image *decode_V1(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext); | |
public: | |
FX_DWORD GRW; | |
FX_DWORD GRH; | |
FX_BOOL GRTEMPLATE; | |
CJBig2_Image *GRREFERENCE; | |
FX_INT32 GRREFERENCEDX; | |
FX_INT32 GRREFERENCEDY; | |
FX_BOOL TPGRON; | |
signed char GRAT[4]; | |
}; | |
typedef struct { | |
CJBig2_ArithIntDecoder *IADT, | |
*IAFS, | |
*IADS, | |
*IAIT, | |
*IARI, | |
*IARDW, | |
*IARDH, | |
*IARDX, | |
*IARDY; | |
CJBig2_ArithIaidDecoder *IAID; | |
} JBig2IntDecoderState; | |
class CJBig2_TRDProc : public CJBig2_Object | |
{ | |
public: | |
CJBig2_Image *decode_Huffman(CJBig2_BitStream *pStream, JBig2ArithCtx *grContext); | |
CJBig2_Image *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext, | |
JBig2IntDecoderState *pIDS = NULL); | |
public: | |
FX_BOOL SBHUFF; | |
FX_BOOL SBREFINE; | |
FX_DWORD SBW; | |
FX_DWORD SBH; | |
FX_DWORD SBNUMINSTANCES; | |
FX_DWORD SBSTRIPS; | |
FX_DWORD SBNUMSYMS; | |
JBig2HuffmanCode *SBSYMCODES; | |
FX_BYTE SBSYMCODELEN; | |
CJBig2_Image **SBSYMS; | |
FX_BOOL SBDEFPIXEL; | |
JBig2ComposeOp SBCOMBOP; | |
FX_BOOL TRANSPOSED; | |
JBig2Corner REFCORNER; | |
signed char SBDSOFFSET; | |
CJBig2_HuffmanTable *SBHUFFFS, | |
*SBHUFFDS, | |
*SBHUFFDT, | |
*SBHUFFRDW, | |
*SBHUFFRDH, | |
*SBHUFFRDX, | |
*SBHUFFRDY, | |
*SBHUFFRSIZE; | |
FX_BOOL SBRTEMPLATE; | |
signed char SBRAT[4]; | |
}; | |
class CJBig2_SDDProc : public CJBig2_Object | |
{ | |
public: | |
CJBig2_SymbolDict *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, JBig2ArithCtx *grContext); | |
CJBig2_SymbolDict *decode_Huffman(CJBig2_BitStream *pStream, JBig2ArithCtx *gbContext, JBig2ArithCtx *grContext, IFX_Pause* pPause); | |
public: | |
FX_BOOL SDHUFF; | |
FX_BOOL SDREFAGG; | |
FX_DWORD SDNUMINSYMS; | |
CJBig2_Image ** SDINSYMS; | |
FX_DWORD SDNUMNEWSYMS; | |
FX_DWORD SDNUMEXSYMS; | |
CJBig2_HuffmanTable *SDHUFFDH, | |
*SDHUFFDW, | |
*SDHUFFBMSIZE, | |
*SDHUFFAGGINST; | |
FX_BYTE SDTEMPLATE; | |
signed char SDAT[8]; | |
FX_BOOL SDRTEMPLATE; | |
signed char SDRAT[4]; | |
}; | |
class CJBig2_HTRDProc : public CJBig2_Object | |
{ | |
public: | |
CJBig2_Image *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
CJBig2_Image *decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause); | |
public: | |
FX_DWORD HBW, | |
HBH; | |
FX_BOOL HMMR; | |
FX_BYTE HTEMPLATE; | |
FX_DWORD HNUMPATS; | |
CJBig2_Image **HPATS; | |
FX_BOOL HDEFPIXEL; | |
JBig2ComposeOp HCOMBOP; | |
FX_BOOL HENABLESKIP; | |
FX_DWORD HGW, | |
HGH; | |
FX_INT32 HGX, | |
HGY; | |
FX_WORD HRX, | |
HRY; | |
FX_BYTE HPW, | |
HPH; | |
}; | |
class CJBig2_PDDProc : public CJBig2_Object | |
{ | |
public: | |
CJBig2_PatternDict *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
CJBig2_PatternDict *decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause); | |
public: | |
FX_BOOL HDMMR; | |
FX_BYTE HDPW, | |
HDPH; | |
FX_DWORD GRAYMAX; | |
FX_BYTE HDTEMPLATE; | |
}; | |
class CJBig2_GSIDProc : public CJBig2_Object | |
{ | |
public: | |
FX_DWORD *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause); | |
FX_DWORD *decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause); | |
public: | |
FX_BOOL GSMMR; | |
FX_BOOL GSUSESKIP; | |
FX_BYTE GSBPP; | |
FX_DWORD GSW, | |
GSH; | |
FX_BYTE GSTEMPLATE; | |
CJBig2_Image *GSKIP; | |
}; | |
#endif |