// 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_ICCMODULE_H_
#define CORE_FXCODEC_CODEC_CCODEC_ICCMODULE_H_

#include <memory>

#include "core/fxcodec/fx_codec_def.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/fx_system.h"
#include "third_party/base/ptr_util.h"

#if defined(USE_SYSTEM_LCMS2)
#include <lcms2.h>
#else
#include "third_party/lcms2-2.6/include/lcms2.h"
#endif

class CLcmsCmm {
 public:
  CLcmsCmm(int srcComponents, cmsHTRANSFORM transform, bool isLab);
  ~CLcmsCmm();

  cmsHTRANSFORM m_hTransform;
  int m_nSrcComponents;
  bool m_bLab;
};

class CCodec_IccModule {
 public:
  CCodec_IccModule();
  ~CCodec_IccModule();

  std::unique_ptr<CLcmsCmm> CreateTransform_sRGB(const uint8_t* pProfileData,
                                                 uint32_t dwProfileSize,
                                                 uint32_t* nComponents);
  void Translate(CLcmsCmm* pTransform,
                 const float* pSrcValues,
                 float* pDestValues);
  void TranslateScanline(CLcmsCmm* pTransform,
                         uint8_t* pDest,
                         const uint8_t* pSrc,
                         int pixels);
  void SetComponents(uint32_t nComponents) { m_nComponents = nComponents; }

 protected:
  uint32_t m_nComponents;
};

#endif  // CORE_FXCODEC_CODEC_CCODEC_ICCMODULE_H_
