1 // Copyright 2016 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_SCANLINEDECODER_H_ 8 #define CORE_FXCODEC_SCANLINEDECODER_H_ 9 10 #include "core/fxcrt/fx_system.h" 11 12 class PauseIndicatorIface; 13 14 namespace fxcodec { 15 16 class ScanlineDecoder { 17 public: 18 ScanlineDecoder(); 19 ScanlineDecoder(int nOrigWidth, 20 int nOrigHeight, 21 int nOutputWidth, 22 int nOutputHeight, 23 int nComps, 24 int nBpc, 25 uint32_t nPitch); 26 virtual ~ScanlineDecoder(); 27 28 const uint8_t* GetScanline(int line); 29 bool SkipToScanline(int line, PauseIndicatorIface* pPause); 30 GetWidth()31 int GetWidth() const { return m_OutputWidth; } GetHeight()32 int GetHeight() const { return m_OutputHeight; } CountComps()33 int CountComps() const { return m_nComps; } GetBPC()34 int GetBPC() const { return m_bpc; } 35 36 virtual uint32_t GetSrcOffset() = 0; 37 38 protected: 39 virtual bool v_Rewind() = 0; 40 virtual uint8_t* v_GetNextLine() = 0; 41 42 uint8_t* ReadNextLine(); 43 44 int m_OrigWidth; 45 int m_OrigHeight; 46 int m_OutputWidth; 47 int m_OutputHeight; 48 int m_nComps; 49 int m_bpc; 50 uint32_t m_Pitch; 51 int m_NextLine = -1; 52 uint8_t* m_pLastScanline = nullptr; 53 }; 54 55 } // namespace fxcodec 56 57 using ScanlineDecoder = fxcodec::ScanlineDecoder; 58 59 #endif // CORE_FXCODEC_SCANLINEDECODER_H_ 60