blob: fd2f45665460f8b385c8c80f3260a07c096bd82f [file] [log] [blame]
// 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 "core/fxcodec/include/fx_codec_def.h"
#include "core/fxcrt/include/fx_string.h"
#include "core/fxcrt/include/fx_system.h"
class CFX_BinaryBuf;
class CFX_IccProfileCache;
class CFX_IccTransformCache;
class IFX_FileRead;
class CCodec_IccModule {
public:
enum IccCS {
IccCS_Unknown = 0,
IccCS_XYZ,
IccCS_Lab,
IccCS_Luv,
IccCS_YCbCr,
IccCS_Yxy,
IccCS_Hsv,
IccCS_Hls,
IccCS_Gray,
IccCS_Rgb,
IccCS_Cmyk,
IccCS_Cmy
};
struct IccParam {
uint32_t Version;
IccCS ColorSpace;
uint32_t dwProfileType;
uint32_t dwFormat;
uint8_t* pProfileData;
uint32_t dwProfileSize;
double Gamma;
};
CCodec_IccModule();
~CCodec_IccModule();
IccCS GetProfileCS(const uint8_t* pProfileData, unsigned int dwProfileSize);
IccCS GetProfileCS(IFX_FileRead* pFile);
void* CreateTransform(CCodec_IccModule::IccParam* pInputParam,
CCodec_IccModule::IccParam* pOutputParam,
CCodec_IccModule::IccParam* pProofParam = nullptr,
uint32_t dwIntent = Icc_INTENT_PERCEPTUAL,
uint32_t dwFlag = Icc_FLAGS_DEFAULT,
uint32_t dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC,
uint32_t dwPrfFlag = Icc_FLAGS_SOFTPROOFING);
void* CreateTransform_sRGB(const uint8_t* pProfileData,
uint32_t dwProfileSize,
uint32_t& nComponents,
int32_t intent = 0,
uint32_t dwSrcFormat = Icc_FORMAT_DEFAULT);
void* CreateTransform_CMYK(const uint8_t* pSrcProfileData,
uint32_t dwSrcProfileSize,
uint32_t& nSrcComponents,
const uint8_t* pDstProfileData,
uint32_t dwDstProfileSize,
int32_t intent = 0,
uint32_t dwSrcFormat = Icc_FORMAT_DEFAULT,
uint32_t dwDstFormat = Icc_FORMAT_DEFAULT);
void DestroyTransform(void* pTransform);
void Translate(void* pTransform, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues);
void TranslateScanline(void* pTransform,
uint8_t* pDest,
const uint8_t* pSrc,
int pixels);
void SetComponents(uint32_t nComponents) { m_nComponents = nComponents; }
protected:
enum Icc_CLASS {
Icc_CLASS_INPUT = 0,
Icc_CLASS_OUTPUT,
Icc_CLASS_PROOF,
Icc_CLASS_MAX
};
void* CreateProfile(CCodec_IccModule::IccParam* pIccParam,
Icc_CLASS ic,
CFX_BinaryBuf* pTransformKey);
uint32_t m_nComponents;
std::map<CFX_ByteString, CFX_IccTransformCache*> m_MapTranform;
std::map<CFX_ByteString, CFX_IccProfileCache*> m_MapProfile;
};
#endif // CORE_FXCODEC_CODEC_CCODEC_ICCMODULE_H_