1 // Copyright 2017 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_FPDFAPI_PAGE_CPDF_SAMPLEDFUNC_H_
8 #define CORE_FPDFAPI_PAGE_CPDF_SAMPLEDFUNC_H_
9 
10 #include <set>
11 #include <vector>
12 
13 #include "core/fpdfapi/page/cpdf_function.h"
14 #include "core/fxcrt/retain_ptr.h"
15 
16 class CPDF_StreamAcc;
17 
18 class CPDF_SampledFunc final : public CPDF_Function {
19  public:
20   struct SampleEncodeInfo {
21     float encode_max;
22     float encode_min;
23     uint32_t sizes;
24   };
25 
26   struct SampleDecodeInfo {
27     float decode_max;
28     float decode_min;
29   };
30 
31   CPDF_SampledFunc();
32   ~CPDF_SampledFunc() override;
33 
34   // CPDF_Function
35   bool v_Init(const CPDF_Object* pObj,
36               std::set<const CPDF_Object*>* pVisited) override;
37   bool v_Call(const float* inputs, float* results) const override;
38 
GetEncodeInfo()39   const std::vector<SampleEncodeInfo>& GetEncodeInfo() const {
40     return m_EncodeInfo;
41   }
GetBitsPerSample()42   uint32_t GetBitsPerSample() const { return m_nBitsPerSample; }
43 
44 #if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
45   RetainPtr<CPDF_StreamAcc> GetSampleStream() const;
46 #endif
47 
48  private:
49   std::vector<SampleEncodeInfo> m_EncodeInfo;
50   std::vector<SampleDecodeInfo> m_DecodeInfo;
51   uint32_t m_nBitsPerSample;
52   uint32_t m_SampleMax;
53   RetainPtr<CPDF_StreamAcc> m_pSampleStream;
54 };
55 
56 #endif  // CORE_FPDFAPI_PAGE_CPDF_SAMPLEDFUNC_H_
57