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 #ifndef CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ | 7 #ifndef CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ |
8 #define CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ | 8 #define CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ |
9 | 9 |
10 #include <limits.h> | 10 #include <limits.h> |
(...skipping 13 matching lines...) Expand all Loading... |
24 FX_DWORD src_size, | 24 FX_DWORD src_size, |
25 uint8_t*& dest_buf, | 25 uint8_t*& dest_buf, |
26 FX_DWORD& dest_size); | 26 FX_DWORD& dest_size); |
27 virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* src_buf, | 27 virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* src_buf, |
28 FX_DWORD src_size, | 28 FX_DWORD src_size, |
29 int width, | 29 int width, |
30 int height, | 30 int height, |
31 int nComps, | 31 int nComps, |
32 int bpc); | 32 int bpc); |
33 }; | 33 }; |
| 34 |
34 struct CCodec_ImageDataCache { | 35 struct CCodec_ImageDataCache { |
35 int m_Width, m_Height; | 36 int m_Width, m_Height; |
36 int m_nCachedLines; | 37 int m_nCachedLines; |
37 uint8_t m_Data; | 38 uint8_t m_Data; |
38 }; | 39 }; |
| 40 |
39 class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder { | 41 class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder { |
40 public: | 42 public: |
41 CCodec_ScanlineDecoder(); | 43 CCodec_ScanlineDecoder(); |
| 44 ~CCodec_ScanlineDecoder() override; |
42 | 45 |
43 virtual ~CCodec_ScanlineDecoder(); | 46 // ICodec_ScanlineDecoder |
44 | 47 FX_DWORD GetSrcOffset() override { return -1; } |
45 virtual FX_DWORD GetSrcOffset() { return -1; } | 48 void DownScale(int dest_width, int dest_height) override; |
46 | 49 uint8_t* GetScanline(int line) override; |
47 virtual void DownScale(int dest_width, int dest_height); | 50 FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) override; |
48 | 51 int GetWidth() override { return m_OutputWidth; } |
49 uint8_t* GetScanline(int line); | 52 int GetHeight() override { return m_OutputHeight; } |
50 | 53 int CountComps() override { return m_nComps; } |
51 FX_BOOL SkipToScanline(int line, IFX_Pause* pPause); | 54 int GetBPC() override { return m_bpc; } |
52 | 55 FX_BOOL IsColorTransformed() override { return m_bColorTransformed; } |
53 int GetWidth() { return m_OutputWidth; } | 56 void ClearImageData() override { |
54 | |
55 int GetHeight() { return m_OutputHeight; } | |
56 | |
57 int CountComps() { return m_nComps; } | |
58 | |
59 int GetBPC() { return m_bpc; } | |
60 | |
61 FX_BOOL IsColorTransformed() { return m_bColorTransformed; } | |
62 | |
63 void ClearImageData() { | |
64 if (m_pDataCache) { | 57 if (m_pDataCache) { |
65 FX_Free(m_pDataCache); | 58 FX_Free(m_pDataCache); |
66 } | 59 } |
67 m_pDataCache = NULL; | 60 m_pDataCache = NULL; |
68 } | 61 } |
69 | 62 |
70 protected: | 63 protected: |
71 int m_OrigWidth; | 64 int m_OrigWidth; |
72 | 65 |
73 int m_OrigHeight; | 66 int m_OrigHeight; |
(...skipping 19 matching lines...) Expand all Loading... |
93 virtual uint8_t* v_GetNextLine() = 0; | 86 virtual uint8_t* v_GetNextLine() = 0; |
94 | 87 |
95 virtual void v_DownScale(int dest_width, int dest_height) = 0; | 88 virtual void v_DownScale(int dest_width, int dest_height) = 0; |
96 | 89 |
97 int m_NextLine; | 90 int m_NextLine; |
98 | 91 |
99 uint8_t* m_pLastScanline; | 92 uint8_t* m_pLastScanline; |
100 | 93 |
101 CCodec_ImageDataCache* m_pDataCache; | 94 CCodec_ImageDataCache* m_pDataCache; |
102 }; | 95 }; |
| 96 |
103 class CCodec_FaxModule : public ICodec_FaxModule { | 97 class CCodec_FaxModule : public ICodec_FaxModule { |
104 public: | 98 public: |
105 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, | 99 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, |
106 FX_DWORD src_size, | 100 FX_DWORD src_size, |
107 int width, | 101 int width, |
108 int height, | 102 int height, |
109 int K, | 103 int K, |
110 FX_BOOL EndOfLine, | 104 FX_BOOL EndOfLine, |
111 FX_BOOL EncodedByteAlign, | 105 FX_BOOL EncodedByteAlign, |
112 FX_BOOL BlackIs1, | 106 FX_BOOL BlackIs1, |
113 int Columns, | 107 int Columns, |
114 int Rows); | 108 int Rows); |
115 FX_BOOL Encode(const uint8_t* src_buf, | 109 FX_BOOL Encode(const uint8_t* src_buf, |
116 int width, | 110 int width, |
117 int height, | 111 int height, |
118 int pitch, | 112 int pitch, |
119 uint8_t*& dest_buf, | 113 uint8_t*& dest_buf, |
120 FX_DWORD& dest_size); | 114 FX_DWORD& dest_size); |
121 }; | 115 }; |
| 116 |
122 class CCodec_FlateModule : public ICodec_FlateModule { | 117 class CCodec_FlateModule : public ICodec_FlateModule { |
123 public: | 118 public: |
124 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, | 119 virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, |
125 FX_DWORD src_size, | 120 FX_DWORD src_size, |
126 int width, | 121 int width, |
127 int height, | 122 int height, |
128 int nComps, | 123 int nComps, |
129 int bpc, | 124 int bpc, |
130 int predictor, | 125 int predictor, |
131 int Colors, | 126 int Colors, |
(...skipping 16 matching lines...) Expand all Loading... |
148 int Colors, | 143 int Colors, |
149 int BitsPerComponent, | 144 int BitsPerComponent, |
150 int Columns, | 145 int Columns, |
151 uint8_t*& dest_buf, | 146 uint8_t*& dest_buf, |
152 FX_DWORD& dest_size); | 147 FX_DWORD& dest_size); |
153 virtual FX_BOOL Encode(const uint8_t* src_buf, | 148 virtual FX_BOOL Encode(const uint8_t* src_buf, |
154 FX_DWORD src_size, | 149 FX_DWORD src_size, |
155 uint8_t*& dest_buf, | 150 uint8_t*& dest_buf, |
156 FX_DWORD& dest_size); | 151 FX_DWORD& dest_size); |
157 }; | 152 }; |
| 153 |
158 class CCodec_JpegModule : public ICodec_JpegModule { | 154 class CCodec_JpegModule : public ICodec_JpegModule { |
159 public: | 155 public: |
160 CCodec_JpegModule() : m_pExtProvider(NULL) {} | 156 CCodec_JpegModule() : m_pExtProvider(NULL) {} |
161 void SetPovider(IFX_JpegProvider* pJP) { m_pExtProvider = pJP; } | 157 void SetPovider(IFX_JpegProvider* pJP) { m_pExtProvider = pJP; } |
162 ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, | 158 ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, |
163 FX_DWORD src_size, | 159 FX_DWORD src_size, |
164 int width, | 160 int width, |
165 int height, | 161 int height, |
166 int nComps, | 162 int nComps, |
167 FX_BOOL ColorTransform); | 163 FX_BOOL ColorTransform); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 typedef enum { | 233 typedef enum { |
238 Icc_CLASS_INPUT = 0, | 234 Icc_CLASS_INPUT = 0, |
239 Icc_CLASS_OUTPUT, | 235 Icc_CLASS_OUTPUT, |
240 Icc_CLASS_PROOF, | 236 Icc_CLASS_PROOF, |
241 Icc_CLASS_MAX | 237 Icc_CLASS_MAX |
242 } Icc_CLASS; | 238 } Icc_CLASS; |
243 void* CreateProfile(ICodec_IccModule::IccParam* pIccParam, | 239 void* CreateProfile(ICodec_IccModule::IccParam* pIccParam, |
244 Icc_CLASS ic, | 240 Icc_CLASS ic, |
245 CFX_BinaryBuf* pTransformKey); | 241 CFX_BinaryBuf* pTransformKey); |
246 }; | 242 }; |
| 243 |
247 class CCodec_JpxModule : public ICodec_JpxModule { | 244 class CCodec_JpxModule : public ICodec_JpxModule { |
248 public: | 245 public: |
249 CCodec_JpxModule(); | 246 CCodec_JpxModule(); |
250 void* CreateDecoder(const uint8_t* src_buf, | 247 void* CreateDecoder(const uint8_t* src_buf, |
251 FX_DWORD src_size, | 248 FX_DWORD src_size, |
252 FX_BOOL useColorSpace = FALSE); | 249 FX_BOOL useColorSpace = FALSE); |
253 void GetImageInfo(void* ctx, | 250 void GetImageInfo(void* ctx, |
254 FX_DWORD& width, | 251 FX_DWORD& width, |
255 FX_DWORD& height, | 252 FX_DWORD& height, |
256 FX_DWORD& codestream_nComps, | 253 FX_DWORD& codestream_nComps, |
257 FX_DWORD& output_nComps); | 254 FX_DWORD& output_nComps); |
258 FX_BOOL Decode(void* ctx, | 255 FX_BOOL Decode(void* ctx, |
259 uint8_t* dest_data, | 256 uint8_t* dest_data, |
260 int pitch, | 257 int pitch, |
261 FX_BOOL bTranslateColor, | 258 FX_BOOL bTranslateColor, |
262 uint8_t* offsets); | 259 uint8_t* offsets); |
263 void DestroyDecoder(void* ctx); | 260 void DestroyDecoder(void* ctx); |
264 }; | 261 }; |
| 262 |
265 class CPDF_Jbig2Interface : public CJBig2_Module { | 263 class CPDF_Jbig2Interface : public CJBig2_Module { |
266 public: | 264 public: |
267 virtual void* JBig2_Malloc(FX_DWORD dwSize) { | 265 virtual void* JBig2_Malloc(FX_DWORD dwSize) { |
268 return FX_Alloc(uint8_t, dwSize); | 266 return FX_Alloc(uint8_t, dwSize); |
269 } | 267 } |
270 virtual void* JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) { | 268 virtual void* JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) { |
271 if (dwSize && num >= UINT_MAX / dwSize) { | 269 if (dwSize && num >= UINT_MAX / dwSize) { |
272 return NULL; | 270 return NULL; |
273 } | 271 } |
274 return FX_Alloc(uint8_t, num * dwSize); | 272 return FX_Alloc(uint8_t, num * dwSize); |
275 } | 273 } |
276 virtual void* JBig2_Malloc3(FX_DWORD num, FX_DWORD dwSize, FX_DWORD dwSize2) { | 274 virtual void* JBig2_Malloc3(FX_DWORD num, FX_DWORD dwSize, FX_DWORD dwSize2) { |
277 if (dwSize2 && dwSize >= UINT_MAX / dwSize2) { | 275 if (dwSize2 && dwSize >= UINT_MAX / dwSize2) { |
278 return NULL; | 276 return NULL; |
279 } | 277 } |
280 FX_DWORD size = dwSize2 * dwSize; | 278 FX_DWORD size = dwSize2 * dwSize; |
281 if (size && num >= UINT_MAX / size) { | 279 if (size && num >= UINT_MAX / size) { |
282 return NULL; | 280 return NULL; |
283 } | 281 } |
284 return FX_Alloc(uint8_t, num * size); | 282 return FX_Alloc(uint8_t, num * size); |
285 } | 283 } |
286 virtual void* JBig2_Realloc(void* pMem, FX_DWORD dwSize) { | 284 virtual void* JBig2_Realloc(void* pMem, FX_DWORD dwSize) { |
287 return FX_Realloc(uint8_t, pMem, dwSize); | 285 return FX_Realloc(uint8_t, pMem, dwSize); |
288 } | 286 } |
289 virtual void JBig2_Free(void* pMem) { FX_Free(pMem); } | 287 virtual void JBig2_Free(void* pMem) { FX_Free(pMem); } |
290 }; | 288 }; |
| 289 |
291 class CCodec_Jbig2Context { | 290 class CCodec_Jbig2Context { |
292 public: | 291 public: |
293 CCodec_Jbig2Context(); | 292 CCodec_Jbig2Context(); |
294 ~CCodec_Jbig2Context(){}; | 293 ~CCodec_Jbig2Context(){}; |
295 | 294 |
296 FX_DWORD m_width; | 295 FX_DWORD m_width; |
297 FX_DWORD m_height; | 296 FX_DWORD m_height; |
298 uint8_t* m_src_buf; | 297 uint8_t* m_src_buf; |
299 FX_DWORD m_src_size; | 298 FX_DWORD m_src_size; |
300 const uint8_t* m_global_data; | 299 const uint8_t* m_global_data; |
301 FX_DWORD m_global_size; | 300 FX_DWORD m_global_size; |
302 uint8_t* m_dest_buf; | 301 uint8_t* m_dest_buf; |
303 FX_DWORD m_dest_pitch; | 302 FX_DWORD m_dest_pitch; |
304 FX_BOOL m_bFileReader; | 303 FX_BOOL m_bFileReader; |
305 IFX_Pause* m_pPause; | 304 IFX_Pause* m_pPause; |
306 CJBig2_Context* m_pContext; | 305 CJBig2_Context* m_pContext; |
307 CJBig2_Image* m_dest_image; | 306 CJBig2_Image* m_dest_image; |
308 }; | 307 }; |
309 class CCodec_Jbig2Module : public ICodec_Jbig2Module { | 308 class CCodec_Jbig2Module : public ICodec_Jbig2Module { |
310 public: | 309 public: |
311 CCodec_Jbig2Module(){}; | 310 CCodec_Jbig2Module(){}; |
312 ~CCodec_Jbig2Module(); | 311 ~CCodec_Jbig2Module() override; |
| 312 |
| 313 // ICodec_Jbig2Module |
313 FX_BOOL Decode(FX_DWORD width, | 314 FX_BOOL Decode(FX_DWORD width, |
314 FX_DWORD height, | 315 FX_DWORD height, |
315 const uint8_t* src_buf, | 316 const uint8_t* src_buf, |
316 FX_DWORD src_size, | 317 FX_DWORD src_size, |
317 const uint8_t* global_data, | 318 const uint8_t* global_data, |
318 FX_DWORD global_size, | 319 FX_DWORD global_size, |
319 uint8_t* dest_buf, | 320 uint8_t* dest_buf, |
320 FX_DWORD dest_pitch); | 321 FX_DWORD dest_pitch) override; |
321 FX_BOOL Decode(IFX_FileRead* file_ptr, | 322 FX_BOOL Decode(IFX_FileRead* file_ptr, |
322 FX_DWORD& width, | 323 FX_DWORD& width, |
323 FX_DWORD& height, | 324 FX_DWORD& height, |
324 FX_DWORD& pitch, | 325 FX_DWORD& pitch, |
325 uint8_t*& dest_buf); | 326 uint8_t*& dest_buf) override; |
326 void* CreateJbig2Context(); | 327 void* CreateJbig2Context() override; |
327 FXCODEC_STATUS StartDecode(void* pJbig2Context, | 328 FXCODEC_STATUS StartDecode(void* pJbig2Context, |
328 FX_DWORD width, | 329 FX_DWORD width, |
329 FX_DWORD height, | 330 FX_DWORD height, |
330 const uint8_t* src_buf, | 331 const uint8_t* src_buf, |
331 FX_DWORD src_size, | 332 FX_DWORD src_size, |
332 const uint8_t* global_data, | 333 const uint8_t* global_data, |
333 FX_DWORD global_size, | 334 FX_DWORD global_size, |
334 uint8_t* dest_buf, | 335 uint8_t* dest_buf, |
335 FX_DWORD dest_pitch, | 336 FX_DWORD dest_pitch, |
336 IFX_Pause* pPause); | 337 IFX_Pause* pPause) override; |
337 | |
338 FXCODEC_STATUS StartDecode(void* pJbig2Context, | 338 FXCODEC_STATUS StartDecode(void* pJbig2Context, |
339 IFX_FileRead* file_ptr, | 339 IFX_FileRead* file_ptr, |
340 FX_DWORD& width, | 340 FX_DWORD& width, |
341 FX_DWORD& height, | 341 FX_DWORD& height, |
342 FX_DWORD& pitch, | 342 FX_DWORD& pitch, |
343 uint8_t*& dest_buf, | 343 uint8_t*& dest_buf, |
344 IFX_Pause* pPause); | 344 IFX_Pause* pPause) override; |
345 FXCODEC_STATUS ContinueDecode(void* pJbig2Context, IFX_Pause* pPause); | 345 FXCODEC_STATUS ContinueDecode(void* pJbig2Context, |
346 void DestroyJbig2Context(void* pJbig2Context); | 346 IFX_Pause* pPause) override; |
| 347 void DestroyJbig2Context(void* pJbig2Context) override; |
| 348 |
| 349 private: |
347 CPDF_Jbig2Interface m_Module; | 350 CPDF_Jbig2Interface m_Module; |
348 std::list<CJBig2_CachePair> m_SymbolDictCache; | 351 std::list<CJBig2_CachePair> m_SymbolDictCache; |
349 | |
350 private: | |
351 }; | 352 }; |
352 | 353 |
353 struct DecodeData { | 354 struct DecodeData { |
354 public: | 355 public: |
355 DecodeData(unsigned char* src_data, OPJ_SIZE_T src_size) | 356 DecodeData(unsigned char* src_data, OPJ_SIZE_T src_size) |
356 : src_data(src_data), src_size(src_size), offset(0) {} | 357 : src_data(src_data), src_size(src_size), offset(0) {} |
357 unsigned char* src_data; | 358 unsigned char* src_data; |
358 OPJ_SIZE_T src_size; | 359 OPJ_SIZE_T src_size; |
359 OPJ_SIZE_T offset; | 360 OPJ_SIZE_T offset; |
360 }; | 361 }; |
361 | 362 |
362 /* Wrappers for C-style callbacks. */ | 363 /* Wrappers for C-style callbacks. */ |
363 OPJ_SIZE_T opj_read_from_memory(void* p_buffer, | 364 OPJ_SIZE_T opj_read_from_memory(void* p_buffer, |
364 OPJ_SIZE_T nb_bytes, | 365 OPJ_SIZE_T nb_bytes, |
365 void* p_user_data); | 366 void* p_user_data); |
366 OPJ_SIZE_T opj_write_from_memory(void* p_buffer, | 367 OPJ_SIZE_T opj_write_from_memory(void* p_buffer, |
367 OPJ_SIZE_T nb_bytes, | 368 OPJ_SIZE_T nb_bytes, |
368 void* p_user_data); | 369 void* p_user_data); |
369 OPJ_OFF_T opj_skip_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data); | 370 OPJ_OFF_T opj_skip_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data); |
370 OPJ_BOOL opj_seek_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data); | 371 OPJ_BOOL opj_seek_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data); |
371 | 372 |
372 #endif // CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ | 373 #endif // CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_ |
OLD | NEW |