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 <setjmp.h> | 7 #include <setjmp.h> |
8 | 8 |
9 #include "../../../include/fxcodec/fx_codec.h" | 9 #include "../../../include/fxcodec/fx_codec.h" |
10 #include "../../../include/fxcrt/fx_safe_types.h" | 10 #include "../../../include/fxcrt/fx_safe_types.h" |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 bits_per_components = cinfo.data_precision; | 355 bits_per_components = cinfo.data_precision; |
356 if (icc_buf_ptr != NULL) { | 356 if (icc_buf_ptr != NULL) { |
357 *icc_buf_ptr = NULL; | 357 *icc_buf_ptr = NULL; |
358 } | 358 } |
359 if (icc_length != NULL) { | 359 if (icc_length != NULL) { |
360 *icc_length = 0; | 360 *icc_length = 0; |
361 } | 361 } |
362 jpeg_destroy_decompress(&cinfo); | 362 jpeg_destroy_decompress(&cinfo); |
363 return TRUE; | 363 return TRUE; |
364 } | 364 } |
| 365 |
365 class CCodec_JpegDecoder : public CCodec_ScanlineDecoder { | 366 class CCodec_JpegDecoder : public CCodec_ScanlineDecoder { |
366 public: | 367 public: |
367 CCodec_JpegDecoder(); | 368 CCodec_JpegDecoder(); |
368 ~CCodec_JpegDecoder(); | 369 ~CCodec_JpegDecoder() override; |
| 370 |
369 FX_BOOL Create(const uint8_t* src_buf, | 371 FX_BOOL Create(const uint8_t* src_buf, |
370 FX_DWORD src_size, | 372 FX_DWORD src_size, |
371 int width, | 373 int width, |
372 int height, | 374 int height, |
373 int nComps, | 375 int nComps, |
374 FX_BOOL ColorTransform, | 376 FX_BOOL ColorTransform, |
375 IFX_JpegProvider* pJP); | 377 IFX_JpegProvider* pJP); |
376 virtual void Destroy() { delete this; } | 378 void Destroy() { delete this; } |
377 virtual void v_DownScale(int dest_width, int dest_height); | 379 |
378 virtual FX_BOOL v_Rewind(); | 380 // CCodec_ScanlineDecoder |
379 virtual uint8_t* v_GetNextLine(); | 381 void v_DownScale(int dest_width, int dest_height) override; |
380 virtual FX_DWORD GetSrcOffset(); | 382 FX_BOOL v_Rewind() override; |
| 383 uint8_t* v_GetNextLine() override; |
| 384 FX_DWORD GetSrcOffset() override; |
| 385 |
| 386 FX_BOOL InitDecode(); |
| 387 |
381 jmp_buf m_JmpBuf; | 388 jmp_buf m_JmpBuf; |
382 struct jpeg_decompress_struct cinfo; | 389 struct jpeg_decompress_struct cinfo; |
383 struct jpeg_error_mgr jerr; | 390 struct jpeg_error_mgr jerr; |
384 struct jpeg_source_mgr src; | 391 struct jpeg_source_mgr src; |
385 const uint8_t* m_SrcBuf; | 392 const uint8_t* m_SrcBuf; |
386 FX_DWORD m_SrcSize; | 393 FX_DWORD m_SrcSize; |
387 uint8_t* m_pScanlineBuf; | 394 uint8_t* m_pScanlineBuf; |
388 FX_BOOL InitDecode(); | 395 |
389 FX_BOOL m_bInited, m_bStarted, m_bJpegTransform; | 396 FX_BOOL m_bInited; |
| 397 FX_BOOL m_bStarted; |
| 398 FX_BOOL m_bJpegTransform; |
390 | 399 |
391 protected: | 400 protected: |
392 IFX_JpegProvider* m_pExtProvider; | 401 IFX_JpegProvider* m_pExtProvider; |
393 void* m_pExtContext; | 402 void* m_pExtContext; |
394 FX_DWORD m_nDefaultScaleDenom; | 403 FX_DWORD m_nDefaultScaleDenom; |
395 }; | 404 }; |
| 405 |
396 CCodec_JpegDecoder::CCodec_JpegDecoder() { | 406 CCodec_JpegDecoder::CCodec_JpegDecoder() { |
397 m_pScanlineBuf = NULL; | 407 m_pScanlineBuf = NULL; |
398 m_DownScale = 1; | 408 m_DownScale = 1; |
399 m_bStarted = FALSE; | 409 m_bStarted = FALSE; |
400 m_bInited = FALSE; | 410 m_bInited = FALSE; |
401 m_pExtProvider = NULL; | 411 m_pExtProvider = NULL; |
402 m_pExtContext = NULL; | 412 m_pExtContext = NULL; |
403 FXSYS_memset(&cinfo, 0, sizeof(cinfo)); | 413 FXSYS_memset(&cinfo, 0, sizeof(cinfo)); |
404 FXSYS_memset(&jerr, 0, sizeof(jerr)); | 414 FXSYS_memset(&jerr, 0, sizeof(jerr)); |
405 FXSYS_memset(&src, 0, sizeof(src)); | 415 FXSYS_memset(&src, 0, sizeof(src)); |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 } | 790 } |
781 if (avail_buf_ptr != NULL) { | 791 if (avail_buf_ptr != NULL) { |
782 *avail_buf_ptr = NULL; | 792 *avail_buf_ptr = NULL; |
783 if (((FXJPEG_Context*)pContext)->m_SrcMgr.bytes_in_buffer > 0) { | 793 if (((FXJPEG_Context*)pContext)->m_SrcMgr.bytes_in_buffer > 0) { |
784 *avail_buf_ptr = | 794 *avail_buf_ptr = |
785 (uint8_t*)((FXJPEG_Context*)pContext)->m_SrcMgr.next_input_byte; | 795 (uint8_t*)((FXJPEG_Context*)pContext)->m_SrcMgr.next_input_byte; |
786 } | 796 } |
787 } | 797 } |
788 return (FX_DWORD)((FXJPEG_Context*)pContext)->m_SrcMgr.bytes_in_buffer; | 798 return (FX_DWORD)((FXJPEG_Context*)pContext)->m_SrcMgr.bytes_in_buffer; |
789 } | 799 } |
OLD | NEW |