// Copyright 2015 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_JBIG2_JBIG2_HTRDPROC_H_
#define CORE_FXCODEC_JBIG2_JBIG2_HTRDPROC_H_

#include <memory>
#include <vector>

#include "core/fxcodec/jbig2/JBig2_Image.h"
#include "core/fxcrt/fx_system.h"

class CJBig2_ArithDecoder;
class CJBig2_BitStream;
class PauseIndicatorIface;
struct JBig2ArithCtx;

class CJBig2_HTRDProc {
 public:
  std::unique_ptr<CJBig2_Image> DecodeArith(CJBig2_ArithDecoder* pArithDecoder,
                                            JBig2ArithCtx* gbContext,
                                            PauseIndicatorIface* pPause);

  std::unique_ptr<CJBig2_Image> DecodeMMR(CJBig2_BitStream* pStream);

 public:
  uint32_t HBW;
  uint32_t HBH;
  bool HMMR;
  uint8_t HTEMPLATE;
  uint32_t HNUMPATS;
  const std::vector<std::unique_ptr<CJBig2_Image>>* HPATS;
  bool HDEFPIXEL;
  JBig2ComposeOp HCOMBOP;
  bool HENABLESKIP;
  uint32_t HGW;
  uint32_t HGH;
  int32_t HGX;
  int32_t HGY;
  uint16_t HRX;
  uint16_t HRY;
  uint8_t HPW;
  uint8_t HPH;

 private:
  std::unique_ptr<CJBig2_Image> DecodeImage(
      const std::vector<std::unique_ptr<CJBig2_Image>>& GSPLANES);
};

#endif  // CORE_FXCODEC_JBIG2_JBIG2_HTRDPROC_H_
