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#include <limits.h> 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_BasicModule : public ICodec_BasicModule 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL RunLengthEncode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& dest_size); 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL A85Encode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& dest_size); 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height, 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nComps, int bpc); 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CCodec_ImageDataCache { 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Width, m_Height; 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_nCachedLines; 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE m_Data; 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CCodec_ScanlineDecoder(); 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CCodec_ScanlineDecoder(); 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetSrcOffset() 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DownScale(int dest_width, int dest_height); 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE GetScanline(int line); 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL SkipToScanline(int line, IFX_Pause* pPause); 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetWidth() 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_OutputWidth; 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetHeight() 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_OutputHeight; 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int CountComps() 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_nComps; 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetBPC() 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bpc; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsColorTransformed() 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bColorTransformed; 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ClearImageData() 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pDataCache) { 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_Free(m_pDataCache); 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pDataCache = NULL; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_OrigWidth; 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_OrigHeight; 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_DownScale; 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_OutputWidth; 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_OutputHeight; 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_nComps; 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_bpc; 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Pitch; 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bColorTransformed; 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE ReadNextLine(); 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL v_Rewind() = 0; 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPBYTE v_GetNextLine() = 0; 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void v_DownScale(int dest_width, int dest_height) = 0; 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_NextLine; 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE m_pLastScanline; 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CCodec_ImageDataCache* m_pDataCache; 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_FaxModule : public ICodec_FaxModule 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height, 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1, int Columns, int Rows); 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Encode(FX_LPCBYTE src_buf, int width, int height, int pitch, FX_LPBYTE& dest_buf, FX_DWORD& dest_size); 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_FlateModule : public ICodec_FlateModule 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height, 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, int Columns); 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW, const FX_BYTE* src_buf, FX_DWORD src_size, FX_BOOL bEarlyChange, 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int predictor, int Colors, int BitsPerComponent, int Columns, 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD estimated_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size); 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Encode(const FX_BYTE* src_buf, FX_DWORD src_size, 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int predictor, int Colors, int BitsPerComponent, int Columns, 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE& dest_buf, FX_DWORD& dest_size); 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Encode(FX_LPCBYTE src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size); 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_JpegModule : public ICodec_JpegModule 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CCodec_JpegModule() : m_pExtProvider(NULL) {} 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetPovider(IFX_JpegProvider* pJP) 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pExtProvider = pJP; 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int width, int height, int nComps, FX_BOOL ColorTransform); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadInfo(FX_LPCBYTE src_buf, FX_DWORD src_size, int& width, int& height, 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int& num_components, int& bits_per_components, FX_BOOL& color_transform, 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE* icc_buf_ptr, FX_DWORD* icc_length); 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Encode(const CFX_DIBSource* pSource, FX_LPBYTE& dest_buf, FX_STRSIZE& dest_size, int quality, FX_LPCBYTE icc_buf, FX_DWORD icc_length); 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* Start(); 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Finish(void* pContext); 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size); 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int ReadHeader(void* pContext, int* width, int* height, int* nComps); 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL StartScanline(void* pContext, int down_scale); 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL ReadScanline(void* pContext, FX_LPBYTE dest_buf); 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetAvailInput(void* pContext, FX_LPBYTE* avail_buf_ptr); 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_JpegProvider* m_pExtProvider; 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_IccModule : public ICodec_IccModule 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual IccCS GetProfileCS(FX_LPCBYTE pProfileData, unsigned int dwProfileSize); 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual IccCS GetProfileCS(IFX_FileRead* pFile); 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID CreateTransform(ICodec_IccModule::IccParam* pInputParam, 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_IccModule::IccParam* pOutputParam, 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ICodec_IccModule::IccParam* pProofParam = NULL, 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL, 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwFlag = Icc_FLAGS_DEFAULT, 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC, 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID CreateTransform_sRGB(FX_LPCBYTE pProfileData, unsigned int dwProfileSize, int nComponents, int intent = 0, 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT); 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID CreateTransform_CMYK(FX_LPCBYTE pSrcProfileData, unsigned int dwSrcProfileSize, int nSrcComponents, 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE pDstProfileData, unsigned int dwDstProfileSize, int intent = 0, 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT, 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DestroyTransform(FX_LPVOID pTransform); 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Translate(FX_LPVOID pTransform, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues); 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void TranslateScanline(FX_LPVOID pTransform, FX_LPBYTE pDest, FX_LPCBYTE pSrc, int pixels); 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CCodec_IccModule(); 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_MapByteStringToPtr m_MapTranform; 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_MapByteStringToPtr m_MapProfile; 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef enum { 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Icc_CLASS_INPUT = 0, 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Icc_CLASS_OUTPUT, 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Icc_CLASS_PROOF, 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Icc_CLASS_MAX 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } Icc_CLASS; 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPVOID CreateProfile(ICodec_IccModule::IccParam* pIccParam, Icc_CLASS ic, CFX_BinaryBuf* pTransformKey); 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_JpxModule : public ICodec_JpxModule 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CCodec_JpxModule(); 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, FX_BOOL useColorSpace = FALSE); 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GetImageInfo(FX_LPVOID ctx, FX_DWORD& width, FX_DWORD& height, 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& codestream_nComps, FX_DWORD& output_nComps); 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Decode(void* ctx, FX_LPBYTE dest_data, int pitch, FX_BOOL bTranslateColor, FX_LPBYTE offsets); 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void DestroyDecoder(void* ctx); 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../jbig2/JBig2_Context.h" 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Jbig2Interface : public CFX_Object, public CJBig2_Module 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void *JBig2_Malloc(FX_DWORD dwSize) 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FX_Alloc(FX_BYTE, dwSize); 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void *JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (dwSize && num >= UINT_MAX / dwSize) { 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FX_Alloc(FX_BYTE, num * dwSize); 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void *JBig2_Malloc3(FX_DWORD num, FX_DWORD dwSize, FX_DWORD dwSize2) 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (dwSize2 && dwSize >= UINT_MAX / dwSize2) { 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD size = dwSize2 * dwSize; 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (size && num >= UINT_MAX / size) { 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FX_Alloc(FX_BYTE, num * size); 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void *JBig2_Realloc(FX_LPVOID pMem, FX_DWORD dwSize) 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FX_Realloc(FX_BYTE, pMem, dwSize); 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void JBig2_Free(FX_LPVOID pMem) 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_Free(pMem); 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_Jbig2Context : public CFX_Object 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CCodec_Jbig2Context(); 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CCodec_Jbig2Context() {}; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FileRead* m_file_ptr; 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_width; 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_height; 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE m_src_buf; 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_src_size; 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE m_global_data; 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_global_size; 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE m_dest_buf; 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dest_pitch; 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bFileReader; 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_Pause* m_pPause; 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJBig2_Context* m_pContext; 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJBig2_Image* m_dest_image; 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CCodec_Jbig2Module : public ICodec_Jbig2Module 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CCodec_Jbig2Module() {}; 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CCodec_Jbig2Module(); 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Decode(FX_DWORD width, FX_DWORD height, FX_LPCBYTE src_buf, FX_DWORD src_size, 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE global_data, FX_DWORD global_size, FX_LPBYTE dest_buf, FX_DWORD dest_pitch); 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Decode(IFX_FileRead* file_ptr, 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, FX_LPBYTE& dest_buf); 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* CreateJbig2Context(); 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXCODEC_STATUS StartDecode(void* pJbig2Context, FX_DWORD width, FX_DWORD height, FX_LPCBYTE src_buf, FX_DWORD src_size, 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE global_data, FX_DWORD global_size, FX_LPBYTE dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause); 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXCODEC_STATUS StartDecode(void* pJbig2Context, IFX_FileRead* file_ptr, 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, FX_LPBYTE& dest_buf, IFX_Pause* pPause); 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXCODEC_STATUS ContinueDecode(void* pJbig2Context, IFX_Pause* pPause); 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void DestroyJbig2Context(void* pJbig2Context); 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Jbig2Interface m_Module; 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 271