1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_CODEC_H_ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FX_CODEC_H_ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FXCRT_EXTENSION_ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../fxcrt/fx_ext.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_codec_def.h" 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_codec_provider.h" 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_DIBSource; 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_ScanlineDecoder; 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_BasicModule; 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_FaxModule; 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_JpegModule; 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_JpxModule; 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_Jbig2Module; 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_IccModule; 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_FlateModule; 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_Jbig2Encoder; 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_ScanlineDecoder; 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_ModuleMgr : public CFX_Object 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CCodec_ModuleMgr* Create(); 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Destroy(); 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void InitJbig2Decoder(); 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void InitJpxDecoder(); 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void InitIccDecoder(); 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_Jbig2Encoder* CreateJbig2Encoder(); 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CCodec_ModuleMgr(); 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CCodec_ModuleMgr(); 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_BasicModule* GetBasicModule() 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pBasicModule; 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_FaxModule* GetFaxModule() 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pFaxModule; 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_JpegModule* GetJpegModule() 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pJpegModule; 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_JpxModule* GetJpxModule() 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pJpxModule; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_Jbig2Module* GetJbig2Module() 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pJbig2Module; 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_IccModule* GetIccModule() 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pIccModule; 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_FlateModule* GetFlateModule() 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pFlateModule; 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_BasicModule* m_pBasicModule; 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_FaxModule* m_pFaxModule; 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_JpegModule* m_pJpegModule; 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_JpxModule* m_pJpxModule; 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_Jbig2Module* m_pJbig2Module; 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_IccModule* m_pIccModule; 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_FlateModule* m_pFlateModule; 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_BasicModule : public CFX_Object 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_BasicModule() {} 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL RunLengthEncode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& dest_size) = 0; 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL A85Encode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& dest_size) = 0; 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height, 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nComps, int bpc) = 0; 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_ScanlineDecoder : public CFX_Object 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_ScanlineDecoder() {} 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetSrcOffset() = 0; 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DownScale(int dest_width, int dest_height) = 0; 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPBYTE GetScanline(int line) = 0; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) = 0; 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int GetWidth() = 0; 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int GetHeight() = 0; 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int CountComps() = 0; 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int GetBPC() = 0; 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsColorTransformed() = 0; 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void ClearImageData() = 0; 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_FlateModule : public CFX_Object 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_FlateModule() {} 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height, 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, int Columns) = 0; 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW, const FX_BYTE* src_buf, FX_DWORD src_size, FX_BOOL bEarlyChange, 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int predictor, int Colors, int BitsPerComponent, int Columns, 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD estimated_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size) = 0; 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Encode(const FX_BYTE* src_buf, FX_DWORD src_size, 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int predictor, int Colors, int BitsPerComponent, int Columns, 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE& dest_buf, FX_DWORD& dest_size) = 0; 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Encode(FX_LPCBYTE src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size) = 0; 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_FaxModule : public CFX_Object 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_FaxModule() {} 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height, 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1, int Columns, int Rows) = 0; 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Encode(FX_LPCBYTE src_buf, int width, int height, int pitch, 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE& dest_buf, FX_DWORD& dest_size) = 0; 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_JpegModule : public CFX_Object 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_JpegModule() {} 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void SetPovider(IFX_JpegProvider* pJP) = 0; 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int width, int height, int nComps, FX_BOOL ColorTransform) = 0; 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL LoadInfo(FX_LPCBYTE src_buf, FX_DWORD src_size, int& width, int& height, 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int& num_components, int& bits_per_components, FX_BOOL& color_transform, 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE* icc_buf_ptr = NULL, FX_DWORD* icc_length = NULL) = 0; 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Encode(const class CFX_DIBSource* pSource, FX_LPBYTE& dest_buf, FX_STRSIZE& dest_size, int quality = 75, 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE icc_buf = NULL, FX_DWORD icc_length = 0) = 0; 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* Start() = 0; 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Finish(void* pContext) = 0; 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size) = 0; 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int ReadHeader(void* pContext, int* width, int* height, int* nComps) = 0; 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int StartScanline(void* pContext, int down_scale) = 0; 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL ReadScanline(void* pContext, FX_LPBYTE dest_buf) = 0; 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetAvailInput(void* pContext, FX_LPBYTE* avail_buf_ptr = NULL) = 0; 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_JpxModule : public CFX_Object 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_JpxModule() {} 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, FX_BOOL useColorSpace = FALSE) = 0; 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void GetImageInfo(FX_LPVOID ctx, FX_DWORD& width, FX_DWORD& height, 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& codestream_nComps, FX_DWORD& output_nComps) = 0; 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Decode(FX_LPVOID ctx, FX_LPBYTE dest_data, int pitch, 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bTranslateColor, FX_LPBYTE offsets) = 0; 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DestroyDecoder(FX_LPVOID ctx) = 0; 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_Jbig2Module : public CFX_Object 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_Jbig2Module() {} 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Decode(FX_DWORD width, FX_DWORD height, FX_LPCBYTE src_buf, FX_DWORD src_size, 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE global_data, FX_DWORD global_size, FX_LPBYTE dest_buf, FX_DWORD dest_pitch) = 0; 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Decode(IFX_FileRead* file_ptr, FX_DWORD& width, FX_DWORD& height, 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& pitch, FX_LPBYTE& dest_buf) = 0; 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* CreateJbig2Context() = 0; 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FXCODEC_STATUS StartDecode(void* pJbig2Context, FX_DWORD width, FX_DWORD height, FX_LPCBYTE src_buf, FX_DWORD src_size, 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE global_data, FX_DWORD global_size, FX_LPBYTE dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause) = 0; 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FXCODEC_STATUS StartDecode(void* pJbig2Context, IFX_FileRead* file_ptr, 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, FX_LPBYTE& dest_buf, IFX_Pause* pPause) = 0; 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FXCODEC_STATUS ContinueDecode(void* pJbig2Content, IFX_Pause* pPause) = 0; 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DestroyJbig2Context(void* pJbig2Content) = 0; 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_Jbig2Encoder : public CFX_Object 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_Jbig2Encoder() {} 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ICodec_IccModule : public CFX_Object 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef enum { 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Unknown = 0, 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_XYZ, 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Lab, 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Luv, 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_YCbCr, 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Yxy, 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Hsv, 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Hls, 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Gray, 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Rgb, 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Cmyk, 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS_Cmy 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } IccCS; 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct _IccParam { 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD Version; 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IccCS ColorSpace; 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwProfileType; 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwFormat; 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE pProfileData; 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwProfileSize; 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double Gamma; 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } IccParam; 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~ICodec_IccModule() {} 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual IccCS GetProfileCS(FX_LPCBYTE pProfileData, unsigned int dwProfileSize) = 0; 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual IccCS GetProfileCS(IFX_FileRead* pFile) = 0; 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID CreateTransform(ICodec_IccModule::IccParam* pInputParam, 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_IccModule::IccParam* pOutputParam, 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_IccModule::IccParam* pProofParam = NULL, 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL, 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwFlag = Icc_FLAGS_DEFAULT, 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC, 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) = 0; 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID CreateTransform_sRGB(FX_LPCBYTE pProfileData, unsigned int dwProfileSize, int nComponents, int intent = 0, 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT) = 0; 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID CreateTransform_CMYK(FX_LPCBYTE pSrcProfileData, unsigned int dwSrcProfileSize, int nSrcComponents, 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE pDstProfileData, unsigned int dwDstProfileSize, int intent = 0, 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT, 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) = 0; 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DestroyTransform(FX_LPVOID pTransform) = 0; 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Translate(FX_LPVOID pTransform, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues) = 0; 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void TranslateScanline(FX_LPVOID pTransform, FX_LPBYTE pDest, FX_LPCBYTE pSrc, int pixels) = 0; 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid AdobeCMYK_to_sRGB(FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B); 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid AdobeCMYK_to_sRGB1(FX_BYTE c, FX_BYTE m, FX_BYTE y, FX_BYTE k, FX_BYTE& R, FX_BYTE& G, FX_BYTE& B); 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL MD5ComputeID(FX_LPCVOID buf, FX_DWORD dwSize, FX_BYTE ID[16]); 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 289