1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FXCODEC_FX_CODEC_H_ 8 #define CORE_FXCODEC_FX_CODEC_H_ 9 10 #include <map> 11 #include <memory> 12 #include <utility> 13 14 #include "core/fxcodec/fx_codec_def.h" 15 #include "core/fxcrt/fx_coordinates.h" 16 #include "core/fxcrt/fx_safe_types.h" 17 #include "core/fxcrt/fx_string.h" 18 19 #ifdef PDF_ENABLE_XFA 20 #ifdef PDF_ENABLE_XFA_BMP 21 #include "core/fxcodec/bmp/bmpmodule.h" 22 #endif // PDF_ENABLE_XFA_BMP 23 24 #ifdef PDF_ENABLE_XFA_GIF 25 #include "core/fxcodec/gif/gifmodule.h" 26 #endif // PDF_ENABLE_XFA_GIF 27 28 #ifdef PDF_ENABLE_XFA_PNG 29 #include "core/fxcodec/png/pngmodule.h" 30 #endif // PDF_ENABLE_XFA_PNG 31 32 #ifdef PDF_ENABLE_XFA_TIFF 33 #include "core/fxcodec/tiff/tiffmodule.h" 34 #endif // PDF_ENABLE_XFA_TIFF 35 #endif // PDF_ENABLE_XFA 36 37 namespace fxcodec { 38 39 #ifdef PDF_ENABLE_XFA 40 class CFX_DIBAttribute { 41 public: 42 CFX_DIBAttribute(); 43 ~CFX_DIBAttribute(); 44 45 int32_t m_nXDPI = -1; 46 int32_t m_nYDPI = -1; 47 uint16_t m_wDPIUnit = 0; 48 std::map<uint32_t, void*> m_Exif; 49 }; 50 #endif // PDF_ENABLE_XFA 51 52 class Jbig2Module; 53 class JpegModule; 54 class ProgressiveDecoder; 55 56 class ModuleMgr { 57 public: 58 // Per-process singleton managed by callers. 59 static void Create(); 60 static void Destroy(); 61 static ModuleMgr* GetInstance(); 62 GetJpegModule()63 JpegModule* GetJpegModule() const { return m_pJpegModule.get(); } GetJbig2Module()64 Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); } 65 66 #ifdef PDF_ENABLE_XFA 67 std::unique_ptr<ProgressiveDecoder> CreateProgressiveDecoder(); 68 69 #ifdef PDF_ENABLE_XFA_BMP GetBmpModule()70 BmpModule* GetBmpModule() const { return m_pBmpModule.get(); } SetBmpModule(std::unique_ptr<BmpModule> module)71 void SetBmpModule(std::unique_ptr<BmpModule> module) { 72 m_pBmpModule = std::move(module); 73 } 74 #endif // PDF_ENABLE_XFA_BMP 75 76 #ifdef PDF_ENABLE_XFA_GIF GetGifModule()77 GifModule* GetGifModule() const { return m_pGifModule.get(); } SetGifModule(std::unique_ptr<GifModule> module)78 void SetGifModule(std::unique_ptr<GifModule> module) { 79 m_pGifModule = std::move(module); 80 } 81 #endif // PDF_ENABLE_XFA_GIF 82 83 #ifdef PDF_ENABLE_XFA_PNG GetPngModule()84 PngModule* GetPngModule() const { return m_pPngModule.get(); } SetPngModule(std::unique_ptr<PngModule> module)85 void SetPngModule(std::unique_ptr<PngModule> module) { 86 m_pPngModule = std::move(module); 87 } 88 #endif // PDF_ENABLE_XFA_PNG 89 90 #ifdef PDF_ENABLE_XFA_TIFF GetTiffModule()91 TiffModule* GetTiffModule() const { return m_pTiffModule.get(); } SetTiffModule(std::unique_ptr<TiffModule> module)92 void SetTiffModule(std::unique_ptr<TiffModule> module) { 93 m_pTiffModule = std::move(module); 94 } 95 #endif // PDF_ENABLE_XFA_TIFF 96 #endif // PDF_ENABLE_XFA 97 98 private: 99 ModuleMgr(); 100 ~ModuleMgr(); 101 102 std::unique_ptr<JpegModule> m_pJpegModule; 103 std::unique_ptr<Jbig2Module> m_pJbig2Module; 104 105 #ifdef PDF_ENABLE_XFA 106 #ifdef PDF_ENABLE_XFA_BMP 107 std::unique_ptr<BmpModule> m_pBmpModule; 108 #endif // PDF_ENABLE_XFA_BMP 109 110 #ifdef PDF_ENABLE_XFA_GIF 111 std::unique_ptr<GifModule> m_pGifModule; 112 #endif // PDF_ENABLE_XFA_GIF 113 114 #ifdef PDF_ENABLE_XFA_PNG 115 std::unique_ptr<PngModule> m_pPngModule; 116 #endif // PDF_ENABLE_XFA_PNG 117 118 #ifdef PDF_ENABLE_XFA_TIFF 119 std::unique_ptr<TiffModule> m_pTiffModule; 120 #endif // PDF_ENABLE_XFA_TIFF 121 #endif // PDF_ENABLE_XFA 122 }; 123 124 void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels); 125 126 FX_SAFE_UINT32 CalculatePitch8(uint32_t bpc, uint32_t components, int width); 127 FX_SAFE_UINT32 CalculatePitch32(int bpp, int width); 128 129 } // namespace fxcodec 130 131 #ifdef PDF_ENABLE_XFA 132 using CFX_DIBAttribute = fxcodec::CFX_DIBAttribute; 133 #endif 134 135 #endif // CORE_FXCODEC_FX_CODEC_H_ 136