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