| 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 "core/fxcodec/codec/codec_int.h" | 7 #include "core/fxcodec/codec/codec_int.h" |
| 8 #include "core/fxcodec/fx_codec.h" | 8 #include "core/fxcodec/fx_codec.h" |
| 9 #include "core/fxge/fx_dib.h" | 9 #include "core/fxge/fx_dib.h" |
| 10 | 10 |
| 11 extern "C" { | 11 extern "C" { |
| 12 #include "third_party/libtiff/tiffiop.h" | 12 #include "third_party/libtiff/tiffiop.h" |
| 13 } | 13 } |
| 14 | 14 |
| 15 class CCodec_TiffContext { | 15 class CCodec_TiffContext { |
| 16 public: | 16 public: |
| 17 CCodec_TiffContext(); | 17 CCodec_TiffContext(); |
| 18 ~CCodec_TiffContext(); | 18 ~CCodec_TiffContext(); |
| 19 | 19 |
| 20 bool InitDecoder(IFX_FileRead* file_ptr); | 20 bool InitDecoder(IFX_SeekableReadStream* file_ptr); |
| 21 bool LoadFrameInfo(int32_t frame, | 21 bool LoadFrameInfo(int32_t frame, |
| 22 int32_t* width, | 22 int32_t* width, |
| 23 int32_t* height, | 23 int32_t* height, |
| 24 int32_t* comps, | 24 int32_t* comps, |
| 25 int32_t* bpc, | 25 int32_t* bpc, |
| 26 CFX_DIBAttribute* pAttribute); | 26 CFX_DIBAttribute* pAttribute); |
| 27 bool Decode(CFX_DIBitmap* pDIBitmap); | 27 bool Decode(CFX_DIBitmap* pDIBitmap); |
| 28 | 28 |
| 29 IFX_FileRead* io_in() const { return m_io_in; } | 29 IFX_SeekableReadStream* io_in() const { return m_io_in; } |
| 30 uint32_t offset() const { return m_offset; } | 30 uint32_t offset() const { return m_offset; } |
| 31 void set_offset(uint32_t offset) { m_offset = offset; } | 31 void set_offset(uint32_t offset) { m_offset = offset; } |
| 32 void increment_offset(uint32_t offset) { m_offset += offset; } | 32 void increment_offset(uint32_t offset) { m_offset += offset; } |
| 33 | 33 |
| 34 private: | 34 private: |
| 35 bool IsSupport(const CFX_DIBitmap* pDIBitmap) const; | 35 bool IsSupport(const CFX_DIBitmap* pDIBitmap) const; |
| 36 void SetPalette(CFX_DIBitmap* pDIBitmap, uint16_t bps); | 36 void SetPalette(CFX_DIBitmap* pDIBitmap, uint16_t bps); |
| 37 bool Decode1bppRGB(CFX_DIBitmap* pDIBitmap, | 37 bool Decode1bppRGB(CFX_DIBitmap* pDIBitmap, |
| 38 int32_t height, | 38 int32_t height, |
| 39 int32_t width, | 39 int32_t width, |
| 40 uint16_t bps, | 40 uint16_t bps, |
| 41 uint16_t spp); | 41 uint16_t spp); |
| 42 bool Decode8bppRGB(CFX_DIBitmap* pDIBitmap, | 42 bool Decode8bppRGB(CFX_DIBitmap* pDIBitmap, |
| 43 int32_t height, | 43 int32_t height, |
| 44 int32_t width, | 44 int32_t width, |
| 45 uint16_t bps, | 45 uint16_t bps, |
| 46 uint16_t spp); | 46 uint16_t spp); |
| 47 bool Decode24bppRGB(CFX_DIBitmap* pDIBitmap, | 47 bool Decode24bppRGB(CFX_DIBitmap* pDIBitmap, |
| 48 int32_t height, | 48 int32_t height, |
| 49 int32_t width, | 49 int32_t width, |
| 50 uint16_t bps, | 50 uint16_t bps, |
| 51 uint16_t spp); | 51 uint16_t spp); |
| 52 | 52 |
| 53 IFX_FileRead* m_io_in; | 53 IFX_SeekableReadStream* m_io_in; |
| 54 uint32_t m_offset; | 54 uint32_t m_offset; |
| 55 TIFF* m_tif_ctx; | 55 TIFF* m_tif_ctx; |
| 56 }; | 56 }; |
| 57 | 57 |
| 58 void* _TIFFmalloc(tmsize_t size) { | 58 void* _TIFFmalloc(tmsize_t size) { |
| 59 return FXMEM_DefaultAlloc(size, 0); | 59 return FXMEM_DefaultAlloc(size, 0); |
| 60 } | 60 } |
| 61 | 61 |
| 62 void _TIFFfree(void* ptr) { | 62 void _TIFFfree(void* ptr) { |
| 63 FXMEM_DefaultFree(ptr, 0); | 63 FXMEM_DefaultFree(ptr, 0); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 } // namespace | 186 } // namespace |
| 187 | 187 |
| 188 CCodec_TiffContext::CCodec_TiffContext() | 188 CCodec_TiffContext::CCodec_TiffContext() |
| 189 : m_io_in(nullptr), m_offset(0), m_tif_ctx(nullptr) {} | 189 : m_io_in(nullptr), m_offset(0), m_tif_ctx(nullptr) {} |
| 190 | 190 |
| 191 CCodec_TiffContext::~CCodec_TiffContext() { | 191 CCodec_TiffContext::~CCodec_TiffContext() { |
| 192 if (m_tif_ctx) | 192 if (m_tif_ctx) |
| 193 TIFFClose(m_tif_ctx); | 193 TIFFClose(m_tif_ctx); |
| 194 } | 194 } |
| 195 | 195 |
| 196 bool CCodec_TiffContext::InitDecoder(IFX_FileRead* file_ptr) { | 196 bool CCodec_TiffContext::InitDecoder(IFX_SeekableReadStream* file_ptr) { |
| 197 m_io_in = file_ptr; | 197 m_io_in = file_ptr; |
| 198 m_tif_ctx = tiff_open(this, "r"); | 198 m_tif_ctx = tiff_open(this, "r"); |
| 199 return !!m_tif_ctx; | 199 return !!m_tif_ctx; |
| 200 } | 200 } |
| 201 | 201 |
| 202 bool CCodec_TiffContext::LoadFrameInfo(int32_t frame, | 202 bool CCodec_TiffContext::LoadFrameInfo(int32_t frame, |
| 203 int32_t* width, | 203 int32_t* width, |
| 204 int32_t* height, | 204 int32_t* height, |
| 205 int32_t* comps, | 205 int32_t* comps, |
| 206 int32_t* bpc, | 206 int32_t* bpc, |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 uint32_t bpp = bps * spp; | 428 uint32_t bpp = bps * spp; |
| 429 if (bpp == 1) | 429 if (bpp == 1) |
| 430 return Decode1bppRGB(pDIBitmap, height, width, bps, spp); | 430 return Decode1bppRGB(pDIBitmap, height, width, bps, spp); |
| 431 if (bpp <= 8) | 431 if (bpp <= 8) |
| 432 return Decode8bppRGB(pDIBitmap, height, width, bps, spp); | 432 return Decode8bppRGB(pDIBitmap, height, width, bps, spp); |
| 433 if (bpp <= 24) | 433 if (bpp <= 24) |
| 434 return Decode24bppRGB(pDIBitmap, height, width, bps, spp); | 434 return Decode24bppRGB(pDIBitmap, height, width, bps, spp); |
| 435 return false; | 435 return false; |
| 436 } | 436 } |
| 437 | 437 |
| 438 CCodec_TiffContext* CCodec_TiffModule::CreateDecoder(IFX_FileRead* file_ptr) { | 438 CCodec_TiffContext* CCodec_TiffModule::CreateDecoder( |
| 439 IFX_SeekableReadStream* file_ptr) { |
| 439 CCodec_TiffContext* pDecoder = new CCodec_TiffContext; | 440 CCodec_TiffContext* pDecoder = new CCodec_TiffContext; |
| 440 if (!pDecoder->InitDecoder(file_ptr)) { | 441 if (!pDecoder->InitDecoder(file_ptr)) { |
| 441 delete pDecoder; | 442 delete pDecoder; |
| 442 return nullptr; | 443 return nullptr; |
| 443 } | 444 } |
| 444 return pDecoder; | 445 return pDecoder; |
| 445 } | 446 } |
| 446 | 447 |
| 447 bool CCodec_TiffModule::LoadFrameInfo(CCodec_TiffContext* ctx, | 448 bool CCodec_TiffModule::LoadFrameInfo(CCodec_TiffContext* ctx, |
| 448 int32_t frame, | 449 int32_t frame, |
| 449 int32_t* width, | 450 int32_t* width, |
| 450 int32_t* height, | 451 int32_t* height, |
| 451 int32_t* comps, | 452 int32_t* comps, |
| 452 int32_t* bpc, | 453 int32_t* bpc, |
| 453 CFX_DIBAttribute* pAttribute) { | 454 CFX_DIBAttribute* pAttribute) { |
| 454 return ctx->LoadFrameInfo(frame, width, height, comps, bpc, pAttribute); | 455 return ctx->LoadFrameInfo(frame, width, height, comps, bpc, pAttribute); |
| 455 } | 456 } |
| 456 | 457 |
| 457 bool CCodec_TiffModule::Decode(CCodec_TiffContext* ctx, | 458 bool CCodec_TiffModule::Decode(CCodec_TiffContext* ctx, |
| 458 class CFX_DIBitmap* pDIBitmap) { | 459 class CFX_DIBitmap* pDIBitmap) { |
| 459 return ctx->Decode(pDIBitmap); | 460 return ctx->Decode(pDIBitmap); |
| 460 } | 461 } |
| 461 | 462 |
| 462 void CCodec_TiffModule::DestroyDecoder(CCodec_TiffContext* ctx) { | 463 void CCodec_TiffModule::DestroyDecoder(CCodec_TiffContext* ctx) { |
| 463 delete ctx; | 464 delete ctx; |
| 464 } | 465 } |
| OLD | NEW |