• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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