blob: 0b087a0ec121b6c09883cab8d055c7afeafb27d1 [file] [log] [blame]
// 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_coordinates.h"
#include "JBig2_ArithDecoder.h"
#include "JBig2_ArithIntDecoder.h"
#include "JBig2_Define.h"
#include "JBig2_SymbolDict.h"
class CJBig2_HuffmanTable;
class CJBig2_Image;
class CJBig2_PatternDict;
enum JBig2Corner {
JBIG2_CORNER_BOTTOMLEFT = 0,
JBIG2_CORNER_TOPLEFT = 1,
JBIG2_CORNER_BOTTOMRIGHT = 2,
JBIG2_CORNER_TOPRIGHT = 3
};
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);
FXCODEC_STATUS Start_decode_Arith(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; }
FX_BOOL MMR;
FX_DWORD GBW;
FX_DWORD GBH;
uint8_t GBTEMPLATE;
FX_BOOL TPGDON;
FX_BOOL USESKIP;
CJBig2_Image* SKIP;
int8_t GBAT[8];
private:
FXCODEC_STATUS decode_Arith(IFX_Pause* pPause);
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);
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);
FX_DWORD m_loopIndex;
uint8_t* 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;
};
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);
FX_DWORD GRW;
FX_DWORD GRH;
FX_BOOL GRTEMPLATE;
CJBig2_Image* GRREFERENCE;
int32_t GRREFERENCEDX;
int32_t GRREFERENCEDY;
FX_BOOL TPGRON;
int8_t 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;
uint8_t SBSYMCODELEN;
CJBig2_Image** SBSYMS;
FX_BOOL SBDEFPIXEL;
JBig2ComposeOp SBCOMBOP;
FX_BOOL TRANSPOSED;
JBig2Corner REFCORNER;
int8_t SBDSOFFSET;
CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH,
*SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE;
FX_BOOL SBRTEMPLATE;
int8_t 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;
uint8_t SDTEMPLATE;
int8_t SDAT[8];
FX_BOOL SDRTEMPLATE;
int8_t 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;
uint8_t HTEMPLATE;
FX_DWORD HNUMPATS;
CJBig2_Image** HPATS;
FX_BOOL HDEFPIXEL;
JBig2ComposeOp HCOMBOP;
FX_BOOL HENABLESKIP;
FX_DWORD HGW, HGH;
int32_t HGX, HGY;
FX_WORD HRX, HRY;
uint8_t 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;
uint8_t HDPW, HDPH;
FX_DWORD GRAYMAX;
uint8_t 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;
uint8_t GSBPP;
FX_DWORD GSW, GSH;
uint8_t GSTEMPLATE;
CJBig2_Image* GSKIP;
};
#endif