1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_
9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include <limits.h>
11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <list>
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <map>
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <memory>
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxcodec/fx_codec.h"
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/src/fxcodec/jbig2/JBig2_Context.h"
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "third_party/libopenjpeg20/openjpeg.h"  // For OPJ_SIZE_T.
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_IccProfileCache;
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_IccTransformCache;
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ColorSpace;
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_BasicModule : public ICodec_BasicModule {
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // ICodec_BasicModule:
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL RunLengthEncode(const uint8_t* src_buf,
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                          FX_DWORD src_size,
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                          uint8_t*& dest_buf,
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                          FX_DWORD& dest_size) override;
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL A85Encode(const uint8_t* src_buf,
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    FX_DWORD src_size,
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    uint8_t*& dest_buf,
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    FX_DWORD& dest_size) override;
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* src_buf,
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 FX_DWORD src_size,
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 int width,
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 int height,
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 int nComps,
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 int bpc) override;
41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder {
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CCodec_ScanlineDecoder();
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CCodec_ScanlineDecoder() override;
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // ICodec_ScanlineDecoder
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetSrcOffset() override { return -1; }
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DownScale(int dest_width, int dest_height) override;
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const uint8_t* GetScanline(int line) override;
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) override;
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetWidth() override { return m_OutputWidth; }
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetHeight() override { return m_OutputHeight; }
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CountComps() override { return m_nComps; }
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetBPC() override { return m_bpc; }
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsColorTransformed() override { return m_bColorTransformed; }
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void ClearImageData() override { m_pDataCache.reset(); }
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  class ImageDataCache {
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann   public:
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ImageDataCache(int width, int height, FX_DWORD pitch);
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ~ImageDataCache();
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bool AllocateCache();
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    void AppendLine(const uint8_t* line);
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int NumLines() const { return m_nCachedLines; }
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const uint8_t* GetLine(int line) const;
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bool IsSameDimensions(int width, int height) const {
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return width == m_Width && height == m_Height;
73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann   private:
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bool IsValid() const { return m_Data.get() != nullptr; }
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const int m_Width;
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const int m_Height;
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const FX_DWORD m_Pitch;
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int m_nCachedLines;
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    std::unique_ptr<uint8_t, FxFreeDeleter> m_Data;
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  };
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL v_Rewind() = 0;
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual uint8_t* v_GetNextLine() = 0;
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void v_DownScale(int dest_width, int dest_height) = 0;
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t* ReadNextLine();
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int m_OrigWidth;
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int m_OrigHeight;
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int m_DownScale;
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int m_OutputWidth;
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int m_OutputHeight;
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int m_nComps;
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int m_bpc;
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD m_Pitch;
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL m_bColorTransformed;
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int m_NextLine;
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t* m_pLastScanline;
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::unique_ptr<ImageDataCache> m_pDataCache;
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_FaxModule : public ICodec_FaxModule {
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // ICodec_FaxModule:
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_DWORD src_size,
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int width,
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int height,
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int K,
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_BOOL EndOfLine,
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_BOOL EncodedByteAlign,
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_BOOL BlackIs1,
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int Columns,
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int Rows) override;
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL Encode(const uint8_t* src_buf,
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 int width,
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 int height,
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 int pitch,
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 uint8_t*& dest_buf,
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 FX_DWORD& dest_size) override;
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_FlateModule : public ICodec_FlateModule {
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                FX_DWORD src_size,
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int width,
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int height,
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int nComps,
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int bpc,
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int predictor,
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int Colors,
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int BitsPerComponent,
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int Columns);
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW,
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    const uint8_t* src_buf,
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    FX_DWORD src_size,
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    FX_BOOL bEarlyChange,
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int predictor,
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int Colors,
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int BitsPerComponent,
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    int Columns,
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    FX_DWORD estimated_size,
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    uint8_t*& dest_buf,
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    FX_DWORD& dest_size);
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL Encode(const uint8_t* src_buf,
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         FX_DWORD src_size,
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         int predictor,
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         int Colors,
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         int BitsPerComponent,
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         int Columns,
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         uint8_t*& dest_buf,
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         FX_DWORD& dest_size);
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL Encode(const uint8_t* src_buf,
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         FX_DWORD src_size,
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         uint8_t*& dest_buf,
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         FX_DWORD& dest_size);
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_JpegModule : public ICodec_JpegModule {
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CCodec_JpegModule() {}
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_DWORD src_size,
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int width,
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int height,
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int nComps,
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_BOOL ColorTransform) override;
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL LoadInfo(const uint8_t* src_buf,
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_DWORD src_size,
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   int& width,
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   int& height,
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   int& num_components,
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   int& bits_per_components,
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_BOOL& color_transform,
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   uint8_t** icc_buf_ptr,
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_DWORD* icc_length) override;
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL Encode(const CFX_DIBSource* pSource,
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 uint8_t*& dest_buf,
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 FX_STRSIZE& dest_size,
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 int quality,
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 const uint8_t* icc_buf,
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 FX_DWORD icc_length) override;
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* Start() override;
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void Finish(void* pContext) override;
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void Input(void* pContext,
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             const uint8_t* src_buf,
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             FX_DWORD src_size) override;
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef PDF_ENABLE_XFA
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int ReadHeader(void* pContext, int* width, int* height, int* nComps) override;
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else   // PDF_ENABLE_XFA
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int ReadHeader(void* pContext,
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 int* width,
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 int* height,
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 int* nComps,
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 CFX_DIBAttribute* pAttribute) override;
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int StartScanline(void* pContext, int down_scale) override;
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) override;
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr) override;
204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PNG_ERROR_SIZE 256
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_PngModule : public ICodec_PngModule {
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CCodec_PngModule() { FXSYS_memset(m_szLastError, '\0', PNG_ERROR_SIZE); }
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void* Start(void* pModule);
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void Finish(void* pContext);
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL Input(void* pContext,
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        const uint8_t* src_buf,
216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD src_size,
217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        CFX_DIBAttribute* pAttribute);
218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CHAR m_szLastError[PNG_ERROR_SIZE];
221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_GifModule : public ICodec_GifModule {
223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CCodec_GifModule() { FXSYS_memset(m_szLastError, '\0', 256); }
225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void* Start(void* pModule);
226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void Finish(void* pContext);
227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr);
228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void Input(void* pContext, const uint8_t* src_buf, FX_DWORD src_size);
229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t ReadHeader(void* pContext,
231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             int* width,
232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             int* height,
233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             int* pal_num,
234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             void** pal_pp,
235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             int* bg_index,
236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             CFX_DIBAttribute* pAttribute);
237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t LoadFrameInfo(void* pContext, int* frame_num);
239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int32_t LoadFrame(void* pContext,
241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int frame_num,
242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            CFX_DIBAttribute* pAttribute);
243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CHAR m_szLastError[256];
246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_BmpModule : public ICodec_BmpModule {
248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CCodec_BmpModule() { FXSYS_memset(m_szLastError, 0, sizeof(m_szLastError)); }
250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* Start(void* pModule) override;
251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void Finish(void* pContext) override;
252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr) override;
253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void Input(void* pContext,
254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             const uint8_t* src_buf,
255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             FX_DWORD src_size) override;
256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t ReadHeader(void* pContext,
257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     int32_t* width,
258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     int32_t* height,
259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     FX_BOOL* tb_flag,
260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     int32_t* components,
261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     int32_t* pal_num,
262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     FX_DWORD** pal_pp,
263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     CFX_DIBAttribute* pAttribute) override;
264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t LoadImage(void* pContext) override;
265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_CHAR m_szLastError[256];
268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_IccModule : public ICodec_IccModule {
272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CCodec_IccModule() override;
274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // ICodec_IccModule:
276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IccCS GetProfileCS(const uint8_t* pProfileData,
277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     unsigned int dwProfileSize) override;
278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IccCS GetProfileCS(IFX_FileRead* pFile) override;
279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* CreateTransform(ICodec_IccModule::IccParam* pInputParam,
280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        ICodec_IccModule::IccParam* pOutputParam,
281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        ICodec_IccModule::IccParam* pProofParam = NULL,
282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL,
283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD dwFlag = Icc_FLAGS_DEFAULT,
284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC,
285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING) override;
286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* CreateTransform_sRGB(
287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const uint8_t* pProfileData,
288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_DWORD dwProfileSize,
289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int32_t& nComponents,
290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int32_t intent = 0,
291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT) override;
292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* CreateTransform_CMYK(
293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const uint8_t* pSrcProfileData,
294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_DWORD dwSrcProfileSize,
295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int32_t& nSrcComponents,
296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const uint8_t* pDstProfileData,
297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_DWORD dwDstProfileSize,
298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int32_t intent = 0,
299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT,
300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT) override;
301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DestroyTransform(void* pTransform) override;
302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void Translate(void* pTransform,
303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 FX_FLOAT* pSrcValues,
304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 FX_FLOAT* pDestValues) override;
305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void TranslateScanline(void* pTransform,
306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         uint8_t* pDest,
307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         const uint8_t* pSrc,
308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         int pixels) override;
309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SetComponents(FX_DWORD nComponents) override {
310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_nComponents = nComponents;
311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  enum Icc_CLASS {
315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Icc_CLASS_INPUT = 0,
316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Icc_CLASS_OUTPUT,
317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Icc_CLASS_PROOF,
318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Icc_CLASS_MAX
319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  };
320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* CreateProfile(ICodec_IccModule::IccParam* pIccParam,
321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      Icc_CLASS ic,
322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      CFX_BinaryBuf* pTransformKey);
323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD m_nComponents;
325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::map<CFX_ByteString, CFX_IccTransformCache*> m_MapTranform;
326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::map<CFX_ByteString, CFX_IccProfileCache*> m_MapProfile;
327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_JpxModule : public ICodec_JpxModule {
330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CCodec_JpxModule();
332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CCodec_JpxModule() override;
333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // ICodec_JpxModule:
335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJPX_Decoder* CreateDecoder(const uint8_t* src_buf,
336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              FX_DWORD src_size,
337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              CPDF_ColorSpace* cs) override;
338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetImageInfo(CJPX_Decoder* pDecoder,
339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    FX_DWORD* width,
340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    FX_DWORD* height,
341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    FX_DWORD* components) override;
342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bool Decode(CJPX_Decoder* pDecoder,
343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              uint8_t* dest_data,
344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              int pitch,
345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              const std::vector<uint8_t>& offsets) override;
346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DestroyDecoder(CJPX_Decoder* pDecoder) override;
347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_TiffModule : public ICodec_TiffModule {
351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // ICodec_TiffModule
353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* CreateDecoder(IFX_FileRead* file_ptr) override;
354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetFrames(void* ctx, int32_t& frames) override;
355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL LoadFrameInfo(void* ctx,
356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        int32_t frame,
357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD& width,
358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD& height,
359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD& comps,
360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_DWORD& bpc,
361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        CFX_DIBAttribute* pAttribute) override;
362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL Decode(void* ctx, class CFX_DIBitmap* pDIBitmap) override;
363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DestroyDecoder(void* ctx) override;
364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CCodec_TiffModule() override {}
367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_Jbig2Context {
371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CCodec_Jbig2Context();
373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CCodec_Jbig2Context() {}
374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD m_width;
376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD m_height;
377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_StreamAcc* m_pGlobalStream;
378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_StreamAcc* m_pSrcStream;
379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t* m_dest_buf;
380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD m_dest_pitch;
381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IFX_Pause* m_pPause;
382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_Context* m_pContext;
383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CJBig2_Image* m_dest_image;
384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CCodec_Jbig2Module : public ICodec_Jbig2Module {
386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CCodec_Jbig2Module() {}
388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CCodec_Jbig2Module() override;
389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // ICodec_Jbig2Module
391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void* CreateJbig2Context() override;
392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FXCODEC_STATUS StartDecode(void* pJbig2Context,
393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             CFX_PrivateData* pPrivateData,
394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             FX_DWORD width,
395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             FX_DWORD height,
396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             CPDF_StreamAcc* src_stream,
397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             CPDF_StreamAcc* global_stream,
398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             uint8_t* dest_buf,
399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             FX_DWORD dest_pitch,
400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             IFX_Pause* pPause) override;
401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FXCODEC_STATUS ContinueDecode(void* pJbig2Context,
402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                IFX_Pause* pPause) override;
403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DestroyJbig2Context(void* pJbig2Context) override;
404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct DecodeData {
407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  DecodeData(unsigned char* src_data, OPJ_SIZE_T src_size)
409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      : src_data(src_data), src_size(src_size), offset(0) {}
410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  unsigned char* src_data;
411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  OPJ_SIZE_T src_size;
412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  OPJ_SIZE_T offset;
413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid sycc420_to_rgb(opj_image_t* img);
416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* Wrappers for C-style callbacks. */
418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannOPJ_SIZE_T opj_read_from_memory(void* p_buffer,
419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                OPJ_SIZE_T nb_bytes,
420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                void* p_user_data);
421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannOPJ_SIZE_T opj_write_from_memory(void* p_buffer,
422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 OPJ_SIZE_T nb_bytes,
423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 void* p_user_data);
424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannOPJ_OFF_T opj_skip_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data);
425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannOPJ_BOOL opj_seek_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data);
426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif  // CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_
428