summaryrefslogtreecommitdiff
path: root/core/fpdfapi/render/cpdf_dibsource.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/render/cpdf_dibsource.h')
-rw-r--r--core/fpdfapi/render/cpdf_dibsource.h155
1 files changed, 155 insertions, 0 deletions
diff --git a/core/fpdfapi/render/cpdf_dibsource.h b/core/fpdfapi/render/cpdf_dibsource.h
new file mode 100644
index 0000000000..8369d2a1be
--- /dev/null
+++ b/core/fpdfapi/render/cpdf_dibsource.h
@@ -0,0 +1,155 @@
+// Copyright 2017 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_FPDFAPI_RENDER_CPDF_DIBSOURCE_H_
+#define CORE_FPDFAPI_RENDER_CPDF_DIBSOURCE_H_
+
+#include <map>
+#include <memory>
+#include <vector>
+
+#include "core/fpdfapi/page/cpdf_clippath.h"
+#include "core/fpdfapi/page/cpdf_countedobject.h"
+#include "core/fpdfapi/page/cpdf_graphicstates.h"
+#include "core/fpdfapi/parser/cpdf_stream_acc.h"
+#include "core/fpdfapi/render/cpdf_imageloader.h"
+#include "core/fpdfapi/render/cpdf_rendercontext.h"
+#include "core/fpdfapi/render/cpdf_renderoptions.h"
+#include "core/fxge/cfx_fxgedevice.h"
+#include "core/fxge/cfx_renderdevice.h"
+
+class CCodec_Jbig2Context;
+class CCodec_ScanlineDecoder;
+class CPDF_Color;
+class CPDF_Dictionary;
+class CPDF_Document;
+class CPDF_Stream;
+
+typedef struct {
+ FX_FLOAT m_DecodeMin;
+ FX_FLOAT m_DecodeStep;
+ int m_ColorKeyMin;
+ int m_ColorKeyMax;
+} DIB_COMP_DATA;
+
+#define FPDF_HUGE_IMAGE_SIZE 60000000
+
+class CPDF_DIBSource : public CFX_DIBSource {
+ public:
+ CPDF_DIBSource();
+ ~CPDF_DIBSource() override;
+
+ bool Load(CPDF_Document* pDoc,
+ const CPDF_Stream* pStream,
+ CPDF_DIBSource** ppMask,
+ uint32_t* pMatteColor,
+ CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources,
+ bool bStdCS = false,
+ uint32_t GroupFamily = 0,
+ bool bLoadMask = false);
+
+ // CFX_DIBSource
+ bool SkipToScanline(int line, IFX_Pause* pPause) const override;
+ uint8_t* GetBuffer() const override;
+ const uint8_t* GetScanline(int line) const override;
+ void DownSampleScanline(int line,
+ uint8_t* dest_scan,
+ int dest_bpp,
+ int dest_width,
+ bool bFlipX,
+ int clip_left,
+ int clip_width) const override;
+
+ uint32_t GetMatteColor() const { return m_MatteColor; }
+
+ int StartLoadDIBSource(CPDF_Document* pDoc,
+ const CPDF_Stream* pStream,
+ bool bHasMask,
+ CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources,
+ bool bStdCS = false,
+ uint32_t GroupFamily = 0,
+ bool bLoadMask = false);
+ int ContinueLoadDIBSource(IFX_Pause* pPause);
+ int StratLoadMask();
+ int StartLoadMaskDIB();
+ int ContinueLoadMaskDIB(IFX_Pause* pPause);
+ int ContinueToLoadMask();
+ CPDF_DIBSource* DetachMask();
+
+ private:
+ bool LoadColorInfo(const CPDF_Dictionary* pFormResources,
+ const CPDF_Dictionary* pPageResources);
+ DIB_COMP_DATA* GetDecodeAndMaskArray(bool& bDefaultDecode, bool& bColorKey);
+ CPDF_DIBSource* LoadMask(uint32_t& MatteColor);
+ CPDF_DIBSource* LoadMaskDIB(CPDF_Stream* pMask);
+ void LoadJpxBitmap();
+ void LoadPalette();
+ int CreateDecoder();
+ void TranslateScanline24bpp(uint8_t* dest_scan,
+ const uint8_t* src_scan) const;
+ void ValidateDictParam();
+ void DownSampleScanline1Bit(int orig_Bpp,
+ int dest_Bpp,
+ uint32_t src_width,
+ const uint8_t* pSrcLine,
+ uint8_t* dest_scan,
+ int dest_width,
+ bool bFlipX,
+ int clip_left,
+ int clip_width) const;
+ void DownSampleScanline8Bit(int orig_Bpp,
+ int dest_Bpp,
+ uint32_t src_width,
+ const uint8_t* pSrcLine,
+ uint8_t* dest_scan,
+ int dest_width,
+ bool bFlipX,
+ int clip_left,
+ int clip_width) const;
+ void DownSampleScanline32Bit(int orig_Bpp,
+ int dest_Bpp,
+ uint32_t src_width,
+ const uint8_t* pSrcLine,
+ uint8_t* dest_scan,
+ int dest_width,
+ bool bFlipX,
+ int clip_left,
+ int clip_width) const;
+ bool TransMask() const;
+
+ CPDF_Document* m_pDocument;
+ const CPDF_Stream* m_pStream;
+ std::unique_ptr<CPDF_StreamAcc> m_pStreamAcc;
+ const CPDF_Dictionary* m_pDict;
+ CPDF_ColorSpace* m_pColorSpace;
+ uint32_t m_Family;
+ uint32_t m_bpc;
+ uint32_t m_bpc_orig;
+ uint32_t m_nComponents;
+ uint32_t m_GroupFamily;
+ uint32_t m_MatteColor;
+ bool m_bLoadMask;
+ bool m_bDefaultDecode;
+ bool m_bImageMask;
+ bool m_bDoBpcCheck;
+ bool m_bColorKey;
+ bool m_bHasMask;
+ bool m_bStdCS;
+ DIB_COMP_DATA* m_pCompData;
+ uint8_t* m_pLineBuf;
+ uint8_t* m_pMaskedLine;
+ std::unique_ptr<CFX_DIBitmap> m_pCachedBitmap;
+ std::unique_ptr<CCodec_ScanlineDecoder> m_pDecoder;
+ CPDF_DIBSource* m_pMask;
+ std::unique_ptr<CPDF_StreamAcc> m_pGlobalStream;
+ std::unique_ptr<CCodec_Jbig2Context> m_pJbig2Context;
+ CPDF_Stream* m_pMaskStream;
+ int m_Status;
+};
+
+#endif // CORE_FPDFAPI_RENDER_CPDF_DIBSOURCE_H_