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 #include <vector> 14 15 #include "core/fxcodec/codec/ccodec_basicmodule.h" 16 #include "core/fxcodec/codec/ccodec_faxmodule.h" 17 #include "core/fxcodec/codec/ccodec_flatemodule.h" 18 #include "core/fxcodec/codec/ccodec_iccmodule.h" 19 #include "core/fxcodec/codec/ccodec_jbig2module.h" 20 #include "core/fxcodec/codec/ccodec_jpegmodule.h" 21 #include "core/fxcodec/codec/ccodec_jpxmodule.h" 22 #include "core/fxcodec/codec/ccodec_scanlinedecoder.h" 23 #include "core/fxcodec/fx_codec_def.h" 24 #include "core/fxcrt/fx_basic.h" 25 #include "core/fxcrt/fx_coordinates.h" 26 27 #ifdef PDF_ENABLE_XFA 28 #include "core/fxcodec/codec/icodec_bmpmodule.h" 29 #include "core/fxcodec/codec/icodec_gifmodule.h" 30 #include "core/fxcodec/codec/icodec_pngmodule.h" 31 #include "core/fxcodec/codec/icodec_tiffmodule.h" 32 #endif // PDF_ENABLE_XFA 33 34 class CFX_DIBSource; 35 class CJPX_Decoder; 36 class CPDF_ColorSpace; 37 class CPDF_StreamAcc; 38 39 #ifdef PDF_ENABLE_XFA 40 class CCodec_ProgressiveDecoder; 41 42 class CFX_DIBAttribute { 43 public: 44 CFX_DIBAttribute(); 45 ~CFX_DIBAttribute(); 46 47 int32_t m_nXDPI; 48 int32_t m_nYDPI; 49 FX_FLOAT m_fAspectRatio; 50 uint16_t m_wDPIUnit; 51 CFX_ByteString m_strAuthor; 52 uint8_t m_strTime[20]; 53 int32_t m_nGifLeft; 54 int32_t m_nGifTop; 55 uint32_t* m_pGifLocalPalette; 56 uint32_t m_nGifLocalPalNum; 57 int32_t m_nBmpCompressType; 58 std::map<uint32_t, void*> m_Exif; 59 }; 60 #endif // PDF_ENABLE_XFA 61 62 class CCodec_ModuleMgr { 63 public: 64 CCodec_ModuleMgr(); 65 ~CCodec_ModuleMgr(); 66 GetBasicModule()67 CCodec_BasicModule* GetBasicModule() const { return m_pBasicModule.get(); } GetFaxModule()68 CCodec_FaxModule* GetFaxModule() const { return m_pFaxModule.get(); } GetJpegModule()69 CCodec_JpegModule* GetJpegModule() const { return m_pJpegModule.get(); } GetJpxModule()70 CCodec_JpxModule* GetJpxModule() const { return m_pJpxModule.get(); } GetJbig2Module()71 CCodec_Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); } GetIccModule()72 CCodec_IccModule* GetIccModule() const { return m_pIccModule.get(); } GetFlateModule()73 CCodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); } 74 75 #ifdef PDF_ENABLE_XFA 76 std::unique_ptr<CCodec_ProgressiveDecoder> CreateProgressiveDecoder(); SetBmpModule(std::unique_ptr<ICodec_BmpModule> module)77 void SetBmpModule(std::unique_ptr<ICodec_BmpModule> module) { 78 m_pBmpModule = std::move(module); 79 } SetGifModule(std::unique_ptr<ICodec_GifModule> module)80 void SetGifModule(std::unique_ptr<ICodec_GifModule> module) { 81 m_pGifModule = std::move(module); 82 } SetPngModule(std::unique_ptr<ICodec_PngModule> module)83 void SetPngModule(std::unique_ptr<ICodec_PngModule> module) { 84 m_pPngModule = std::move(module); 85 } SetTiffModule(std::unique_ptr<ICodec_TiffModule> module)86 void SetTiffModule(std::unique_ptr<ICodec_TiffModule> module) { 87 m_pTiffModule = std::move(module); 88 } GetBmpModule()89 ICodec_BmpModule* GetBmpModule() const { return m_pBmpModule.get(); } GetGifModule()90 ICodec_GifModule* GetGifModule() const { return m_pGifModule.get(); } GetPngModule()91 ICodec_PngModule* GetPngModule() const { return m_pPngModule.get(); } GetTiffModule()92 ICodec_TiffModule* GetTiffModule() const { return m_pTiffModule.get(); } 93 #endif // PDF_ENABLE_XFA 94 95 protected: 96 std::unique_ptr<CCodec_BasicModule> m_pBasicModule; 97 std::unique_ptr<CCodec_FaxModule> m_pFaxModule; 98 std::unique_ptr<CCodec_JpegModule> m_pJpegModule; 99 std::unique_ptr<CCodec_JpxModule> m_pJpxModule; 100 std::unique_ptr<CCodec_Jbig2Module> m_pJbig2Module; 101 std::unique_ptr<CCodec_IccModule> m_pIccModule; 102 103 #ifdef PDF_ENABLE_XFA 104 std::unique_ptr<ICodec_BmpModule> m_pBmpModule; 105 std::unique_ptr<ICodec_GifModule> m_pGifModule; 106 std::unique_ptr<ICodec_PngModule> m_pPngModule; 107 std::unique_ptr<ICodec_TiffModule> m_pTiffModule; 108 #endif // PDF_ENABLE_XFA 109 110 std::unique_ptr<CCodec_FlateModule> m_pFlateModule; 111 }; 112 113 void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels); 114 uint32_t ComponentsForFamily(int family); 115 void sRGB_to_AdobeCMYK(FX_FLOAT R, 116 FX_FLOAT G, 117 FX_FLOAT B, 118 FX_FLOAT& c, 119 FX_FLOAT& m, 120 FX_FLOAT& y, 121 FX_FLOAT& k); 122 void AdobeCMYK_to_sRGB(FX_FLOAT c, 123 FX_FLOAT m, 124 FX_FLOAT y, 125 FX_FLOAT k, 126 FX_FLOAT& R, 127 FX_FLOAT& G, 128 FX_FLOAT& B); 129 void AdobeCMYK_to_sRGB1(uint8_t c, 130 uint8_t m, 131 uint8_t y, 132 uint8_t k, 133 uint8_t& R, 134 uint8_t& G, 135 uint8_t& B); 136 bool MD5ComputeID(const void* buf, uint32_t dwSize, uint8_t ID[16]); 137 void FaxG4Decode(const uint8_t* src_buf, 138 uint32_t src_size, 139 int* pbitpos, 140 uint8_t* dest_buf, 141 int width, 142 int height, 143 int pitch); 144 145 #endif // CORE_FXCODEC_FX_CODEC_H_ 146