Revert "FX Bool considered harmful, part 3"
[pdfium.git] / core / src / fpdfapi / fpdf_parser / filters_int.h
1 // Copyright 2014 PDFium Authors. All rights reserved.
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_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_
8 #define CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_
9
10 class CPDF_DecryptFilter : public CFX_DataFilter
11 {
12 public:
13     CPDF_DecryptFilter(CPDF_CryptoHandler* pCryptoHandler, FX_DWORD objnum, FX_DWORD gennum);
14     virtual ~CPDF_DecryptFilter();
15     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
16     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf);
17     CPDF_CryptoHandler* m_pCryptoHandler;
18     void*               m_pContext;
19     FX_DWORD            m_ObjNum, m_GenNum;
20 };
21 class CPDF_FlateFilter : public CFX_DataFilter
22 {
23 public:
24     CPDF_FlateFilter();
25     virtual ~CPDF_FlateFilter();
26     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
27     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
28     void*                       m_pContext;
29     uint8_t                     m_DestBuffer[FPDF_FILTER_BUFFER_SIZE];
30 };
31 class CPDF_LzwFilter : public CFX_DataFilter
32 {
33 public:
34     CPDF_LzwFilter(FX_BOOL bEarlyChange);
35     virtual ~CPDF_LzwFilter() {}
36     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
37     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
38     FX_BOOL                     m_bEarlyChange;
39     FX_DWORD            m_CodeArray[5021];
40     FX_DWORD            m_nCodes;
41     FX_DWORD            m_CodeLen;
42     FX_DWORD            m_OldCode;
43     uint8_t                     m_LastChar;
44     FX_DWORD            m_nLeftBits, m_LeftBits;
45     uint8_t                     m_DecodeStack[4000];
46     FX_DWORD            m_StackLen;
47     void                        AddCode(FX_DWORD prefix_code, uint8_t append_char);
48     void                        DecodeString(FX_DWORD code);
49 };
50 class CPDF_PredictorFilter : public CFX_DataFilter
51 {
52 public:
53     CPDF_PredictorFilter(int predictor, int colors, int bpc, int cols);
54     virtual ~CPDF_PredictorFilter();
55     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
56     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
57     FX_BOOL                     m_bTiff;
58     FX_DWORD            m_Pitch, m_Bpp;
59     uint8_t*            m_pRefLine;
60     uint8_t*            m_pCurLine;
61     FX_DWORD            m_iLine, m_LineInSize;
62 };
63 class CPDF_AsciiHexFilter : public CFX_DataFilter
64 {
65 public:
66     CPDF_AsciiHexFilter();
67     virtual ~CPDF_AsciiHexFilter() {}
68     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
69     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
70     int                         m_State;
71     int                         m_FirstDigit;
72 };
73 class CPDF_Ascii85Filter : public CFX_DataFilter
74 {
75 public:
76     CPDF_Ascii85Filter();
77     virtual ~CPDF_Ascii85Filter() {}
78     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
79     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
80     int                         m_State;
81     int                         m_CharCount;
82     FX_DWORD            m_CurDWord;
83 };
84 class CPDF_RunLenFilter : public CFX_DataFilter
85 {
86 public:
87     CPDF_RunLenFilter();
88     virtual ~CPDF_RunLenFilter() {}
89     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
90     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
91     int                         m_State;
92     FX_DWORD            m_Count;
93 };
94 class CPDF_JpegFilter : public CFX_DataFilter
95 {
96 public:
97     CPDF_JpegFilter();
98     virtual ~CPDF_JpegFilter();
99     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
100     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
101     void*                       m_pContext;
102     CFX_BinaryBuf       m_InputBuf;
103     uint8_t*            m_pScanline;
104     int                         m_Pitch, m_Height, m_Width, m_nComps, m_iLine;
105     FX_BOOL                     m_bGotHeader;
106 };
107 class CPDF_FaxFilter : public CFX_DataFilter
108 {
109 public:
110     CPDF_FaxFilter();
111     virtual ~CPDF_FaxFilter();
112     FX_BOOL                     Initialize(int Encoding, int bEndOfLine, int bByteAlign, int bBlack, int nRows, int nColumns);
113     virtual     void    v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
114     virtual void        v_FilterFinish(CFX_BinaryBuf& dest_buf);
115     int                         m_Encoding, m_bEndOfLine, m_bByteAlign, m_bBlack;
116     int                         m_nRows, m_nColumns, m_Pitch, m_iRow;
117     uint8_t*            m_pScanlineBuf;
118         uint8_t*                m_pRefBuf;
119     CFX_BinaryBuf       m_InputBuf;
120     int                         m_InputBitPos;
121     void                        ProcessData(const uint8_t* src_buf, FX_DWORD src_size, int& bitpos, FX_BOOL bFinish,
122                                 CFX_BinaryBuf& dest_buf);
123     FX_BOOL                     ReadLine(const uint8_t* src_buf, int bitsize, int& bitpos);
124 };
125
126 #endif  // CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_