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