136 lines
3.4 KiB
C++
136 lines
3.4 KiB
C++
// 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 "core/fxcodec/fx_codec_def.h"
|
|
#include "core/fxcrt/fx_coordinates.h"
|
|
#include "core/fxcrt/fx_safe_types.h"
|
|
#include "core/fxcrt/fx_string.h"
|
|
|
|
#ifdef PDF_ENABLE_XFA
|
|
#ifdef PDF_ENABLE_XFA_BMP
|
|
#include "core/fxcodec/bmp/bmpmodule.h"
|
|
#endif // PDF_ENABLE_XFA_BMP
|
|
|
|
#ifdef PDF_ENABLE_XFA_GIF
|
|
#include "core/fxcodec/gif/gifmodule.h"
|
|
#endif // PDF_ENABLE_XFA_GIF
|
|
|
|
#ifdef PDF_ENABLE_XFA_PNG
|
|
#include "core/fxcodec/png/pngmodule.h"
|
|
#endif // PDF_ENABLE_XFA_PNG
|
|
|
|
#ifdef PDF_ENABLE_XFA_TIFF
|
|
#include "core/fxcodec/tiff/tiffmodule.h"
|
|
#endif // PDF_ENABLE_XFA_TIFF
|
|
#endif // PDF_ENABLE_XFA
|
|
|
|
namespace fxcodec {
|
|
|
|
#ifdef PDF_ENABLE_XFA
|
|
class CFX_DIBAttribute {
|
|
public:
|
|
CFX_DIBAttribute();
|
|
~CFX_DIBAttribute();
|
|
|
|
int32_t m_nXDPI = -1;
|
|
int32_t m_nYDPI = -1;
|
|
uint16_t m_wDPIUnit = 0;
|
|
std::map<uint32_t, void*> m_Exif;
|
|
};
|
|
#endif // PDF_ENABLE_XFA
|
|
|
|
class Jbig2Module;
|
|
class JpegModule;
|
|
class ProgressiveDecoder;
|
|
|
|
class ModuleMgr {
|
|
public:
|
|
// Per-process singleton managed by callers.
|
|
static void Create();
|
|
static void Destroy();
|
|
static ModuleMgr* GetInstance();
|
|
|
|
JpegModule* GetJpegModule() const { return m_pJpegModule.get(); }
|
|
Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); }
|
|
|
|
#ifdef PDF_ENABLE_XFA
|
|
std::unique_ptr<ProgressiveDecoder> CreateProgressiveDecoder();
|
|
|
|
#ifdef PDF_ENABLE_XFA_BMP
|
|
BmpModule* GetBmpModule() const { return m_pBmpModule.get(); }
|
|
void SetBmpModule(std::unique_ptr<BmpModule> module) {
|
|
m_pBmpModule = std::move(module);
|
|
}
|
|
#endif // PDF_ENABLE_XFA_BMP
|
|
|
|
#ifdef PDF_ENABLE_XFA_GIF
|
|
GifModule* GetGifModule() const { return m_pGifModule.get(); }
|
|
void SetGifModule(std::unique_ptr<GifModule> module) {
|
|
m_pGifModule = std::move(module);
|
|
}
|
|
#endif // PDF_ENABLE_XFA_GIF
|
|
|
|
#ifdef PDF_ENABLE_XFA_PNG
|
|
PngModule* GetPngModule() const { return m_pPngModule.get(); }
|
|
void SetPngModule(std::unique_ptr<PngModule> module) {
|
|
m_pPngModule = std::move(module);
|
|
}
|
|
#endif // PDF_ENABLE_XFA_PNG
|
|
|
|
#ifdef PDF_ENABLE_XFA_TIFF
|
|
TiffModule* GetTiffModule() const { return m_pTiffModule.get(); }
|
|
void SetTiffModule(std::unique_ptr<TiffModule> module) {
|
|
m_pTiffModule = std::move(module);
|
|
}
|
|
#endif // PDF_ENABLE_XFA_TIFF
|
|
#endif // PDF_ENABLE_XFA
|
|
|
|
private:
|
|
ModuleMgr();
|
|
~ModuleMgr();
|
|
|
|
std::unique_ptr<JpegModule> m_pJpegModule;
|
|
std::unique_ptr<Jbig2Module> m_pJbig2Module;
|
|
|
|
#ifdef PDF_ENABLE_XFA
|
|
#ifdef PDF_ENABLE_XFA_BMP
|
|
std::unique_ptr<BmpModule> m_pBmpModule;
|
|
#endif // PDF_ENABLE_XFA_BMP
|
|
|
|
#ifdef PDF_ENABLE_XFA_GIF
|
|
std::unique_ptr<GifModule> m_pGifModule;
|
|
#endif // PDF_ENABLE_XFA_GIF
|
|
|
|
#ifdef PDF_ENABLE_XFA_PNG
|
|
std::unique_ptr<PngModule> m_pPngModule;
|
|
#endif // PDF_ENABLE_XFA_PNG
|
|
|
|
#ifdef PDF_ENABLE_XFA_TIFF
|
|
std::unique_ptr<TiffModule> m_pTiffModule;
|
|
#endif // PDF_ENABLE_XFA_TIFF
|
|
#endif // PDF_ENABLE_XFA
|
|
};
|
|
|
|
void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels);
|
|
|
|
FX_SAFE_UINT32 CalculatePitch8(uint32_t bpc, uint32_t components, int width);
|
|
FX_SAFE_UINT32 CalculatePitch32(int bpp, int width);
|
|
|
|
} // namespace fxcodec
|
|
|
|
#ifdef PDF_ENABLE_XFA
|
|
using CFX_DIBAttribute = fxcodec::CFX_DIBAttribute;
|
|
#endif
|
|
|
|
#endif // CORE_FXCODEC_FX_CODEC_H_
|