blob: 7962c7011a59292e924405d0fc79e486c007948b [file] [log] [blame]
kumarashishg826308d2023-06-23 13:21:22 +00001// Copyright 2015 The PDFium Authors
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -07002// 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 CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_
8#define CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_
9
kumarashishg826308d2023-06-23 13:21:22 +000010#include <stdint.h>
11
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070012#include <memory>
13#include <vector>
14
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070015#include "core/fxcodec/jbig2/JBig2_Image.h"
Haibo Huang49cc9302020-04-27 16:14:24 -070016#include "core/fxcrt/unowned_ptr.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070017
18class CJBig2_ArithDecoder;
19class CJBig2_ArithIaidDecoder;
20class CJBig2_ArithIntDecoder;
21class CJBig2_BitStream;
22class CJBig2_HuffmanTable;
Haibo Huang49cc9302020-04-27 16:14:24 -070023class JBig2ArithCtx;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070024struct JBig2HuffmanCode;
25
26struct JBig2IntDecoderState {
Haibo Huang49cc9302020-04-27 16:14:24 -070027 JBig2IntDecoderState();
28 ~JBig2IntDecoderState();
29
30 UnownedPtr<CJBig2_ArithIntDecoder> IADT;
31 UnownedPtr<CJBig2_ArithIntDecoder> IAFS;
32 UnownedPtr<CJBig2_ArithIntDecoder> IADS;
33 UnownedPtr<CJBig2_ArithIntDecoder> IAIT;
34 UnownedPtr<CJBig2_ArithIntDecoder> IARI;
35 UnownedPtr<CJBig2_ArithIntDecoder> IARDW;
36 UnownedPtr<CJBig2_ArithIntDecoder> IARDH;
37 UnownedPtr<CJBig2_ArithIntDecoder> IARDX;
38 UnownedPtr<CJBig2_ArithIntDecoder> IARDY;
39 UnownedPtr<CJBig2_ArithIaidDecoder> IAID;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070040};
41
42enum JBig2Corner {
43 JBIG2_CORNER_BOTTOMLEFT = 0,
44 JBIG2_CORNER_TOPLEFT = 1,
45 JBIG2_CORNER_BOTTOMRIGHT = 2,
46 JBIG2_CORNER_TOPRIGHT = 3
47};
48
49class CJBig2_TRDProc {
50 public:
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070051 CJBig2_TRDProc();
52 ~CJBig2_TRDProc();
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070053
Haibo Huang49cc9302020-04-27 16:14:24 -070054 std::unique_ptr<CJBig2_Image> DecodeHuffman(CJBig2_BitStream* pStream,
55 JBig2ArithCtx* grContext);
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070056
Haibo Huang49cc9302020-04-27 16:14:24 -070057 std::unique_ptr<CJBig2_Image> DecodeArith(CJBig2_ArithDecoder* pArithDecoder,
58 JBig2ArithCtx* grContext,
59 JBig2IntDecoderState* pIDS);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070060
61 bool SBHUFF;
62 bool SBREFINE;
Haibo Huang49cc9302020-04-27 16:14:24 -070063 bool SBRTEMPLATE;
64 bool TRANSPOSED;
65 bool SBDEFPIXEL;
66 int8_t SBDSOFFSET;
67 uint8_t SBSYMCODELEN;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070068 uint32_t SBW;
69 uint32_t SBH;
70 uint32_t SBNUMINSTANCES;
71 uint32_t SBSTRIPS;
72 uint32_t SBNUMSYMS;
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070073 std::vector<JBig2HuffmanCode> SBSYMCODES;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070074 CJBig2_Image** SBSYMS;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070075 JBig2ComposeOp SBCOMBOP;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070076 JBig2Corner REFCORNER;
Haibo Huang49cc9302020-04-27 16:14:24 -070077 UnownedPtr<const CJBig2_HuffmanTable> SBHUFFFS;
78 UnownedPtr<const CJBig2_HuffmanTable> SBHUFFDS;
79 UnownedPtr<const CJBig2_HuffmanTable> SBHUFFDT;
80 UnownedPtr<const CJBig2_HuffmanTable> SBHUFFRDW;
81 UnownedPtr<const CJBig2_HuffmanTable> SBHUFFRDH;
82 UnownedPtr<const CJBig2_HuffmanTable> SBHUFFRDX;
83 UnownedPtr<const CJBig2_HuffmanTable> SBHUFFRDY;
84 UnownedPtr<const CJBig2_HuffmanTable> SBHUFFRSIZE;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070085 int8_t SBRAT[4];
Haibo Huang49cc9302020-04-27 16:14:24 -070086
87 private:
88 struct ComposeData {
89 int32_t x;
90 int32_t y;
91 uint32_t increment = 0;
92 };
93 ComposeData GetComposeData(int32_t SI,
94 int32_t TI,
95 uint32_t WI,
96 uint32_t HI) const;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070097};
98
99#endif // CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_