summaryrefslogtreecommitdiff
path: root/core/src/fpdfapi/fpdf_parser/filters_int.h
blob: 6652cc0cccb02eecffc99232307ba4ec9461d9a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
 
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_
#define CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_

class CPDF_DecryptFilter : public CFX_DataFilter
{
public:
    CPDF_DecryptFilter(CPDF_CryptoHandler* pCryptoHandler, FX_DWORD objnum, FX_DWORD gennum);
    virtual ~CPDF_DecryptFilter();
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf);
    CPDF_CryptoHandler*	m_pCryptoHandler;
    FX_LPVOID		m_pContext;
    FX_DWORD		m_ObjNum, m_GenNum;
};
class CPDF_FlateFilter : public CFX_DataFilter
{
public:
    CPDF_FlateFilter();
    virtual ~CPDF_FlateFilter();
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
    void*			m_pContext;
    uint8_t			m_DestBuffer[FPDF_FILTER_BUFFER_SIZE];
};
class CPDF_LzwFilter : public CFX_DataFilter
{
public:
    CPDF_LzwFilter(FX_BOOL bEarlyChange);
    virtual ~CPDF_LzwFilter() {}
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
    FX_BOOL			m_bEarlyChange;
    FX_DWORD		m_CodeArray[5021];
    FX_DWORD		m_nCodes;
    FX_DWORD		m_CodeLen;
    FX_DWORD		m_OldCode;
    uint8_t			m_LastChar;
    FX_DWORD		m_nLeftBits, m_LeftBits;
    uint8_t			m_DecodeStack[4000];
    FX_DWORD		m_StackLen;
    void			AddCode(FX_DWORD prefix_code, uint8_t append_char);
    void			DecodeString(FX_DWORD code);
};
class CPDF_PredictorFilter : public CFX_DataFilter
{
public:
    CPDF_PredictorFilter(int predictor, int colors, int bpc, int cols);
    virtual ~CPDF_PredictorFilter();
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
    FX_BOOL			m_bTiff;
    FX_DWORD		m_Pitch, m_Bpp;
    FX_LPBYTE		m_pRefLine, m_pCurLine;
    FX_DWORD		m_iLine, m_LineInSize;
};
class CPDF_AsciiHexFilter : public CFX_DataFilter
{
public:
    CPDF_AsciiHexFilter();
    virtual ~CPDF_AsciiHexFilter() {}
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
    int				m_State;
    int				m_FirstDigit;
};
class CPDF_Ascii85Filter : public CFX_DataFilter
{
public:
    CPDF_Ascii85Filter();
    virtual ~CPDF_Ascii85Filter() {}
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
    int				m_State;
    int				m_CharCount;
    FX_DWORD		m_CurDWord;
};
class CPDF_RunLenFilter : public CFX_DataFilter
{
public:
    CPDF_RunLenFilter();
    virtual ~CPDF_RunLenFilter() {}
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
    int				m_State;
    FX_DWORD		m_Count;
};
class CPDF_JpegFilter : public CFX_DataFilter
{
public:
    CPDF_JpegFilter();
    virtual ~CPDF_JpegFilter();
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
    void*			m_pContext;
    CFX_BinaryBuf	m_InputBuf;
    FX_LPBYTE		m_pScanline;
    int				m_Pitch, m_Height, m_Width, m_nComps, m_iLine;
    FX_BOOL			m_bGotHeader;
};
class CPDF_FaxFilter : public CFX_DataFilter
{
public:
    CPDF_FaxFilter();
    virtual ~CPDF_FaxFilter();
    FX_BOOL			Initialize(int Encoding, int bEndOfLine, int bByteAlign, int bBlack, int nRows, int nColumns);
    virtual	void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf);
    int				m_Encoding, m_bEndOfLine, m_bByteAlign, m_bBlack;
    int				m_nRows, m_nColumns, m_Pitch, m_iRow;
    FX_LPBYTE		m_pScanlineBuf, m_pRefBuf;
    CFX_BinaryBuf	m_InputBuf;
    int				m_InputBitPos;
    void			ProcessData(FX_LPCBYTE src_buf, FX_DWORD src_size, int& bitpos, FX_BOOL bFinish,
                                CFX_BinaryBuf& dest_buf);
    FX_BOOL			ReadLine(FX_LPCBYTE src_buf, int bitsize, int& bitpos);
};

#endif  // CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_