OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 class CCodec_BasicModule : public ICodec_BasicModule | 8 class CCodec_BasicModule : public ICodec_BasicModule { |
9 { | 9 public: |
10 public: | 10 virtual FX_BOOL RunLengthEncode(const FX_BYTE* src_buf, |
11 virtual FX_BOOL» RunLengthEncode(const FX_BYTE* src_buf, FX_DWORD src_siz
e, FX_LPBYTE& dest_buf, | 11 FX_DWORD src_size, |
| 12 FX_LPBYTE& dest_buf, |
| 13 FX_DWORD& dest_size); |
| 14 virtual FX_BOOL A85Encode(const FX_BYTE* src_buf, |
| 15 FX_DWORD src_size, |
| 16 FX_LPBYTE& dest_buf, |
| 17 FX_DWORD& dest_size); |
| 18 virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(FX_LPCBYTE src_buf, |
| 19 FX_DWORD src_size, |
| 20 int width, |
| 21 int height, |
| 22 int nComps, |
| 23 int bpc); |
| 24 }; |
| 25 struct CCodec_ImageDataCache { |
| 26 int m_Width, m_Height; |
| 27 int m_nCachedLines; |
| 28 FX_BYTE m_Data; |
| 29 }; |
| 30 class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder { |
| 31 public: |
| 32 CCodec_ScanlineDecoder(); |
| 33 |
| 34 virtual ~CCodec_ScanlineDecoder(); |
| 35 |
| 36 virtual FX_DWORD GetSrcOffset() { return -1; } |
| 37 |
| 38 virtual void DownScale(int dest_width, int dest_height); |
| 39 |
| 40 FX_LPBYTE GetScanline(int line); |
| 41 |
| 42 FX_BOOL SkipToScanline(int line, IFX_Pause* pPause); |
| 43 |
| 44 int GetWidth() { return m_OutputWidth; } |
| 45 |
| 46 int GetHeight() { return m_OutputHeight; } |
| 47 |
| 48 int CountComps() { return m_nComps; } |
| 49 |
| 50 int GetBPC() { return m_bpc; } |
| 51 |
| 52 FX_BOOL IsColorTransformed() { return m_bColorTransformed; } |
| 53 |
| 54 void ClearImageData() { |
| 55 if (m_pDataCache) { |
| 56 FX_Free(m_pDataCache); |
| 57 } |
| 58 m_pDataCache = NULL; |
| 59 } |
| 60 |
| 61 protected: |
| 62 int m_OrigWidth; |
| 63 |
| 64 int m_OrigHeight; |
| 65 |
| 66 int m_DownScale; |
| 67 |
| 68 int m_OutputWidth; |
| 69 |
| 70 int m_OutputHeight; |
| 71 |
| 72 int m_nComps; |
| 73 |
| 74 int m_bpc; |
| 75 |
| 76 int m_Pitch; |
| 77 |
| 78 FX_BOOL m_bColorTransformed; |
| 79 |
| 80 FX_LPBYTE ReadNextLine(); |
| 81 |
| 82 virtual FX_BOOL v_Rewind() = 0; |
| 83 |
| 84 virtual FX_LPBYTE v_GetNextLine() = 0; |
| 85 |
| 86 virtual void v_DownScale(int dest_width, int dest_height) = 0; |
| 87 |
| 88 int m_NextLine; |
| 89 |
| 90 FX_LPBYTE m_pLastScanline; |
| 91 |
| 92 CCodec_ImageDataCache* m_pDataCache; |
| 93 }; |
| 94 class CCodec_FaxModule : public ICodec_FaxModule { |
| 95 public: |
| 96 virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, |
| 97 FX_DWORD src_size, |
| 98 int width, |
| 99 int height, |
| 100 int K, |
| 101 FX_BOOL EndOfLine, |
| 102 FX_BOOL EncodedByteAlign, |
| 103 FX_BOOL BlackIs1, |
| 104 int Columns, |
| 105 int Rows); |
| 106 FX_BOOL Encode(FX_LPCBYTE src_buf, |
| 107 int width, |
| 108 int height, |
| 109 int pitch, |
| 110 FX_LPBYTE& dest_buf, |
| 111 FX_DWORD& dest_size); |
| 112 }; |
| 113 class CCodec_FlateModule : public ICodec_FlateModule { |
| 114 public: |
| 115 virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, |
| 116 FX_DWORD src_size, |
| 117 int width, |
| 118 int height, |
| 119 int nComps, |
| 120 int bpc, |
| 121 int predictor, |
| 122 int Colors, |
| 123 int BitsPerComponent, |
| 124 int Columns); |
| 125 virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW, |
| 126 const FX_BYTE* src_buf, |
| 127 FX_DWORD src_size, |
| 128 FX_BOOL bEarlyChange, |
| 129 int predictor, |
| 130 int Colors, |
| 131 int BitsPerComponent, |
| 132 int Columns, |
| 133 FX_DWORD estimated_size, |
| 134 FX_LPBYTE& dest_buf, |
12 FX_DWORD& dest_size); | 135 FX_DWORD& dest_size); |
13 virtual FX_BOOL» A85Encode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_
LPBYTE& dest_buf, | 136 virtual FX_BOOL Encode(const FX_BYTE* src_buf, |
14 FX_DWORD& dest_size); | 137 FX_DWORD src_size, |
15 virtual ICodec_ScanlineDecoder*» CreateRunLengthDecoder(FX_LPCBYTE src_bu
f, FX_DWORD src_size, int width, int height, | 138 int predictor, |
16 int nComps, int bpc); | 139 int Colors, |
17 }; | 140 int BitsPerComponent, |
18 struct CCodec_ImageDataCache { | 141 int Columns, |
19 int»» » m_Width, m_Height; | 142 FX_LPBYTE& dest_buf, |
20 int»» » m_nCachedLines; | 143 FX_DWORD& dest_size); |
21 FX_BYTE» » m_Data; | 144 virtual FX_BOOL Encode(FX_LPCBYTE src_buf, |
22 }; | 145 FX_DWORD src_size, |
23 class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder | 146 FX_LPBYTE& dest_buf, |
24 { | 147 FX_DWORD& dest_size); |
25 public: | 148 }; |
26 | 149 class CCodec_JpegModule : public ICodec_JpegModule { |
27 CCodec_ScanlineDecoder(); | 150 public: |
28 | 151 CCodec_JpegModule() : m_pExtProvider(NULL) {} |
29 virtual ~CCodec_ScanlineDecoder(); | 152 void SetPovider(IFX_JpegProvider* pJP) { m_pExtProvider = pJP; } |
30 | 153 ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, |
31 virtual FX_DWORD» GetSrcOffset() | 154 FX_DWORD src_size, |
32 { | 155 int width, |
33 return -1; | 156 int height, |
| 157 int nComps, |
| 158 FX_BOOL ColorTransform); |
| 159 FX_BOOL LoadInfo(FX_LPCBYTE src_buf, |
| 160 FX_DWORD src_size, |
| 161 int& width, |
| 162 int& height, |
| 163 int& num_components, |
| 164 int& bits_per_components, |
| 165 FX_BOOL& color_transform, |
| 166 FX_LPBYTE* icc_buf_ptr, |
| 167 FX_DWORD* icc_length); |
| 168 FX_BOOL Encode(const CFX_DIBSource* pSource, |
| 169 FX_LPBYTE& dest_buf, |
| 170 FX_STRSIZE& dest_size, |
| 171 int quality, |
| 172 FX_LPCBYTE icc_buf, |
| 173 FX_DWORD icc_length); |
| 174 virtual void* Start(); |
| 175 virtual void Finish(void* pContext); |
| 176 virtual void Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size); |
| 177 virtual int ReadHeader(void* pContext, int* width, int* height, int* nComps); |
| 178 virtual FX_BOOL StartScanline(void* pContext, int down_scale); |
| 179 virtual FX_BOOL ReadScanline(void* pContext, FX_LPBYTE dest_buf); |
| 180 virtual FX_DWORD GetAvailInput(void* pContext, FX_LPBYTE* avail_buf_ptr); |
| 181 |
| 182 protected: |
| 183 IFX_JpegProvider* m_pExtProvider; |
| 184 }; |
| 185 class CCodec_IccModule : public ICodec_IccModule { |
| 186 public: |
| 187 virtual IccCS GetProfileCS(FX_LPCBYTE pProfileData, |
| 188 unsigned int dwProfileSize); |
| 189 virtual IccCS GetProfileCS(IFX_FileRead* pFile); |
| 190 virtual FX_LPVOID CreateTransform( |
| 191 ICodec_IccModule::IccParam* pInputParam, |
| 192 ICodec_IccModule::IccParam* pOutputParam, |
| 193 ICodec_IccModule::IccParam* pProofParam = NULL, |
| 194 FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL, |
| 195 FX_DWORD dwFlag = Icc_FLAGS_DEFAULT, |
| 196 FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC, |
| 197 FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING); |
| 198 virtual FX_LPVOID CreateTransform_sRGB( |
| 199 FX_LPCBYTE pProfileData, |
| 200 unsigned int dwProfileSize, |
| 201 int nComponents, |
| 202 int intent = 0, |
| 203 FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT); |
| 204 virtual FX_LPVOID CreateTransform_CMYK( |
| 205 FX_LPCBYTE pSrcProfileData, |
| 206 unsigned int dwSrcProfileSize, |
| 207 int nSrcComponents, |
| 208 FX_LPCBYTE pDstProfileData, |
| 209 unsigned int dwDstProfileSize, |
| 210 int intent = 0, |
| 211 FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT, |
| 212 FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT); |
| 213 virtual void DestroyTransform(FX_LPVOID pTransform); |
| 214 virtual void Translate(FX_LPVOID pTransform, |
| 215 FX_FLOAT* pSrcValues, |
| 216 FX_FLOAT* pDestValues); |
| 217 virtual void TranslateScanline(FX_LPVOID pTransform, |
| 218 FX_LPBYTE pDest, |
| 219 FX_LPCBYTE pSrc, |
| 220 int pixels); |
| 221 virtual void SetComponents(FX_DWORD nComponents) { |
| 222 m_nComponents = nComponents; |
| 223 } |
| 224 virtual ~CCodec_IccModule(); |
| 225 |
| 226 protected: |
| 227 CFX_MapByteStringToPtr m_MapTranform; |
| 228 CFX_MapByteStringToPtr m_MapProfile; |
| 229 FX_DWORD m_nComponents; |
| 230 typedef enum { |
| 231 Icc_CLASS_INPUT = 0, |
| 232 Icc_CLASS_OUTPUT, |
| 233 Icc_CLASS_PROOF, |
| 234 Icc_CLASS_MAX |
| 235 } Icc_CLASS; |
| 236 FX_LPVOID CreateProfile(ICodec_IccModule::IccParam* pIccParam, |
| 237 Icc_CLASS ic, |
| 238 CFX_BinaryBuf* pTransformKey); |
| 239 }; |
| 240 class CCodec_JpxModule : public ICodec_JpxModule { |
| 241 public: |
| 242 CCodec_JpxModule(); |
| 243 void* CreateDecoder(FX_LPCBYTE src_buf, |
| 244 FX_DWORD src_size, |
| 245 FX_BOOL useColorSpace = FALSE); |
| 246 void GetImageInfo(FX_LPVOID ctx, |
| 247 FX_DWORD& width, |
| 248 FX_DWORD& height, |
| 249 FX_DWORD& codestream_nComps, |
| 250 FX_DWORD& output_nComps); |
| 251 FX_BOOL Decode(void* ctx, |
| 252 FX_LPBYTE dest_data, |
| 253 int pitch, |
| 254 FX_BOOL bTranslateColor, |
| 255 FX_LPBYTE offsets); |
| 256 void DestroyDecoder(void* ctx); |
| 257 }; |
| 258 #include "../jbig2/JBig2_Context.h" |
| 259 class CPDF_Jbig2Interface : public CFX_Object, public CJBig2_Module { |
| 260 public: |
| 261 virtual void* JBig2_Malloc(FX_DWORD dwSize) { |
| 262 return FX_Alloc(FX_BYTE, dwSize); |
| 263 } |
| 264 virtual void* JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) { |
| 265 if (dwSize && num >= UINT_MAX / dwSize) { |
| 266 return NULL; |
34 } | 267 } |
35 | 268 return FX_Alloc(FX_BYTE, num * dwSize); |
36 virtual void» » DownScale(int dest_width, int dest_height); | 269 } |
37 | 270 virtual void* JBig2_Malloc3(FX_DWORD num, FX_DWORD dwSize, FX_DWORD dwSize2) { |
38 FX_LPBYTE» » » GetScanline(int line); | 271 if (dwSize2 && dwSize >= UINT_MAX / dwSize2) { |
39 | 272 return NULL; |
40 FX_BOOL» » » » SkipToScanline(int line, IFX_Pause* pPau
se); | |
41 | |
42 int»» » » » GetWidth() | |
43 { | |
44 return m_OutputWidth; | |
45 } | 273 } |
46 | 274 FX_DWORD size = dwSize2 * dwSize; |
47 int»» » » » GetHeight() | 275 if (size && num >= UINT_MAX / size) { |
48 { | 276 return NULL; |
49 return m_OutputHeight; | |
50 } | 277 } |
51 | 278 return FX_Alloc(FX_BYTE, num * size); |
52 int CountComps() | 279 } |
53 { | 280 virtual void* JBig2_Realloc(FX_LPVOID pMem, FX_DWORD dwSize) { |
54 return m_nComps; | 281 return FX_Realloc(FX_BYTE, pMem, dwSize); |
55 } | 282 } |
56 | 283 virtual void JBig2_Free(FX_LPVOID pMem) { FX_Free(pMem); } |
57 int GetBPC() | 284 }; |
58 { | 285 class CCodec_Jbig2Context : public CFX_Object { |
59 return m_bpc; | 286 public: |
60 } | 287 CCodec_Jbig2Context(); |
61 | 288 ~CCodec_Jbig2Context(){}; |
62 FX_BOOL IsColorTransformed() | 289 IFX_FileRead* m_file_ptr; |
63 { | 290 FX_DWORD m_width; |
64 return m_bColorTransformed; | 291 FX_DWORD m_height; |
65 } | 292 FX_LPBYTE m_src_buf; |
66 | 293 FX_DWORD m_src_size; |
67 void ClearImageData() | 294 FX_LPCBYTE m_global_data; |
68 { | 295 FX_DWORD m_global_size; |
69 if (m_pDataCache) { | 296 FX_LPBYTE m_dest_buf; |
70 FX_Free(m_pDataCache); | 297 FX_DWORD m_dest_pitch; |
71 } | 298 FX_BOOL m_bFileReader; |
72 m_pDataCache = NULL; | 299 IFX_Pause* m_pPause; |
73 } | 300 CJBig2_Context* m_pContext; |
74 protected: | 301 CJBig2_Image* m_dest_image; |
75 | 302 }; |
76 int m_OrigWidth; | 303 class CCodec_Jbig2Module : public ICodec_Jbig2Module { |
77 | 304 public: |
78 int m_OrigHeight; | 305 CCodec_Jbig2Module(){}; |
79 | 306 ~CCodec_Jbig2Module(); |
80 int m_DownScale; | 307 FX_BOOL Decode(FX_DWORD width, |
81 | 308 FX_DWORD height, |
82 int m_OutputWidth; | 309 FX_LPCBYTE src_buf, |
83 | 310 FX_DWORD src_size, |
84 int m_OutputHeight; | 311 FX_LPCBYTE global_data, |
85 | 312 FX_DWORD global_size, |
86 int m_nComps; | 313 FX_LPBYTE dest_buf, |
87 | 314 FX_DWORD dest_pitch); |
88 int m_bpc; | 315 FX_BOOL Decode(IFX_FileRead* file_ptr, |
89 | 316 FX_DWORD& width, |
90 int m_Pitch; | 317 FX_DWORD& height, |
91 | 318 FX_DWORD& pitch, |
92 FX_BOOL m_bColorTransformed; | 319 FX_LPBYTE& dest_buf); |
93 | 320 void* CreateJbig2Context(); |
94 FX_LPBYTE ReadNextLine(); | 321 FXCODEC_STATUS StartDecode(void* pJbig2Context, |
95 | 322 FX_DWORD width, |
96 virtual FX_BOOL v_Rewind() = 0; | 323 FX_DWORD height, |
97 | 324 FX_LPCBYTE src_buf, |
98 virtual FX_LPBYTE v_GetNextLine() = 0; | 325 FX_DWORD src_size, |
99 | 326 FX_LPCBYTE global_data, |
100 virtual void v_DownScale(int dest_width, int dest_height) = 0
; | 327 FX_DWORD global_size, |
101 | 328 FX_LPBYTE dest_buf, |
102 int m_NextLine; | 329 FX_DWORD dest_pitch, |
103 | 330 IFX_Pause* pPause); |
104 FX_LPBYTE m_pLastScanline; | 331 |
105 | 332 FXCODEC_STATUS StartDecode(void* pJbig2Context, |
106 CCodec_ImageDataCache* m_pDataCache; | 333 IFX_FileRead* file_ptr, |
107 }; | 334 FX_DWORD& width, |
108 class CCodec_FaxModule : public ICodec_FaxModule | 335 FX_DWORD& height, |
109 { | 336 FX_DWORD& pitch, |
110 public: | 337 FX_LPBYTE& dest_buf, |
111 virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWO
RD src_size, int width, int height, | 338 IFX_Pause* pPause); |
112 int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1
, int Columns, int Rows); | 339 FXCODEC_STATUS ContinueDecode(void* pJbig2Context, IFX_Pause* pPause); |
113 FX_BOOL Encode(FX_LPCBYTE src_buf, int width, int height, int pi
tch, FX_LPBYTE& dest_buf, FX_DWORD& dest_size); | 340 void DestroyJbig2Context(void* pJbig2Context); |
114 }; | 341 CPDF_Jbig2Interface m_Module; |
115 class CCodec_FlateModule : public ICodec_FlateModule | 342 |
116 { | 343 private: |
117 public: | 344 }; |
118 virtual ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWO
RD src_size, int width, int height, | |
119 int nComps, int bpc, int predictor, int Colors, int BitsPerComponent
, int Columns); | |
120 virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW, const FX_BYTE* src_buf, FX_D
WORD src_size, FX_BOOL bEarlyChange, | |
121 int predictor, int Colors, int BitsPerComp
onent, int Columns, | |
122 FX_DWORD estimated_size, FX_LPBYTE& dest_b
uf, FX_DWORD& dest_size); | |
123 virtual FX_BOOL Encode(const FX_BYTE* src_buf, FX_DWORD src_size, | |
124 int predictor, int Colors, int BitsPerComponent, int
Columns, | |
125 FX_LPBYTE& dest_buf, FX_DWORD& dest_size); | |
126 virtual FX_BOOL Encode(FX_LPCBYTE src_buf, FX_DWORD src_size, FX
_LPBYTE& dest_buf, FX_DWORD& dest_size); | |
127 }; | |
128 class CCodec_JpegModule : public ICodec_JpegModule | |
129 { | |
130 public: | |
131 CCodec_JpegModule() : m_pExtProvider(NULL) {} | |
132 void SetPovider(IFX_JpegProvider* pJP) | |
133 { | |
134 m_pExtProvider = pJP; | |
135 } | |
136 ICodec_ScanlineDecoder* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_s
ize, | |
137 int width, int height, int nComps, FX_
BOOL ColorTransform); | |
138 FX_BOOL LoadInfo(FX_LPCBYTE src_buf, FX_DWORD src_size, int& wid
th, int& height, | |
139 int& num_components, int& bits_per_components, FX_BOOL&
color_transform, | |
140 FX_LPBYTE* icc_buf_ptr, FX_DWORD* icc_length); | |
141 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); | |
142 virtual void* Start(); | |
143 virtual void Finish(void* pContext); | |
144 virtual void Input(void* pContext, FX_LPCBYTE src_buf, FX_DWO
RD src_size); | |
145 virtual int ReadHeader(void* pContext, int* width, int* heig
ht, int* nComps); | |
146 virtual FX_BOOL StartScanline(void* pContext, int down_scale); | |
147 virtual FX_BOOL ReadScanline(void* pContext, FX_LPBYTE dest_buf)
; | |
148 virtual FX_DWORD GetAvailInput(void* pContext, FX_LPBYTE* avail_buf_ptr); | |
149 protected: | |
150 IFX_JpegProvider* m_pExtProvider; | |
151 }; | |
152 class CCodec_IccModule : public ICodec_IccModule | |
153 { | |
154 public: | |
155 virtual IccCS GetProfileCS(FX_LPCBYTE pProfileData, un
signed int dwProfileSize); | |
156 virtual IccCS GetProfileCS(IFX_FileRead* pFile); | |
157 virtual FX_LPVOID CreateTransform(ICodec_IccModule::IccParam* pInp
utParam, | |
158 ICodec_IccModule::IccParam* pOutputP
aram, | |
159 ICodec_IccModule::IccParam* pProofPa
ram = NULL, | |
160 FX_DWORD dwIntent = Icc_INTENT_PERCE
PTUAL, | |
161 FX_DWORD dwFlag = Icc_FLAGS_DEFAULT, | |
162 FX_DWORD dwPrfIntent = Icc_INTENT_AB
SOLUTE_COLORIMETRIC, | |
163 FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTP
ROOFING | |
164 ); | |
165 virtual FX_LPVOID CreateTransform_sRGB(FX_LPCBYTE pProfileData, un
signed int dwProfileSize, int nComponents, int intent = 0, | |
166 FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT); | |
167 virtual FX_LPVOID CreateTransform_CMYK(FX_LPCBYTE pSrcProfileData,
unsigned int dwSrcProfileSize, int nSrcComponents, | |
168 FX_LPCBYTE pDstProfileData, unsigned int dwDstProfileSize, int inten
t = 0, | |
169 FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT, | |
170 FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT | |
171 ); | |
172 virtual void DestroyTransform(FX_LPVOID pTransform); | |
173 virtual void Translate(FX_LPVOID pTransform, FX_FLOAT
* pSrcValues, FX_FLOAT* pDestValues); | |
174 virtual void TranslateScanline(FX_LPVOID pTransform,
FX_LPBYTE pDest, FX_LPCBYTE pSrc, int pixels); | |
175 virtual void SetComponents(FX_DWORD nComponents) {m_n
Components = nComponents;} | |
176 virtual ~CCodec_IccModule(); | |
177 protected: | |
178 CFX_MapByteStringToPtr m_MapTranform; | |
179 CFX_MapByteStringToPtr m_MapProfile; | |
180 FX_DWORD m_nComponents; | |
181 typedef enum { | |
182 Icc_CLASS_INPUT = 0, | |
183 Icc_CLASS_OUTPUT, | |
184 Icc_CLASS_PROOF, | |
185 Icc_CLASS_MAX | |
186 } Icc_CLASS; | |
187 FX_LPVOID CreateProfile(ICodec_IccModule::IccParam* pIccParam, Icc
_CLASS ic, CFX_BinaryBuf* pTransformKey); | |
188 }; | |
189 class CCodec_JpxModule : public ICodec_JpxModule | |
190 { | |
191 public: | |
192 CCodec_JpxModule(); | |
193 void* CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, FX_
BOOL useColorSpace = FALSE); | |
194 void GetImageInfo(FX_LPVOID ctx, FX_DWORD& width, FX_DWORD& h
eight, | |
195 FX_DWORD& codestream_nComps, FX_DWORD& output_nComp
s); | |
196 FX_BOOL Decode(void* ctx, FX_LPBYTE dest_data, int pitch, FX_BOO
L bTranslateColor, FX_LPBYTE offsets); | |
197 void DestroyDecoder(void* ctx); | |
198 }; | |
199 #include "../jbig2/JBig2_Context.h" | |
200 class CPDF_Jbig2Interface : public CFX_Object, public CJBig2_Module | |
201 { | |
202 public: | |
203 virtual void *JBig2_Malloc(FX_DWORD dwSize) | |
204 { | |
205 return FX_Alloc(FX_BYTE, dwSize); | |
206 } | |
207 virtual void *JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) | |
208 { | |
209 if (dwSize && num >= UINT_MAX / dwSize) { | |
210 return NULL; | |
211 } | |
212 return FX_Alloc(FX_BYTE, num * dwSize); | |
213 } | |
214 virtual void *JBig2_Malloc3(FX_DWORD num, FX_DWORD dwSize, FX_DWORD dwSize2) | |
215 { | |
216 if (dwSize2 && dwSize >= UINT_MAX / dwSize2) { | |
217 return NULL; | |
218 } | |
219 FX_DWORD size = dwSize2 * dwSize; | |
220 if (size && num >= UINT_MAX / size) { | |
221 return NULL; | |
222 } | |
223 return FX_Alloc(FX_BYTE, num * size); | |
224 } | |
225 virtual void *JBig2_Realloc(FX_LPVOID pMem, FX_DWORD dwSize) | |
226 { | |
227 return FX_Realloc(FX_BYTE, pMem, dwSize); | |
228 } | |
229 virtual void JBig2_Free(FX_LPVOID pMem) | |
230 { | |
231 FX_Free(pMem); | |
232 } | |
233 }; | |
234 class CCodec_Jbig2Context : public CFX_Object | |
235 { | |
236 public: | |
237 CCodec_Jbig2Context(); | |
238 ~CCodec_Jbig2Context() {}; | |
239 IFX_FileRead* m_file_ptr; | |
240 FX_DWORD m_width; | |
241 FX_DWORD m_height; | |
242 FX_LPBYTE m_src_buf; | |
243 FX_DWORD m_src_size; | |
244 FX_LPCBYTE m_global_data; | |
245 FX_DWORD m_global_size; | |
246 FX_LPBYTE m_dest_buf; | |
247 FX_DWORD m_dest_pitch; | |
248 FX_BOOL m_bFileReader; | |
249 IFX_Pause* m_pPause; | |
250 CJBig2_Context* m_pContext; | |
251 CJBig2_Image* m_dest_image; | |
252 }; | |
253 class CCodec_Jbig2Module : public ICodec_Jbig2Module | |
254 { | |
255 public: | |
256 CCodec_Jbig2Module() {}; | |
257 ~CCodec_Jbig2Module(); | |
258 FX_BOOL Decode(FX_DWORD width, FX_DWORD height, FX_LPCBYTE src_b
uf, FX_DWORD src_size, | |
259 FX_LPCBYTE global_data, FX_DWORD global_size, FX_LPBYTE d
est_buf, FX_DWORD dest_pitch); | |
260 FX_BOOL Decode(IFX_FileRead* file_ptr, | |
261 FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, FX_LP
BYTE& dest_buf); | |
262 void* CreateJbig2Context(); | |
263 FXCODEC_STATUS StartDecode(void* pJbig2Context, FX_DWORD width,
FX_DWORD height, FX_LPCBYTE src_buf, FX_DWORD src_size, | |
264 FX_LPCBYTE global_data, FX_DWORD global_size
, FX_LPBYTE dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause); | |
265 | |
266 FXCODEC_STATUS StartDecode(void* pJbig2Context, IFX_FileRead* f
ile_ptr, | |
267 FX_DWORD& width, FX_DWORD& height, FX_DWORD&
pitch, FX_LPBYTE& dest_buf, IFX_Pause* pPause); | |
268 FXCODEC_STATUS ContinueDecode(void* pJbig2Context, IFX_Pause* p
Pause); | |
269 void DestroyJbig2Context(void* pJbig2Context)
; | |
270 CPDF_Jbig2Interface m_Module; | |
271 private: | |
272 }; | |
OLD | NEW |