| // Copyright 2014 PDFium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #include "core/fxcodec/fx_codec.h" |
| |
| #include <algorithm> |
| #include <cmath> |
| #include <memory> |
| #include <utility> |
| |
| #include "core/fxcodec/codec/ccodec_jbig2module.h" |
| #include "core/fxcodec/codec/codec_int.h" |
| #include "core/fxcodec/codec/jpegmodule.h" |
| #include "core/fxcrt/fx_extension.h" |
| #include "core/fxcrt/fx_safe_types.h" |
| #include "third_party/base/logging.h" |
| #include "third_party/base/ptr_util.h" |
| |
| namespace { |
| |
| CCodec_ModuleMgr* g_CCodecModuleMgr = nullptr; |
| |
| } // namespace |
| |
| // static |
| void CCodec_ModuleMgr::Create() { |
| ASSERT(!g_CCodecModuleMgr); |
| g_CCodecModuleMgr = new CCodec_ModuleMgr(); |
| } |
| |
| // static |
| void CCodec_ModuleMgr::Destroy() { |
| ASSERT(g_CCodecModuleMgr); |
| delete g_CCodecModuleMgr; |
| g_CCodecModuleMgr = nullptr; |
| } |
| |
| // static |
| CCodec_ModuleMgr* CCodec_ModuleMgr::GetInstance() { |
| ASSERT(g_CCodecModuleMgr); |
| return g_CCodecModuleMgr; |
| } |
| |
| CCodec_ModuleMgr::CCodec_ModuleMgr() |
| : m_pJpegModule(pdfium::MakeUnique<JpegModule>()), |
| m_pJbig2Module(pdfium::MakeUnique<CCodec_Jbig2Module>()) { |
| #ifdef PDF_ENABLE_XFA_BMP |
| SetBmpModule(pdfium::MakeUnique<BmpModule>()); |
| #endif |
| |
| #ifdef PDF_ENABLE_XFA_GIF |
| SetGifModule(pdfium::MakeUnique<GifModule>()); |
| #endif |
| |
| #ifdef PDF_ENABLE_XFA_PNG |
| SetPngModule(pdfium::MakeUnique<PngModule>()); |
| #endif |
| |
| #ifdef PDF_ENABLE_XFA_TIFF |
| SetTiffModule(pdfium::MakeUnique<TiffModule>()); |
| #endif |
| } |
| |
| CCodec_ModuleMgr::~CCodec_ModuleMgr() = default; |
| |
| #ifdef PDF_ENABLE_XFA |
| CFX_DIBAttribute::CFX_DIBAttribute() = default; |
| |
| CFX_DIBAttribute::~CFX_DIBAttribute() { |
| for (const auto& pair : m_Exif) |
| FX_Free(pair.second); |
| } |
| #endif // PDF_ENABLE_XFA |
| |
| FX_SAFE_UINT32 CalculatePitch8(uint32_t bpc, uint32_t components, int width) { |
| FX_SAFE_UINT32 pitch = bpc; |
| pitch *= components; |
| pitch *= width; |
| pitch += 7; |
| pitch /= 8; |
| return pitch; |
| } |
| |
| FX_SAFE_UINT32 CalculatePitch32(int bpp, int width) { |
| FX_SAFE_UINT32 pitch = bpp; |
| pitch *= width; |
| pitch += 31; |
| pitch /= 32; // quantized to number of 32-bit words. |
| pitch *= 4; // and then back to bytes, (not just /8 in one step). |
| return pitch; |
| } |