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