// 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
#ifndef CORE_FXCODEC_FX_CODEC_H_
#define CORE_FXCODEC_FX_CODEC_H_
#include <map>
#include <memory>
#include <utility>
#include <vector>
#include "core/fxcodec/codec/ccodec_basicmodule.h"
#include "core/fxcodec/codec/ccodec_faxmodule.h"
#include "core/fxcodec/codec/ccodec_flatemodule.h"
#include "core/fxcodec/codec/ccodec_iccmodule.h"
#include "core/fxcodec/codec/ccodec_jbig2module.h"
#include "core/fxcodec/codec/ccodec_jpegmodule.h"
#include "core/fxcodec/codec/ccodec_jpxmodule.h"
#include "core/fxcodec/codec/ccodec_scanlinedecoder.h"
#include "core/fxcodec/fx_codec_def.h"
#include "core/fxcrt/fx_basic.h"
#include "core/fxcrt/fx_coordinates.h"
#ifdef PDF_ENABLE_XFA
#include "core/fxcodec/codec/icodec_bmpmodule.h"
#include "core/fxcodec/codec/icodec_gifmodule.h"
#include "core/fxcodec/codec/icodec_pngmodule.h"
#include "core/fxcodec/codec/icodec_tiffmodule.h"
#endif // PDF_ENABLE_XFA
class CFX_DIBSource;
class CJPX_Decoder;
class CPDF_ColorSpace;
class CPDF_StreamAcc;
#ifdef PDF_ENABLE_XFA
class CCodec_ProgressiveDecoder;
class CFX_DIBAttribute {
public:
CFX_DIBAttribute();
~CFX_DIBAttribute();
int32_t m_nXDPI;
int32_t m_nYDPI;
FX_FLOAT m_fAspectRatio;
uint16_t m_wDPIUnit;
CFX_ByteString m_strAuthor;
uint8_t m_strTime[20];
int32_t m_nGifLeft;
int32_t m_nGifTop;
uint32_t* m_pGifLocalPalette;
uint32_t m_nGifLocalPalNum;
int32_t m_nBmpCompressType;
std::map<uint32_t, void*> m_Exif;
};
#endif // PDF_ENABLE_XFA
class CCodec_ModuleMgr {
public:
CCodec_ModuleMgr();
~CCodec_ModuleMgr();
CCodec_BasicModule* GetBasicModule() const { return m_pBasicModule.get(); }
CCodec_FaxModule* GetFaxModule() const { return m_pFaxModule.get(); }
CCodec_JpegModule* GetJpegModule() const { return m_pJpegModule.get(); }
CCodec_JpxModule* GetJpxModule() const { return m_pJpxModule.get(); }
CCodec_Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); }
CCodec_IccModule* GetIccModule() const { return m_pIccModule.get(); }
CCodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); }
#ifdef PDF_ENABLE_XFA
std::unique_ptr<CCodec_ProgressiveDecoder> CreateProgressiveDecoder();
void SetBmpModule(std::unique_ptr<ICodec_BmpModule> module) {
m_pBmpModule = std::move(module);
}
void SetGifModule(std::unique_ptr<ICodec_GifModule> module) {
m_pGifModule = std::move(module);
}
void SetPngModule(std::unique_ptr<ICodec_PngModule> module) {
m_pPngModule = std::move(module);
}
void SetTiffModule(std::unique_ptr<ICodec_TiffModule> module) {
m_pTiffModule = std::move(module);
}
ICodec_BmpModule* GetBmpModule() const { return m_pBmpModule.get(); }
ICodec_GifModule* GetGifModule() const { return m_pGifModule.get(); }
ICodec_PngModule* GetPngModule() const { return m_pPngModule.get(); }
ICodec_TiffModule* GetTiffModule() const { return m_pTiffModule.get(); }
#endif // PDF_ENABLE_XFA
protected:
std::unique_ptr<CCodec_BasicModule> m_pBasicModule;
std::unique_ptr<CCodec_FaxModule> m_pFaxModule;
std::unique_ptr<CCodec_JpegModule> m_pJpegModule;
std::unique_ptr<CCodec_JpxModule> m_pJpxModule;
std::unique_ptr<CCodec_Jbig2Module> m_pJbig2Module;
std::unique_ptr<CCodec_IccModule> m_pIccModule;
#ifdef PDF_ENABLE_XFA
std::unique_ptr<ICodec_BmpModule> m_pBmpModule;
std::unique_ptr<ICodec_GifModule> m_pGifModule;
std::unique_ptr<ICodec_PngModule> m_pPngModule;
std::unique_ptr<ICodec_TiffModule> m_pTiffModule;
#endif // PDF_ENABLE_XFA
std::unique_ptr<CCodec_FlateModule> m_pFlateModule;
};
void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels);
uint32_t ComponentsForFamily(int family);
void sRGB_to_AdobeCMYK(FX_FLOAT R,
FX_FLOAT G,
FX_FLOAT B,
FX_FLOAT& c,
FX_FLOAT& m,
FX_FLOAT& y,
FX_FLOAT& k);
void AdobeCMYK_to_sRGB(FX_FLOAT c,
FX_FLOAT m,
FX_FLOAT y,
FX_FLOAT k,
FX_FLOAT& R,
FX_FLOAT& G,
FX_FLOAT& B);
void AdobeCMYK_to_sRGB1(uint8_t c,
uint8_t m,
uint8_t y,
uint8_t k,
uint8_t& R,
uint8_t& G,
uint8_t& B);
bool MD5ComputeID(const void* buf, uint32_t dwSize, uint8_t ID[16]);
void FaxG4Decode(const uint8_t* src_buf,
uint32_t src_size,
int* pbitpos,
uint8_t* dest_buf,
int width,
int height,
int pitch);
#endif // CORE_FXCODEC_FX_CODEC_H_