Home | History | Annotate | Download | only in fxcodec
      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 
     67   CCodec_BasicModule* GetBasicModule() const { return m_pBasicModule.get(); }
     68   CCodec_FaxModule* GetFaxModule() const { return m_pFaxModule.get(); }
     69   CCodec_JpegModule* GetJpegModule() const { return m_pJpegModule.get(); }
     70   CCodec_JpxModule* GetJpxModule() const { return m_pJpxModule.get(); }
     71   CCodec_Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); }
     72   CCodec_IccModule* GetIccModule() const { return m_pIccModule.get(); }
     73   CCodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); }
     74 
     75 #ifdef PDF_ENABLE_XFA
     76   std::unique_ptr<CCodec_ProgressiveDecoder> CreateProgressiveDecoder();
     77   void SetBmpModule(std::unique_ptr<ICodec_BmpModule> module) {
     78     m_pBmpModule = std::move(module);
     79   }
     80   void SetGifModule(std::unique_ptr<ICodec_GifModule> module) {
     81     m_pGifModule = std::move(module);
     82   }
     83   void SetPngModule(std::unique_ptr<ICodec_PngModule> module) {
     84     m_pPngModule = std::move(module);
     85   }
     86   void SetTiffModule(std::unique_ptr<ICodec_TiffModule> module) {
     87     m_pTiffModule = std::move(module);
     88   }
     89   ICodec_BmpModule* GetBmpModule() const { return m_pBmpModule.get(); }
     90   ICodec_GifModule* GetGifModule() const { return m_pGifModule.get(); }
     91   ICodec_PngModule* GetPngModule() const { return m_pPngModule.get(); }
     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