kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 1 | // Copyright 2015 The PDFium Authors |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 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 CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_ |
| 8 | #define CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_ |
| 9 | |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 10 | #include <stdint.h> |
| 11 | |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 12 | #include <memory> |
| 13 | #include <vector> |
| 14 | |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 15 | #include "core/fxcodec/jbig2/JBig2_Image.h" |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 16 | #include "core/fxcrt/unowned_ptr.h" |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 17 | |
| 18 | class CJBig2_ArithDecoder; |
| 19 | class CJBig2_ArithIaidDecoder; |
| 20 | class CJBig2_ArithIntDecoder; |
| 21 | class CJBig2_BitStream; |
| 22 | class CJBig2_HuffmanTable; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 23 | class JBig2ArithCtx; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 24 | struct JBig2HuffmanCode; |
| 25 | |
| 26 | struct JBig2IntDecoderState { |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 27 | 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. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 40 | }; |
| 41 | |
| 42 | enum JBig2Corner { |
| 43 | JBIG2_CORNER_BOTTOMLEFT = 0, |
| 44 | JBIG2_CORNER_TOPLEFT = 1, |
| 45 | JBIG2_CORNER_BOTTOMRIGHT = 2, |
| 46 | JBIG2_CORNER_TOPRIGHT = 3 |
| 47 | }; |
| 48 | |
| 49 | class CJBig2_TRDProc { |
| 50 | public: |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 51 | CJBig2_TRDProc(); |
| 52 | ~CJBig2_TRDProc(); |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 53 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 54 | std::unique_ptr<CJBig2_Image> DecodeHuffman(CJBig2_BitStream* pStream, |
| 55 | JBig2ArithCtx* grContext); |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 56 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 57 | std::unique_ptr<CJBig2_Image> DecodeArith(CJBig2_ArithDecoder* pArithDecoder, |
| 58 | JBig2ArithCtx* grContext, |
| 59 | JBig2IntDecoderState* pIDS); |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 60 | |
| 61 | bool SBHUFF; |
| 62 | bool SBREFINE; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 63 | bool SBRTEMPLATE; |
| 64 | bool TRANSPOSED; |
| 65 | bool SBDEFPIXEL; |
| 66 | int8_t SBDSOFFSET; |
| 67 | uint8_t SBSYMCODELEN; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 68 | uint32_t SBW; |
| 69 | uint32_t SBH; |
| 70 | uint32_t SBNUMINSTANCES; |
| 71 | uint32_t SBSTRIPS; |
| 72 | uint32_t SBNUMSYMS; |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 73 | std::vector<JBig2HuffmanCode> SBSYMCODES; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 74 | CJBig2_Image** SBSYMS; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 75 | JBig2ComposeOp SBCOMBOP; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 76 | JBig2Corner REFCORNER; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 77 | 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. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 85 | int8_t SBRAT[4]; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 86 | |
| 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. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 97 | }; |
| 98 | |
| 99 | #endif // CORE_FXCODEC_JBIG2_JBIG2_TRDPROC_H_ |