1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2015 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <memory>
11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <vector>
12d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcodec/jbig2/JBig2_Image.h"
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_system.h"
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJBig2_ArithDecoder;
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJBig2_ArithIaidDecoder;
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJBig2_ArithIntDecoder;
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJBig2_BitStream;
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJBig2_HuffmanTable;
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct JBig2ArithCtx;
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct JBig2HuffmanCode;
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct JBig2IntDecoderState {
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IADT;
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IAFS;
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IADS;
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IAIT;
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IARI;
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IARDW;
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IARDH;
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IARDX;
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIntDecoder* IARDY;
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_ArithIaidDecoder* IAID;
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannenum JBig2Corner {
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  JBIG2_CORNER_BOTTOMLEFT = 0,
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  JBIG2_CORNER_TOPLEFT = 1,
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  JBIG2_CORNER_BOTTOMRIGHT = 2,
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  JBIG2_CORNER_TOPRIGHT = 3
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJBig2_TRDProc {
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
46d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CJBig2_TRDProc();
47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  ~CJBig2_TRDProc();
48d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::unique_ptr<CJBig2_Image> decode_Huffman(CJBig2_BitStream* pStream,
50d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                               JBig2ArithCtx* grContext);
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
52d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::unique_ptr<CJBig2_Image> decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
53d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                             JBig2ArithCtx* grContext,
54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                             JBig2IntDecoderState* pIDS);
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool SBHUFF;
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool SBREFINE;
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t SBW;
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t SBH;
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t SBNUMINSTANCES;
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t SBSTRIPS;
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t SBNUMSYMS;
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
64d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::vector<JBig2HuffmanCode> SBSYMCODES;
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t SBSYMCODELEN;
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_Image** SBSYMS;
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool SBDEFPIXEL;
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  JBig2ComposeOp SBCOMBOP;
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool TRANSPOSED;
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  JBig2Corner REFCORNER;
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int8_t SBDSOFFSET;
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_HuffmanTable* SBHUFFFS;
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_HuffmanTable* SBHUFFDS;
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_HuffmanTable* SBHUFFDT;
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_HuffmanTable* SBHUFFRDW;
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_HuffmanTable* SBHUFFRDH;
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_HuffmanTable* SBHUFFRDX;
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_HuffmanTable* SBHUFFRDY;
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_HuffmanTable* SBHUFFRSIZE;
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool SBRTEMPLATE;
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int8_t SBRAT[4];
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif  // CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_
88