// Copyright 2016 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_CODEC_CCODEC_SCANLINEDECODER_H_
#define CORE_FXCODEC_CODEC_CCODEC_SCANLINEDECODER_H_

#include "core/fxcrt/fx_system.h"

class PauseIndicatorIface;

class CCodec_ScanlineDecoder {
 public:
  CCodec_ScanlineDecoder();
  CCodec_ScanlineDecoder(int nOrigWidth,
                         int nOrigHeight,
                         int nOutputWidth,
                         int nOutputHeight,
                         int nComps,
                         int nBpc,
                         uint32_t nPitch);
  virtual ~CCodec_ScanlineDecoder();

  const uint8_t* GetScanline(int line);
  bool SkipToScanline(int line, PauseIndicatorIface* pPause);

  int GetWidth() { return m_OutputWidth; }
  int GetHeight() { return m_OutputHeight; }
  int CountComps() { return m_nComps; }
  int GetBPC() { return m_bpc; }

  virtual uint32_t GetSrcOffset() = 0;

 protected:
  virtual bool v_Rewind() = 0;
  virtual uint8_t* v_GetNextLine() = 0;

  uint8_t* ReadNextLine();

  int m_OrigWidth;
  int m_OrigHeight;
  int m_OutputWidth;
  int m_OutputHeight;
  int m_nComps;
  int m_bpc;
  uint32_t m_Pitch;
  int m_NextLine;
  uint8_t* m_pLastScanline;
};

#endif  // CORE_FXCODEC_CODEC_CCODEC_SCANLINEDECODER_H_
