Chromium Code Reviews| Index: core/src/fxcodec/codec/fx_codec_icc.cpp |
| diff --git a/core/src/fxcodec/codec/fx_codec_icc.cpp b/core/src/fxcodec/codec/fx_codec_icc.cpp |
| index b10d9c48683db2318857d6e230130750fecd06a8..f0ece07c31b56b5e23e454e75af78400b565be4c 100644 |
| --- a/core/src/fxcodec/codec/fx_codec_icc.cpp |
| +++ b/core/src/fxcodec/codec/fx_codec_icc.cpp |
| @@ -7,6 +7,12 @@ |
| #include "../../../include/fxcodec/fx_codec.h" |
| #include "codec_int.h" |
| #include "../lcms2/include/fx_lcms2.h" |
| +#define N_COMPONENT_LAB 3 |
|
jun_fang
2014/08/25 18:56:51
It's better to use const variables rather than mac
Bo Xu
2014/08/25 20:28:18
Done.
|
| +#define N_COMPONENT_GRAY 1 |
| +#define N_COMPONENT_RGB 3 |
| +#define N_COMPONENT_CMYK 4 |
| +#define N_COMPONENT_DEFAULT 3 |
| + |
| FX_BOOL MD5ComputeID( FX_LPCVOID buf, FX_DWORD dwSize, FX_BYTE ID[16] ) |
| { |
| return cmsMD5computeIDExt(buf, dwSize, ID); |
| @@ -59,14 +65,35 @@ FX_BOOL CheckComponents(cmsColorSpaceSignature cs, int nComponents, FX_BOOL bDst |
| } |
| return TRUE; |
| } |
| -void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, unsigned int dwSrcProfileSize, int nSrcComponents, |
| - const unsigned char* pDstProfileData, unsigned int dwDstProfileSize, int nDstComponents, |
| +FX_INT32 GetCSComponents(cmsColorSpaceSignature cs) |
| +{ |
|
jun_fang
2014/08/25 18:56:51
FX_DWORD components = N_COMPONENT_DEFAULT;
Bo Xu
2014/08/25 20:28:18
Done.
|
| + switch (cs) { |
| + case cmsSigLabData: |
| + return N_COMPONENT_LAB; |
|
jun_fang
2014/08/25 18:56:51
use |components = N_COMPONENT_LAB| to replace the
|
| + break; |
| + case cmsSigGrayData: |
| + return N_COMPONENT_GRAY; |
| + break; |
| + case cmsSigRgbData: |
| + return N_COMPONENT_RGB; |
| + break; |
| + case cmsSigCmykData: |
| + return N_COMPONENT_CMYK; |
| + break; |
| + default: |
| + return N_COMPONENT_DEFAULT; |
| + break; |
| + } |
|
jun_fang
2014/08/25 18:56:51
return components;
|
| +} |
| +void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, FX_DWORD dwSrcProfileSize, FX_INT32* nSrcComponents, |
| + const unsigned char* pDstProfileData, FX_DWORD dwDstProfileSize, FX_INT32 nDstComponents, |
| int intent, FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT, FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT) |
| { |
| cmsHPROFILE srcProfile = NULL; |
| cmsHPROFILE dstProfile = NULL; |
| cmsHTRANSFORM hTransform = NULL; |
| CLcmsCmm* pCmm = NULL; |
| + *nSrcComponents = 0; |
|
jun_fang
2014/08/25 18:56:51
Need to check whether nSrcComponents is NULL.
Bo Xu
2014/08/25 20:28:18
I have changed nSrcComponents from pointer to refe
|
| srcProfile = cmsOpenProfileFromMem((void*)pSrcProfileData, dwSrcProfileSize); |
| if (srcProfile == NULL) { |
| return NULL; |
| @@ -83,16 +110,12 @@ void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, unsigned int |
| int srcFormat; |
| FX_BOOL bLab = FALSE; |
| cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile); |
| - if (!CheckComponents(srcCS, nSrcComponents, FALSE)) { |
| - cmsCloseProfile(srcProfile); |
| - cmsCloseProfile(dstProfile); |
| - return NULL; |
| - } |
| + *nSrcComponents = GetCSComponents(srcCS); |
| if (srcCS == cmsSigLabData) { |
| - srcFormat = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); |
| + srcFormat = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(*nSrcComponents) | BYTES_SH(0); |
| bLab = TRUE; |
| } else { |
| - srcFormat = COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); |
| + srcFormat = COLORSPACE_SH(PT_ANY) | CHANNELS_SH(*nSrcComponents) | BYTES_SH(1); |
| if (srcCS == cmsSigRgbData && T_DOSWAP(dwSrcFormat)) { |
| srcFormat |= DOSWAP_SH(1); |
| } |
| @@ -127,7 +150,7 @@ void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, unsigned int |
| if (pCmm == NULL) { |
| return NULL; |
| } |
| - pCmm->m_nSrcComponents = nSrcComponents; |
| + pCmm->m_nSrcComponents = *nSrcComponents; |
| pCmm->m_nDstComponents = nDstComponents; |
| pCmm->m_hTransform = hTransform; |
| pCmm->m_bLab = bLab; |
| @@ -135,7 +158,7 @@ void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, unsigned int |
| cmsCloseProfile(dstProfile); |
| return pCmm; |
| } |
| -void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData, unsigned int dwProfileSize, int nComponents, int intent, FX_DWORD dwSrcFormat) |
| +void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData, FX_DWORD dwProfileSize, FX_INT32* nComponents, FX_INT32 intent, FX_DWORD dwSrcFormat) |
| { |
| return IccLib_CreateTransform(pProfileData, dwProfileSize, nComponents, NULL, 0, 3, intent, dwSrcFormat); |
| } |
| @@ -192,7 +215,7 @@ void IccLib_Translate(void* pTransform, FX_DWORD nSrcComponents, FX_FLOAT* pSrcV |
| break; |
| } |
| } |
| -void IccLib_TranslateImage(void* pTransform, unsigned char* pDest, const unsigned char* pSrc, int pixels) |
| +void IccLib_TranslateImage(void* pTransform, unsigned char* pDest, const unsigned char* pSrc, FX_INT32 pixels) |
| { |
| cmsDoTransform(((CLcmsCmm*)pTransform)->m_hTransform, (void*)pSrc, pDest, pixels); |
| } |
| @@ -242,7 +265,7 @@ ICodec_IccModule::IccCS GetProfileCSFromHandle(FX_LPVOID pProfile) |
| return ICodec_IccModule::IccCS_Unknown; |
| } |
| } |
| -ICodec_IccModule::IccCS CCodec_IccModule::GetProfileCS(FX_LPCBYTE pProfileData, unsigned int dwProfileSize) |
| +ICodec_IccModule::IccCS CCodec_IccModule::GetProfileCS(FX_LPCBYTE pProfileData, FX_DWORD dwProfileSize) |
| { |
| ICodec_IccModule::IccCS cs; |
| cmsHPROFILE hProfile = cmsOpenProfileFromMem((void*)pProfileData, dwProfileSize); |
| @@ -517,12 +540,12 @@ CCodec_IccModule::~CCodec_IccModule() |
| } |
| } |
| } |
| -void* CCodec_IccModule::CreateTransform_sRGB(FX_LPCBYTE pProfileData, unsigned int dwProfileSize, int nComponents, int intent, FX_DWORD dwSrcFormat) |
| +void* CCodec_IccModule::CreateTransform_sRGB(FX_LPCBYTE pProfileData, FX_DWORD dwProfileSize, FX_INT32* nComponents, FX_INT32 intent, FX_DWORD dwSrcFormat) |
| { |
| return IccLib_CreateTransform_sRGB(pProfileData, dwProfileSize, nComponents, intent, dwSrcFormat); |
| } |
| -void* CCodec_IccModule::CreateTransform_CMYK(FX_LPCBYTE pSrcProfileData, unsigned int dwSrcProfileSize, int nSrcComponents, |
| - FX_LPCBYTE pDstProfileData, unsigned int dwDstProfileSize, int intent, |
| +void* CCodec_IccModule::CreateTransform_CMYK(FX_LPCBYTE pSrcProfileData, FX_DWORD dwSrcProfileSize, FX_INT32* nSrcComponents, |
| + FX_LPCBYTE pDstProfileData, FX_DWORD dwDstProfileSize, FX_INT32 intent, |
| FX_DWORD dwSrcFormat , FX_DWORD dwDstFormat) |
| { |
| return IccLib_CreateTransform(pSrcProfileData, dwSrcProfileSize, nSrcComponents, |
| @@ -536,7 +559,7 @@ void CCodec_IccModule::Translate(void* pTransform, FX_FLOAT* pSrcValues, FX_FLOA |
| { |
| IccLib_Translate(pTransform, m_nComponents, pSrcValues, pDestValues); |
| } |
| -void CCodec_IccModule::TranslateScanline(void* pTransform, FX_LPBYTE pDest, FX_LPCBYTE pSrc, int pixels) |
| +void CCodec_IccModule::TranslateScanline(void* pTransform, FX_LPBYTE pDest, FX_LPCBYTE pSrc, FX_INT32 pixels) |
| { |
| IccLib_TranslateImage(pTransform, pDest, pSrc, pixels); |
| } |