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