summaryrefslogtreecommitdiff
path: root/core/src/fpdfapi/fpdf_parser/filters_int.h
blob: 571801481d00c0f84ce4c274bb8cd8f8cfeadbe2 (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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// 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(const uint8_t* src_buf,
                          FX_DWORD src_size,
                          CFX_BinaryBuf& dest_buf);
  virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf);
  CPDF_CryptoHandler* m_pCryptoHandler;
  void* m_pContext;
  FX_DWORD m_ObjNum, m_GenNum;
};
class CPDF_FlateFilter : public CFX_DataFilter {
 public:
  CPDF_FlateFilter();
  virtual ~CPDF_FlateFilter();
  virtual void v_FilterIn(const uint8_t* 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(const uint8_t* 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(const uint8_t* 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;
  uint8_t* m_pRefLine;
  uint8_t* m_pCurLine;
  FX_DWORD m_iLine, m_LineInSize;
};
class CPDF_AsciiHexFilter : public CFX_DataFilter {
 public:
  CPDF_AsciiHexFilter();
  virtual ~CPDF_AsciiHexFilter() {}
  virtual void v_FilterIn(const uint8_t* 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(const uint8_t* 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(const uint8_t* 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(const uint8_t* 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;
  uint8_t* 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(const uint8_t* 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;
  uint8_t* m_pScanlineBuf;
  uint8_t* m_pRefBuf;
  CFX_BinaryBuf m_InputBuf;
  int m_InputBitPos;
  void ProcessData(const uint8_t* src_buf,
                   FX_DWORD src_size,
                   int& bitpos,
                   FX_BOOL bFinish,
                   CFX_BinaryBuf& dest_buf);
  FX_BOOL ReadLine(const uint8_t* src_buf, int bitsize, int& bitpos);
};

#endif  // CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_