summaryrefslogtreecommitdiff
path: root/testbed
diff options
context:
space:
mode:
authorMarti Maria <info@littlecms.com>2010-03-01 15:45:16 +0100
committerMarti Maria <info@littlecms.com>2010-03-01 15:45:16 +0100
commit0433fc39d1d41cdc71d3cf7d867b31da8393b1ce (patch)
tree861b65178906a454192c40242b0a9951bf4f3653 /testbed
parent48bf1bf1ee6ee647bd46e8d4909334623a755bc1 (diff)
downloadlcms2-0433fc39d1d41cdc71d3cf7d867b31da8393b1ce.tar.gz
beta2 merge
Diffstat (limited to 'testbed')
-rw-r--r--[-rwxr-xr-x]testbed/Makefile.am0
-rw-r--r--[-rwxr-xr-x]testbed/testcms2.c1863
2 files changed, 1010 insertions, 853 deletions
diff --git a/testbed/Makefile.am b/testbed/Makefile.am
index 5fcbd38..5fcbd38 100755..100644
--- a/testbed/Makefile.am
+++ b/testbed/Makefile.am
diff --git a/testbed/testcms2.c b/testbed/testcms2.c
index 6176d8e..490cc9b 100755..100644
--- a/testbed/testcms2.c
+++ b/testbed/testcms2.c
@@ -37,7 +37,7 @@
#endif
// A single check. Returns 1 if success, 0 if failed
-typedef int (*TestFn)(void);
+typedef cmsInt32Number (*TestFn)(void);
// A parametric Tone curve test function
typedef cmsFloat32Number (* dblfnptr)(cmsFloat32Number x, const cmsFloat64Number Params[]);
@@ -47,9 +47,9 @@ typedef cmsFloat32Number (* dblfnptr)(cmsFloat32Number x, const cmsFloat64Number
static char ReasonToFailBuffer[TEXT_ERROR_BUFFER_SIZE];
static char SubTestBuffer[TEXT_ERROR_BUFFER_SIZE];
-static int TotalTests = 0, TotalFail = 0;
+static cmsInt32Number TotalTests = 0, TotalFail = 0;
static cmsBool TrappedError;
-static int SimultaneousErrors;
+static cmsInt32Number SimultaneousErrors;
#define cmsmin(a, b) (((a) < (b)) ? (a) : (b))
@@ -58,9 +58,9 @@ static int SimultaneousErrors;
static
void Die(const char* Reason)
{
- printf("\n\nArrrgggg!!: %s!\n\n", Reason);
- fflush(stdout);
- exit(1);
+ printf("\n\nArrrgggg!!: %s!\n\n", Reason);
+ fflush(stdout);
+ exit(1);
}
// Memory management replacement -----------------------------------------------------------------------------
@@ -87,7 +87,7 @@ typedef struct {
static
cmsContext DbgThread(void)
{
- static int n = 1;
+ static cmsUInt32Number n = 1;
return (cmsContext) n++;
}
@@ -233,7 +233,7 @@ static
void Check(const char* Title, TestFn Fn)
{
printf("Checking %s ...", Title);
- fflush(stdout);
+ fflush(stdout);
ReasonToFailBuffer[0] = 0;
SubTestBuffer[0] = 0;
@@ -261,8 +261,8 @@ void Check(const char* Title, TestFn Fn)
printf("\tMore than one (%d) errors were reported\n", SimultaneousErrors);
TotalFail++;
- }
- fflush(stdout);
+ }
+ fflush(stdout);
}
// Dump a tone curve, for easy diagnostic
@@ -321,38 +321,38 @@ cmsHPROFILE Create_AboveRGB(void)
static
cmsHPROFILE Create_Gray22(void)
{
- cmsHPROFILE hProfile;
- cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 2.2);
+ cmsHPROFILE hProfile;
+ cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 2.2);
if (Curve == NULL) return NULL;
hProfile = cmsCreateGrayProfileTHR(DbgThread(), cmsD50_xyY(), Curve);
cmsFreeToneCurve(Curve);
- return hProfile;
+ return hProfile;
}
static
cmsHPROFILE Create_GrayLab(void)
{
- cmsHPROFILE hProfile;
- cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 1.0);
+ cmsHPROFILE hProfile;
+ cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 1.0);
if (Curve == NULL) return NULL;
hProfile = cmsCreateGrayProfileTHR(DbgThread(), cmsD50_xyY(), Curve);
cmsFreeToneCurve(Curve);
- cmsSetPCS(hProfile, cmsSigLabData);
- return hProfile;
+ cmsSetPCS(hProfile, cmsSigLabData);
+ return hProfile;
}
// A CMYK devicelink that adds gamma 3.0 to each channel
static
cmsHPROFILE Create_CMYK_DeviceLink(void)
{
- cmsHPROFILE hProfile;
- cmsToneCurve* Tab[4];
- cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0);
+ cmsHPROFILE hProfile;
+ cmsToneCurve* Tab[4];
+ cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0);
if (Curve == NULL) return NULL;
Tab[0] = Curve;
@@ -365,7 +365,7 @@ cmsHPROFILE Create_CMYK_DeviceLink(void)
cmsFreeToneCurve(Curve);
- return hProfile;
+ return hProfile;
}
@@ -373,9 +373,9 @@ cmsHPROFILE Create_CMYK_DeviceLink(void)
// DONT USE THIS PROFILE FOR ANYTHING, IT IS USELESS BUT FOR TESTING PURPOSES.
typedef struct {
- cmsHTRANSFORM hLab2sRGB;
- cmsHTRANSFORM sRGB2Lab;
- cmsHTRANSFORM hIlimit;
+ cmsHTRANSFORM hLab2sRGB;
+ cmsHTRANSFORM sRGB2Lab;
+ cmsHTRANSFORM hIlimit;
} FakeCMYKParams;
@@ -389,40 +389,40 @@ cmsFloat64Number Clip(cmsFloat64Number v)
}
static
-int ForwardSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+cmsUInt32Number ForwardSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
{
- FakeCMYKParams* p = (FakeCMYKParams*) Cargo;
- cmsFloat64Number rgb[3], cmyk[4];
- cmsFloat64Number c, m, y, k;
-
- cmsDoTransform(p ->hLab2sRGB, In, rgb, 1);
-
- c = 1 - rgb[0];
+ FakeCMYKParams* p = (FakeCMYKParams*) Cargo;
+ cmsFloat64Number rgb[3], cmyk[4];
+ cmsFloat64Number c, m, y, k;
+
+ cmsDoTransform(p ->hLab2sRGB, In, rgb, 1);
+
+ c = 1 - rgb[0];
m = 1 - rgb[1];
y = 1 - rgb[2];
k = (c < m ? cmsmin(c, y) : cmsmin(m, y));
- // NONSENSE WARNING!: I'm doing this just because this is a test
- // profile that may have ink limit up to 400%. There is no UCR here
- // so the profile is basically useless for anything but testing.
+ // NONSENSE WARNING!: I'm doing this just because this is a test
+ // profile that may have ink limit up to 400%. There is no UCR here
+ // so the profile is basically useless for anything but testing.
cmyk[0] = c;
cmyk[1] = m;
cmyk[2] = y;
cmyk[3] = k;
- cmsDoTransform(p ->hIlimit, cmyk, Out, 1);
+ cmsDoTransform(p ->hIlimit, cmyk, Out, 1);
- return 1;
+ return 1;
}
static
-int ReverseSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
+cmsUInt32Number ReverseSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo)
{
- FakeCMYKParams* p = (FakeCMYKParams*) Cargo;
- cmsFloat64Number c, m, y, k, rgb[3];
+ FakeCMYKParams* p = (FakeCMYKParams*) Cargo;
+ cmsFloat64Number c, m, y, k, rgb[3];
c = In[0] / 65535.0;
m = In[1] / 65535.0;
@@ -447,107 +447,107 @@ int ReverseSampler(register const cmsUInt16Number In[], register cmsUInt16Number
rgb[2] = Clip((1 - y) * (1 - k));
}
- cmsDoTransform(p ->sRGB2Lab, rgb, Out, 1);
- return 1;
-}
-
-
-
-static
-cmsHPROFILE* CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB)
-{
- cmsHPROFILE hICC;
- cmsPipeline* AToB0, *BToA0;
- cmsStage* CLUT;
- cmsContext ContextID;
- FakeCMYKParams p;
- cmsHPROFILE hLab, hsRGB, hLimit;
- cmsUInt16Number cmykfrm;
-
-
- if (lUseAboveRGB)
- hsRGB = Create_AboveRGB();
- else
- hsRGB = cmsCreate_sRGBProfile();
-
- hLab = cmsCreateLab4Profile(NULL);
- hLimit = cmsCreateInkLimitingDeviceLink(cmsSigCmykData, InkLimit);
-
- cmykfrm = BYTES_SH(0)|CHANNELS_SH(4);
- p.hLab2sRGB = cmsCreateTransform(hLab, TYPE_Lab_16, hsRGB, TYPE_RGB_DBL, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE);
- p.sRGB2Lab = cmsCreateTransform(hsRGB, TYPE_RGB_DBL, hLab, TYPE_Lab_16, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE);
- p.hIlimit = cmsCreateTransform(hLimit, cmykfrm, NULL, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE);
-
- cmsCloseProfile(hLab); cmsCloseProfile(hsRGB); cmsCloseProfile(hLimit);
-
- ContextID = DbgThread();
- hICC = cmsCreateProfilePlaceholder(ContextID);
- if (!hICC) return NULL;
-
- cmsSetProfileVersion(hICC, 4.2);
-
- cmsSetDeviceClass(hICC, cmsSigOutputClass);
- cmsSetColorSpace(hICC, cmsSigCmykData);
- cmsSetPCS(hICC, cmsSigLabData);
+ cmsDoTransform(p ->sRGB2Lab, rgb, Out, 1);
+ return 1;
+}
+
+
+
+static
+cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB)
+{
+ cmsHPROFILE hICC;
+ cmsPipeline* AToB0, *BToA0;
+ cmsStage* CLUT;
+ cmsContext ContextID;
+ FakeCMYKParams p;
+ cmsHPROFILE hLab, hsRGB, hLimit;
+ cmsUInt16Number cmykfrm;
+
+
+ if (lUseAboveRGB)
+ hsRGB = Create_AboveRGB();
+ else
+ hsRGB = cmsCreate_sRGBProfile();
+
+ hLab = cmsCreateLab4Profile(NULL);
+ hLimit = cmsCreateInkLimitingDeviceLink(cmsSigCmykData, InkLimit);
+
+ cmykfrm = BYTES_SH(0)|CHANNELS_SH(4);
+ p.hLab2sRGB = cmsCreateTransform(hLab, TYPE_Lab_16, hsRGB, TYPE_RGB_DBL, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE);
+ p.sRGB2Lab = cmsCreateTransform(hsRGB, TYPE_RGB_DBL, hLab, TYPE_Lab_16, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE);
+ p.hIlimit = cmsCreateTransform(hLimit, cmykfrm, NULL, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE);
+
+ cmsCloseProfile(hLab); cmsCloseProfile(hsRGB); cmsCloseProfile(hLimit);
+
+ ContextID = DbgThread();
+ hICC = cmsCreateProfilePlaceholder(ContextID);
+ if (!hICC) return NULL;
+
+ cmsSetProfileVersion(hICC, 4.2);
+
+ cmsSetDeviceClass(hICC, cmsSigOutputClass);
+ cmsSetColorSpace(hICC, cmsSigCmykData);
+ cmsSetPCS(hICC, cmsSigLabData);
BToA0 = cmsPipelineAlloc(ContextID, 3, 4);
- if (BToA0 == NULL) return 0;
- CLUT = cmsStageAllocCLut16bit(ContextID, 17, 3, 4, NULL);
- if (CLUT == NULL) return 0;
- if (!cmsStageSampleCLut16bit(CLUT, ForwardSampler, &p, 0)) return 0;
-
- cmsPipelineInsertStage(BToA0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3));
- cmsPipelineInsertStage(BToA0, cmsAT_END, CLUT);
- cmsPipelineInsertStage(BToA0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 4));
-
+ if (BToA0 == NULL) return 0;
+ CLUT = cmsStageAllocCLut16bit(ContextID, 17, 3, 4, NULL);
+ if (CLUT == NULL) return 0;
+ if (!cmsStageSampleCLut16bit(CLUT, ForwardSampler, &p, 0)) return 0;
+
+ cmsPipelineInsertStage(BToA0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3));
+ cmsPipelineInsertStage(BToA0, cmsAT_END, CLUT);
+ cmsPipelineInsertStage(BToA0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 4));
+
if (!cmsWriteTag(hICC, cmsSigBToA0Tag, (void*) BToA0)) return 0;
- cmsPipelineFree(BToA0);
-
- AToB0 = cmsPipelineAlloc(ContextID, 4, 3);
- if (AToB0 == NULL) return 0;
- CLUT = cmsStageAllocCLut16bit(ContextID, 17, 4, 3, NULL);
- if (CLUT == NULL) return 0;
- if (!cmsStageSampleCLut16bit(CLUT, ReverseSampler, &p, 0)) return 0;
-
- cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 4));
- cmsPipelineInsertStage(AToB0, cmsAT_END, CLUT);
- cmsPipelineInsertStage(AToB0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 3));
-
+ cmsPipelineFree(BToA0);
+
+ AToB0 = cmsPipelineAlloc(ContextID, 4, 3);
+ if (AToB0 == NULL) return 0;
+ CLUT = cmsStageAllocCLut16bit(ContextID, 17, 4, 3, NULL);
+ if (CLUT == NULL) return 0;
+ if (!cmsStageSampleCLut16bit(CLUT, ReverseSampler, &p, 0)) return 0;
+
+ cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 4));
+ cmsPipelineInsertStage(AToB0, cmsAT_END, CLUT);
+ cmsPipelineInsertStage(AToB0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 3));
+
if (!cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) AToB0)) return 0;
- cmsPipelineFree(AToB0);
+ cmsPipelineFree(AToB0);
- cmsDeleteTransform(p.hLab2sRGB);
- cmsDeleteTransform(p.sRGB2Lab);
- cmsDeleteTransform(p.hIlimit);
+ cmsDeleteTransform(p.hLab2sRGB);
+ cmsDeleteTransform(p.sRGB2Lab);
+ cmsDeleteTransform(p.hIlimit);
- cmsLinkTag(hICC, cmsSigAToB1Tag, cmsSigAToB0Tag);
+ cmsLinkTag(hICC, cmsSigAToB1Tag, cmsSigAToB0Tag);
cmsLinkTag(hICC, cmsSigAToB2Tag, cmsSigAToB0Tag);
- cmsLinkTag(hICC, cmsSigBToA1Tag, cmsSigBToA0Tag);
+ cmsLinkTag(hICC, cmsSigBToA1Tag, cmsSigBToA0Tag);
cmsLinkTag(hICC, cmsSigBToA2Tag, cmsSigBToA0Tag);
- return hICC;
+ return hICC;
}
// Does create several profiles for latter use------------------------------------------------------------------------------------------------
static
-int OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* FileName)
+cmsInt32Number OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* FileName)
{
- SubTest(SubTestTxt);
- if (h == NULL) return 0;
+ SubTest(SubTestTxt);
+ if (h == NULL) return 0;
- if (!cmsSaveProfileToFile(h, FileName)) return 0;
- cmsCloseProfile(h);
+ if (!cmsSaveProfileToFile(h, FileName)) return 0;
+ cmsCloseProfile(h);
- h = cmsOpenProfileFromFile(FileName, "r");
- if (h == NULL) return 0;
+ h = cmsOpenProfileFromFile(FileName, "r");
+ if (h == NULL) return 0;
- // Do some teste....
+ // Do some teste....
- cmsCloseProfile(h);
+ cmsCloseProfile(h);
- return 1;
+ return 1;
}
@@ -555,7 +555,7 @@ int OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* FileName)
// This test checks the ability of lcms2 to save its built-ins as valid profiles.
// It does not check the functionality of such profiles
static
-int CreateTestProfiles(void)
+cmsInt32Number CreateTestProfiles(void)
{
cmsHPROFILE h;
@@ -569,12 +569,17 @@ int CreateTestProfiles(void)
// ----
- h = Create_Gray22();
+ h = Create_Gray22();
if (!OneVirtual(h, "Gray profile", "graylcms2.icc")) return 0;
// ----
- h = Create_CMYK_DeviceLink();
+ h = Create_GrayLab();
+ if (!OneVirtual(h, "Gray Lab profile", "glablcms2.icc")) return 0;
+
+ // ----
+
+ h = Create_CMYK_DeviceLink();
if (!OneVirtual(h, "Linearization profile", "linlcms2.icc")) return 0;
// -------
@@ -607,10 +612,10 @@ int CreateTestProfiles(void)
h = cmsCreateBCHSWabstractProfileTHR(DbgThread(), 17, 0, 0, 0, 0, 5000, 6000);
if (!OneVirtual(h, "BCHS profile", "bchslcms2.icc")) return 0;
- // ---
+ // ---
- h = CreateFakeCMYK(300, FALSE);
- if (!OneVirtual(h, "Fake CMYK profile", "lcms2cmyk.icc")) return 0;
+ h = CreateFakeCMYK(300, FALSE);
+ if (!OneVirtual(h, "Fake CMYK profile", "lcms2cmyk.icc")) return 0;
return 1;
}
@@ -618,7 +623,7 @@ int CreateTestProfiles(void)
static
void RemoveTestProfiles(void)
{
- remove("sRGBlcms2.icc");
+ remove("sRGBlcms2.icc");
remove("aRGBlcms2.icc");
remove("graylcms2.icc");
remove("linlcms2.icc");
@@ -628,14 +633,15 @@ void RemoveTestProfiles(void)
remove("xyzlcms2.icc");
remove("nullcms2.icc");
remove("bchslcms2.icc");
- remove("lcms2cmyk.icc");
+ remove("lcms2cmyk.icc");
+ remove("glablcms2.icc");
}
// -------------------------------------------------------------------------------------------------
// Check the size of basic types. If this test fails, nothing is going to work anyway
static
-int CheckBaseTypes(void)
+cmsInt32Number CheckBaseTypes(void)
{
if (sizeof(cmsUInt8Number) != 1) return 0;
if (sizeof(cmsInt8Number) != 1) return 0;
@@ -647,10 +653,10 @@ int CheckBaseTypes(void)
if (sizeof(cmsInt64Number) != 8) return 0;
if (sizeof(cmsFloat32Number) != 4) return 0;
if (sizeof(cmsFloat64Number) != 8) return 0;
- if (sizeof(cmsSignature) != 4) return 0;
- if (sizeof(cmsU8Fixed8Number) != 2) return 0;
- if (sizeof(cmsS15Fixed16Number) != 4) return 0;
- if (sizeof(cmsU16Fixed16Number) != 4) return 0;
+ if (sizeof(cmsSignature) != 4) return 0;
+ if (sizeof(cmsU8Fixed8Number) != 2) return 0;
+ if (sizeof(cmsS15Fixed16Number) != 4) return 0;
+ if (sizeof(cmsU16Fixed16Number) != 4) return 0;
return 1;
}
@@ -660,9 +666,9 @@ int CheckBaseTypes(void)
// Are we little or big endian? From Harbison&Steele.
static
-int CheckEndianess(void)
+cmsInt32Number CheckEndianess(void)
{
- int BigEndian, IsOk;
+ cmsInt32Number BigEndian, IsOk;
union {
long l;
char c[sizeof (long)];
@@ -688,7 +694,7 @@ int CheckEndianess(void)
// Check quick floor
static
-int CheckQuickFloor(void)
+cmsInt32Number CheckQuickFloor(void)
{
if ((_cmsQuickFloor(1.234) != 1) ||
(_cmsQuickFloor(32767.234) != 32767) ||
@@ -706,7 +712,7 @@ int CheckQuickFloor(void)
// Quick floor restricted to word
static
-int CheckQuickFloorWord(void)
+cmsInt32Number CheckQuickFloorWord(void)
{
cmsUInt32Number i;
@@ -782,7 +788,7 @@ cmsBool IsGoodWord(const char *title, cmsUInt16Number in, cmsUInt16Number out)
// Fixed point ----------------------------------------------------------------------------------------------
static
-int TestSingleFixed15_16(cmsFloat64Number d)
+cmsInt32Number TestSingleFixed15_16(cmsFloat64Number d)
{
cmsS15Fixed16Number f = _cmsDoubleTo15Fixed16(d);
cmsFloat64Number RoundTrip = _cms15Fixed16toDouble(f);
@@ -792,7 +798,7 @@ int TestSingleFixed15_16(cmsFloat64Number d)
}
static
-int CheckFixedPoint15_16(void)
+cmsInt32Number CheckFixedPoint15_16(void)
{
if (!TestSingleFixed15_16(1.0)) return 0;
if (!TestSingleFixed15_16(2.0)) return 0;
@@ -809,7 +815,7 @@ int CheckFixedPoint15_16(void)
}
static
-int TestSingleFixed8_8(cmsFloat64Number d)
+cmsInt32Number TestSingleFixed8_8(cmsFloat64Number d)
{
cmsS15Fixed16Number f = _cmsDoubleTo8Fixed8(d);
cmsFloat64Number RoundTrip = _cms8Fixed8toDouble((cmsUInt16Number) f);
@@ -819,7 +825,7 @@ int TestSingleFixed8_8(cmsFloat64Number d)
}
static
-int CheckFixedPoint8_8(void)
+cmsInt32Number CheckFixedPoint8_8(void)
{
if (!TestSingleFixed8_8(1.0)) return 0;
if (!TestSingleFixed8_8(2.0)) return 0;
@@ -840,9 +846,9 @@ int CheckFixedPoint8_8(void)
// I test tables of 2, 4, 6, and 18 points, that will be exact.
static
-void BuildTable(int n, cmsUInt16Number Tab[], cmsBool Descending)
+void BuildTable(cmsInt32Number n, cmsUInt16Number Tab[], cmsBool Descending)
{
- int i;
+ cmsInt32Number i;
for (i=0; i < n; i++) {
cmsFloat64Number v = (cmsFloat64Number) ((cmsFloat64Number) 65535.0 * i ) / (n-1);
@@ -858,7 +864,7 @@ void BuildTable(int n, cmsUInt16Number Tab[], cmsBool Descending)
// max_err = max allowed error
static
-int Check1D(int nNodesToCheck, cmsBool Down, int max_err)
+cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Number max_err)
{
cmsUInt32Number i;
cmsUInt16Number in, out;
@@ -898,65 +904,65 @@ int Check1D(int nNodesToCheck, cmsBool Down, int max_err)
static
-int Check1DLERP2(void)
+cmsInt32Number Check1DLERP2(void)
{
return Check1D(2, FALSE, 0);
}
static
-int Check1DLERP3(void)
+cmsInt32Number Check1DLERP3(void)
{
return Check1D(3, FALSE, 1);
}
static
-int Check1DLERP4(void)
+cmsInt32Number Check1DLERP4(void)
{
return Check1D(4, FALSE, 0);
}
static
-int Check1DLERP6(void)
+cmsInt32Number Check1DLERP6(void)
{
return Check1D(6, FALSE, 0);
}
static
-int Check1DLERP18(void)
+cmsInt32Number Check1DLERP18(void)
{
return Check1D(18, FALSE, 0);
}
static
-int Check1DLERP2Down(void)
+cmsInt32Number Check1DLERP2Down(void)
{
return Check1D(2, TRUE, 0);
}
static
-int Check1DLERP3Down(void)
+cmsInt32Number Check1DLERP3Down(void)
{
return Check1D(3, TRUE, 1);
}
static
-int Check1DLERP6Down(void)
+cmsInt32Number Check1DLERP6Down(void)
{
return Check1D(6, TRUE, 0);
}
static
-int Check1DLERP18Down(void)
+cmsInt32Number Check1DLERP18Down(void)
{
return Check1D(18, TRUE, 0);
}
static
-int ExhaustiveCheck1DLERP(void)
+cmsInt32Number ExhaustiveCheck1DLERP(void)
{
cmsUInt32Number j;
@@ -973,7 +979,7 @@ int ExhaustiveCheck1DLERP(void)
}
static
-int ExhaustiveCheck1DLERPDown(void)
+cmsInt32Number ExhaustiveCheck1DLERPDown(void)
{
cmsUInt32Number j;
@@ -995,10 +1001,10 @@ int ExhaustiveCheck1DLERPDown(void)
// 3D interpolation -------------------------------------------------------------------------------------------------
static
-int Check3DinterpolationFloatTetrahedral(void)
+cmsInt32Number Check3DinterpolationFloatTetrahedral(void)
{
cmsInterpParams* p;
- int i;
+ cmsInt32Number i;
cmsFloat32Number In[3], Out[3];
cmsFloat32Number FloatTable[] = { //R G B
@@ -1041,10 +1047,10 @@ Error:
}
static
-int Check3DinterpolationFloatTrilinear(void)
+cmsInt32Number Check3DinterpolationFloatTrilinear(void)
{
cmsInterpParams* p;
- int i;
+ cmsInt32Number i;
cmsFloat32Number In[3], Out[3];
cmsFloat32Number FloatTable[] = { //R G B
@@ -1087,10 +1093,10 @@ Error:
}
static
-int Check3DinterpolationTetrahedral16(void)
+cmsInt32Number Check3DinterpolationTetrahedral16(void)
{
cmsInterpParams* p;
- int i;
+ cmsInt32Number i;
cmsUInt16Number In[3], Out[3];
cmsUInt16Number Table[] = {
@@ -1131,10 +1137,10 @@ Error:
}
static
-int Check3DinterpolationTrilinear16(void)
+cmsInt32Number Check3DinterpolationTrilinear16(void)
{
cmsInterpParams* p;
- int i;
+ cmsInt32Number i;
cmsUInt16Number In[3], Out[3];
cmsUInt16Number Table[] = {
@@ -1176,10 +1182,10 @@ Error:
static
-int ExaustiveCheck3DinterpolationFloatTetrahedral(void)
+cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void)
{
cmsInterpParams* p;
- int r, g, b;
+ cmsInt32Number r, g, b;
cmsFloat32Number In[3], Out[3];
cmsFloat32Number FloatTable[] = { //R G B
@@ -1227,10 +1233,10 @@ Error:
}
static
-int ExaustiveCheck3DinterpolationFloatTrilinear(void)
+cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void)
{
cmsInterpParams* p;
- int r, g, b;
+ cmsInt32Number r, g, b;
cmsFloat32Number In[3], Out[3];
cmsFloat32Number FloatTable[] = { //R G B
@@ -1251,22 +1257,22 @@ int ExaustiveCheck3DinterpolationFloatTrilinear(void)
p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR);
MaxErr = 0.0;
- for (r=0; r < 0xff; r++)
- for (g=0; g < 0xff; g++)
- for (b=0; b < 0xff; b++)
- {
-
- In[0] = (cmsFloat32Number) r / 255.0F;
- In[1] = (cmsFloat32Number) g / 255.0F;
- In[2] = (cmsFloat32Number) b / 255.0F;
-
-
- p ->Interpolation.LerpFloat(In, Out, p);
-
- if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error;
- if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error;
- if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error;
- }
+ for (r=0; r < 0xff; r++)
+ for (g=0; g < 0xff; g++)
+ for (b=0; b < 0xff; b++)
+ {
+
+ In[0] = (cmsFloat32Number) r / 255.0F;
+ In[1] = (cmsFloat32Number) g / 255.0F;
+ In[2] = (cmsFloat32Number) b / 255.0F;
+
+
+ p ->Interpolation.LerpFloat(In, Out, p);
+
+ if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error;
+ if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error;
+ if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error;
+ }
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr);
_cmsFreeInterpParams(p);
@@ -1279,10 +1285,10 @@ Error:
}
static
-int ExhaustiveCheck3DinterpolationTetrahedral16(void)
+cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void)
{
cmsInterpParams* p;
- int r, g, b;
+ cmsInt32Number r, g, b;
cmsUInt16Number In[3], Out[3];
cmsUInt16Number Table[] = {
@@ -1326,10 +1332,10 @@ Error:
}
static
-int ExhaustiveCheck3DinterpolationTrilinear16(void)
+cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void)
{
cmsInterpParams* p;
- int r, g, b;
+ cmsInt32Number r, g, b;
cmsUInt16Number In[3], Out[3];
cmsUInt16Number Table[] = {
@@ -1375,13 +1381,13 @@ Error:
// Check reverse interpolation on LUTS. This is right now exclusively used by K preservation algorithm
static
-int CheckReverseInterpolation3x3(void)
+cmsInt32Number CheckReverseInterpolation3x3(void)
{
cmsPipeline* Lut;
cmsStage* clut;
cmsFloat32Number Target[3], Result[3], Hint[3];
cmsFloat32Number err, max;
- int i;
+ cmsInt32Number i;
cmsUInt16Number Table[] = {
0, 0, 0, // 0 0 0
@@ -1409,65 +1415,65 @@ int CheckReverseInterpolation3x3(void)
cmsPipelineEvalReverseFloat(Target, Result, NULL, Lut);
if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0){
- Fail("Reverse interpolation didn't find zero");
- return 0;
+ Fail("Reverse interpolation didn't find zero");
+ return 0;
}
// Transverse identity
max = 0;
for (i=0; i <= 100; i++) {
- cmsFloat32Number in = i / 100.0F;
+ cmsFloat32Number in = i / 100.0F;
- Target[0] = in; Target[1] = 0; Target[2] = 0;
- cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut);
+ Target[0] = in; Target[1] = 0; Target[2] = 0;
+ cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut);
- err = fabsf(in - Result[0]);
- if (err > max) max = err;
+ err = fabsf(in - Result[0]);
+ if (err > max) max = err;
- memcpy(Hint, Result, sizeof(Hint));
+ memcpy(Hint, Result, sizeof(Hint));
}
cmsPipelineFree(Lut);
- return (max <= FLOAT_PRECISSION);
+ return (max <= FLOAT_PRECISSION);
}
static
-int CheckReverseInterpolation4x3(void)
+cmsInt32Number CheckReverseInterpolation4x3(void)
{
cmsPipeline* Lut;
cmsStage* clut;
cmsFloat32Number Target[4], Result[4], Hint[4];
cmsFloat32Number err, max;
- int i;
+ cmsInt32Number i;
// 4 -> 3, output gets 3 first channels copied
cmsUInt16Number Table[] = {
0, 0, 0, // 0 0 0 0 = ( 0, 0, 0)
0, 0, 0, // 0 0 0 1 = ( 0, 0, 0)
-
+
0, 0, 0xffff, // 0 0 1 0 = ( 0, 0, 1)
- 0, 0, 0xffff, // 0 0 1 1 = ( 0, 0, 1)
-
+ 0, 0, 0xffff, // 0 0 1 1 = ( 0, 0, 1)
+
0, 0xffff, 0, // 0 1 0 0 = ( 0, 1, 0)
0, 0xffff, 0, // 0 1 0 1 = ( 0, 1, 0)
-
+
0, 0xffff, 0xffff, // 0 1 1 0 = ( 0, 1, 1)
0, 0xffff, 0xffff, // 0 1 1 1 = ( 0, 1, 1)
0xffff, 0, 0, // 1 0 0 0 = ( 1, 0, 0)
0xffff, 0, 0, // 1 0 0 1 = ( 1, 0, 0)
-
+
0xffff, 0, 0xffff, // 1 0 1 0 = ( 1, 0, 1)
- 0xffff, 0, 0xffff, // 1 0 1 1 = ( 1, 0, 1)
-
+ 0xffff, 0, 0xffff, // 1 0 1 1 = ( 1, 0, 1)
+
0xffff, 0xffff, 0, // 1 1 0 0 = ( 1, 1, 0)
- 0xffff, 0xffff, 0, // 1 1 0 1 = ( 1, 1, 0)
-
+ 0xffff, 0xffff, 0, // 1 1 0 1 = ( 1, 1, 0)
+
0xffff, 0xffff, 0xffff, // 1 1 1 0 = ( 1, 1, 1)
- 0xffff, 0xffff, 0xffff, // 1 1 1 1 = ( 1, 1, 1)
+ 0xffff, 0xffff, 0xffff, // 1 1 1 1 = ( 1, 1, 1)
};
@@ -1480,16 +1486,16 @@ int CheckReverseInterpolation4x3(void)
SubTest("4->3 feasibility");
for (i=0; i <= 100; i++) {
- Target[0] = i / 100.0F;
- Target[1] = Target[0];
- Target[2] = 0;
- Target[3] = 12;
+ Target[0] = i / 100.0F;
+ Target[1] = Target[0];
+ Target[2] = 0;
+ Target[3] = 12;
- cmsPipelineEvalFloat(Target, Result, Lut);
+ cmsPipelineEvalFloat(Target, Result, Lut);
- if (!IsGoodFixed15_16("0", Target[0], Result[0])) return 0;
+ if (!IsGoodFixed15_16("0", Target[0], Result[0])) return 0;
if (!IsGoodFixed15_16("1", Target[1], Result[1])) return 0;
- if (!IsGoodFixed15_16("2", Target[2], Result[2])) return 0;
+ if (!IsGoodFixed15_16("2", Target[2], Result[2])) return 0;
}
SubTest("4->3 zero");
@@ -1507,27 +1513,27 @@ int CheckReverseInterpolation4x3(void)
if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0 || Result[3] != 0){
- Fail("Reverse interpolation didn't find zero");
- return 0;
+ Fail("Reverse interpolation didn't find zero");
+ return 0;
}
SubTest("4->3 find CMY");
max = 0;
for (i=0; i <= 100; i++) {
- cmsFloat32Number in = i / 100.0F;
+ cmsFloat32Number in = i / 100.0F;
- Target[0] = in; Target[1] = 0; Target[2] = 0;
- cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut);
+ Target[0] = in; Target[1] = 0; Target[2] = 0;
+ cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut);
- err = fabsf(in - Result[0]);
- if (err > max) max = err;
+ err = fabsf(in - Result[0]);
+ if (err > max) max = err;
- memcpy(Hint, Result, sizeof(Hint));
+ memcpy(Hint, Result, sizeof(Hint));
}
cmsPipelineFree(Lut);
- return (max <= FLOAT_PRECISSION);
+ return (max <= FLOAT_PRECISSION);
}
@@ -1535,9 +1541,9 @@ int CheckReverseInterpolation4x3(void)
// Lab to LCh and back should be performed at 1E-12 accuracy at least
static
-int CheckLab2LCh(void)
+cmsInt32Number CheckLab2LCh(void)
{
- int l, a, b;
+ cmsInt32Number l, a, b;
cmsFloat64Number dist, Max = 0;
cmsCIELab Lab, Lab2;
cmsCIELCh LCh;
@@ -1566,9 +1572,9 @@ int CheckLab2LCh(void)
// Lab to LCh and back should be performed at 1E-12 accuracy at least
static
-int CheckLab2XYZ(void)
+cmsInt32Number CheckLab2XYZ(void)
{
- int l, a, b;
+ cmsInt32Number l, a, b;
cmsFloat64Number dist, Max = 0;
cmsCIELab Lab, Lab2;
cmsCIEXYZ XYZ;
@@ -1598,13 +1604,13 @@ int CheckLab2XYZ(void)
// Lab to xyY and back should be performed at 1E-12 accuracy at least
static
-int CheckLab2xyY(void)
+cmsInt32Number CheckLab2xyY(void)
{
- int l, a, b;
+ cmsInt32Number l, a, b;
cmsFloat64Number dist, Max = 0;
cmsCIELab Lab, Lab2;
cmsCIEXYZ XYZ;
- cmsCIExyY xyY;
+ cmsCIExyY xyY;
for (l=0; l <= 100; l += 10) {
@@ -1617,8 +1623,8 @@ int CheckLab2xyY(void)
Lab.b = b;
cmsLab2XYZ(NULL, &XYZ, &Lab);
- cmsXYZ2xyY(&xyY, &XYZ);
- cmsxyY2XYZ(&XYZ, &xyY);
+ cmsXYZ2xyY(&xyY, &XYZ);
+ cmsxyY2XYZ(&XYZ, &xyY);
cmsXYZ2Lab(NULL, &Lab2, &XYZ);
dist = cmsDeltaE(&Lab, &Lab2);
@@ -1633,9 +1639,9 @@ int CheckLab2xyY(void)
static
-int CheckLabV2encoding(void)
+cmsInt32Number CheckLabV2encoding(void)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsUInt16Number Inw[3], aw[3];
cmsCIELab Lab;
@@ -1661,9 +1667,9 @@ int CheckLabV2encoding(void)
}
static
-int CheckLabV4encoding(void)
+cmsInt32Number CheckLabV4encoding(void)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsUInt16Number Inw[3], aw[3];
cmsCIELab Lab;
@@ -1692,9 +1698,9 @@ int CheckLabV4encoding(void)
// BlackBody -----------------------------------------------------------------------------------------------------
static
-int CheckTemp2CHRM(void)
+cmsInt32Number CheckTemp2CHRM(void)
{
- int j;
+ cmsInt32Number j;
cmsFloat64Number d, v, Max = 0;
cmsCIExyY White;
@@ -1716,20 +1722,20 @@ int CheckTemp2CHRM(void)
// Tone curves -----------------------------------------------------------------------------------------------------
static
-int CheckGammaEstimation(cmsToneCurve* c, cmsFloat64Number g)
+cmsInt32Number CheckGammaEstimation(cmsToneCurve* c, cmsFloat64Number g)
{
- cmsFloat64Number est = cmsEstimateGamma(c, 0.001);
+ cmsFloat64Number est = cmsEstimateGamma(c, 0.001);
- SubTest("Gamma estimation");
- if (fabs(est - g) > 0.001) return 0;
- return 1;
+ SubTest("Gamma estimation");
+ if (fabs(est - g) > 0.001) return 0;
+ return 1;
}
static
-int CheckGammaCreation16(void)
+cmsInt32Number CheckGammaCreation16(void)
{
cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0);
- int i;
+ cmsInt32Number i;
cmsUInt16Number in, out;
for (i=0; i < 0xffff; i++) {
@@ -1743,7 +1749,7 @@ int CheckGammaCreation16(void)
}
}
- if (!CheckGammaEstimation(LinGamma, 1.0)) return 0;
+ if (!CheckGammaEstimation(LinGamma, 1.0)) return 0;
cmsFreeToneCurve(LinGamma);
return 1;
@@ -1751,10 +1757,10 @@ int CheckGammaCreation16(void)
}
static
-int CheckGammaCreationFlt(void)
+cmsInt32Number CheckGammaCreationFlt(void)
{
cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0);
- int i;
+ cmsInt32Number i;
cmsFloat32Number in, out;
for (i=0; i < 0xffff; i++) {
@@ -1768,7 +1774,7 @@ int CheckGammaCreationFlt(void)
}
}
- if (!CheckGammaEstimation(LinGamma, 1.0)) return 0;
+ if (!CheckGammaEstimation(LinGamma, 1.0)) return 0;
cmsFreeToneCurve(LinGamma);
return 1;
}
@@ -1776,10 +1782,10 @@ int CheckGammaCreationFlt(void)
// Curve curves using a single power function
// Error is given in 0..ffff counts
static
-int CheckGammaFloat(int nPoints, cmsFloat64Number g)
+cmsInt32Number CheckGammaFloat(cmsInt32Number nPoints, cmsFloat64Number g)
{
cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), g);
- int i;
+ cmsInt32Number i;
cmsFloat32Number in, out;
cmsFloat64Number val, Err;
@@ -1788,7 +1794,7 @@ int CheckGammaFloat(int nPoints, cmsFloat64Number g)
in = (cmsFloat32Number) (i / 65535.0);
out = cmsEvalToneCurveFloat(Curve, in);
- val = pow(in, g);
+ val = pow((cmsFloat64Number) in, g);
Err = fabs( val - out);
if (Err > MaxErr) MaxErr = Err;
@@ -1796,23 +1802,23 @@ int CheckGammaFloat(int nPoints, cmsFloat64Number g)
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0);
- if (!CheckGammaEstimation(Curve, g)) return 0;
+ if (!CheckGammaEstimation(Curve, g)) return 0;
cmsFreeToneCurve(Curve);
return 1;
}
-static int CheckGamma18(void)
+static cmsInt32Number CheckGamma18(void)
{
return CheckGammaFloat(256, 1.8);
}
-static int CheckGamma22(void)
+static cmsInt32Number CheckGamma22(void)
{
return CheckGammaFloat(256, 2.2);
}
-static int CheckGamma30(void)
+static cmsInt32Number CheckGamma30(void)
{
return CheckGammaFloat(256, 3.0);
}
@@ -1820,19 +1826,19 @@ static int CheckGamma30(void)
// Check table-based gamma functions
static
-int CheckGammaFloatTable(cmsFloat64Number g)
+cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g)
{
- cmsFloat32Number Values[1025];
+ cmsFloat32Number Values[1025];
cmsToneCurve* Curve;
- int i;
+ cmsInt32Number i;
cmsFloat32Number in, out;
cmsFloat64Number val, Err;
- for (i=0; i <= 1024; i++) {
+ for (i=0; i <= 1024; i++) {
in = (cmsFloat32Number) (i / 1024.0);
- Values[i] = powf(in, g);
- }
+ Values[i] = powf(in, (float) g);
+ }
Curve = cmsBuildTabulatedToneCurveFloat(DbgThread(), 1025, Values);
@@ -1849,43 +1855,43 @@ int CheckGammaFloatTable(cmsFloat64Number g)
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0);
- if (!CheckGammaEstimation(Curve, g)) return 0;
+ if (!CheckGammaEstimation(Curve, g)) return 0;
cmsFreeToneCurve(Curve);
return 1;
}
-static int CheckGamma18Table(void)
+static cmsInt32Number CheckGamma18Table(void)
{
return CheckGammaFloatTable(1.8);
}
-static int CheckGamma22Table(void)
+static cmsInt32Number CheckGamma22Table(void)
{
return CheckGammaFloatTable(2.2);
}
-static int CheckGamma30Table(void)
+static cmsInt32Number CheckGamma30Table(void)
{
return CheckGammaFloatTable(3.0);
}
// Create a curve from a table (which is a pure gamma function) and check it against the pow function.
static
-int CheckGammaWordTable(cmsFloat64Number g)
+cmsInt32Number CheckGammaWordTable(cmsFloat64Number g)
{
- cmsUInt16Number Values[1025];
+ cmsUInt16Number Values[1025];
cmsToneCurve* Curve;
- int i;
+ cmsInt32Number i;
cmsFloat32Number in, out;
cmsFloat64Number val, Err;
- for (i=0; i <= 1024; i++) {
+ for (i=0; i <= 1024; i++) {
in = (cmsFloat32Number) (i / 1024.0);
- Values[i] = (cmsUInt16Number) floor(powf(in, g) * 65535.0 + 0.5);
- }
+ Values[i] = (cmsUInt16Number) floor(powf(in, g) * 65535.0 + 0.5);
+ }
Curve = cmsBuildTabulatedToneCurve16(DbgThread(), 1025, Values);
@@ -1902,23 +1908,23 @@ int CheckGammaWordTable(cmsFloat64Number g)
if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0);
- if (!CheckGammaEstimation(Curve, g)) return 0;
+ if (!CheckGammaEstimation(Curve, g)) return 0;
cmsFreeToneCurve(Curve);
return 1;
}
-static int CheckGamma18TableWord(void)
+static cmsInt32Number CheckGamma18TableWord(void)
{
return CheckGammaWordTable(1.8);
}
-static int CheckGamma22TableWord(void)
+static cmsInt32Number CheckGamma22TableWord(void)
{
return CheckGammaWordTable(2.2);
}
-static int CheckGamma30TableWord(void)
+static cmsInt32Number CheckGamma30TableWord(void)
{
return CheckGammaWordTable(3.0);
}
@@ -1927,7 +1933,7 @@ static int CheckGamma30TableWord(void)
// Curve joining test. Joining two high-gamma of 3.0 curves should
// give something like linear
static
-int CheckJointCurves(void)
+cmsInt32Number CheckJointCurves(void)
{
cmsToneCurve *Forward, *Reverse, *Result;
cmsBool rc;
@@ -1951,14 +1957,14 @@ int CheckJointCurves(void)
// Create a gamma curve by cheating the table
static
-cmsToneCurve* GammaTableLinear(int nEntries, cmsBool Dir)
+cmsToneCurve* GammaTableLinear(cmsInt32Number nEntries, cmsBool Dir)
{
- int i;
+ cmsInt32Number i;
cmsToneCurve* g = cmsBuildTabulatedToneCurve16(DbgThread(), nEntries, NULL);
for (i=0; i < nEntries; i++) {
- int v = _cmsQuantizeVal(i, nEntries);
+ cmsInt32Number v = _cmsQuantizeVal(i, nEntries);
if (Dir)
g->Table16[i] = v;
@@ -1971,10 +1977,10 @@ cmsToneCurve* GammaTableLinear(int nEntries, cmsBool Dir)
static
-int CheckJointCurvesDescending(void)
+cmsInt32Number CheckJointCurvesDescending(void)
{
cmsToneCurve *Forward, *Reverse, *Result;
- int i, rc;
+ cmsInt32Number i, rc;
Forward = cmsBuildGamma(DbgThread(), 2.2);
@@ -1999,9 +2005,9 @@ int CheckJointCurvesDescending(void)
static
-int CheckFToneCurvePoint(cmsToneCurve* c, int Point, int Value)
+cmsInt32Number CheckFToneCurvePoint(cmsToneCurve* c, cmsInt32Number Point, cmsInt32Number Value)
{
- int Result;
+ cmsInt32Number Result;
Result = cmsEvalToneCurve16(c, Point);
@@ -2009,7 +2015,7 @@ int CheckFToneCurvePoint(cmsToneCurve* c, int Point, int Value)
}
static
-int CheckReverseDegenerated(void)
+cmsInt32Number CheckReverseDegenerated(void)
{
cmsToneCurve* p, *g;
cmsUInt16Number Tab[16];
@@ -2074,7 +2080,7 @@ cmsToneCurve* CombineGammaFloat(cmsToneCurve* g1, cmsToneCurve* g2)
{
cmsUInt16Number Tab[256];
cmsFloat32Number f;
- int i;
+ cmsInt32Number i;
for (i=0; i < 256; i++) {
@@ -2093,7 +2099,7 @@ cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2)
{
cmsUInt16Number Tab[256];
- int i;
+ cmsInt32Number i;
for (i=0; i < 256; i++) {
@@ -2107,7 +2113,7 @@ cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2)
}
static
-int CheckJointFloatCurves_sRGB(void)
+cmsInt32Number CheckJointFloatCurves_sRGB(void)
{
cmsToneCurve *Forward, *Reverse, *Result;
cmsBool rc;
@@ -2124,7 +2130,7 @@ int CheckJointFloatCurves_sRGB(void)
}
static
-int CheckJoint16Curves_sRGB(void)
+cmsInt32Number CheckJoint16Curves_sRGB(void)
{
cmsToneCurve *Forward, *Reverse, *Result;
cmsBool rc;
@@ -2143,11 +2149,11 @@ int CheckJoint16Curves_sRGB(void)
// sigmoidal curve f(x) = (1-x^g) ^(1/g)
static
-int CheckJointCurvesSShaped(void)
+cmsInt32Number CheckJointCurvesSShaped(void)
{
- cmsFloat64Number p = 3.2;
+ cmsFloat64Number p = 3.2;
cmsToneCurve *Forward, *Reverse, *Result;
- int rc;
+ cmsInt32Number rc;
Forward = cmsBuildParametricToneCurve(DbgThread(), 108, &p);
Reverse = cmsReverseToneCurve(Forward);
@@ -2301,9 +2307,9 @@ cmsFloat32Number sigmoidal(cmsFloat32Number x, const cmsFloat64Number Params[])
static
-cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, int Type, const cmsFloat64Number Params[])
+cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type, const cmsFloat64Number Params[])
{
- int i;
+ cmsInt32Number i;
cmsToneCurve* tc;
cmsToneCurve* tc_1;
char InverseText[256];
@@ -2342,7 +2348,7 @@ Error:
// Check against some known values
static
-int CheckParametricToneCurves(void)
+cmsInt32Number CheckParametricToneCurves(void)
{
cmsFloat64Number Params[10];
@@ -2442,11 +2448,11 @@ int CheckParametricToneCurves(void)
// LUT checks ------------------------------------------------------------------------------
static
-int CheckLUTcreation(void)
+cmsInt32Number CheckLUTcreation(void)
{
cmsPipeline* lut;
cmsPipeline* lut2;
- int n1, n2;
+ cmsInt32Number n1, n2;
lut = cmsPipelineAlloc(DbgThread(), 1, 1);
n1 = cmsPipelineStageCount(lut);
@@ -2532,23 +2538,23 @@ void Add3GammaCurves(cmsPipeline* lut, cmsFloat64Number Curve)
static
-int CheckFloatLUT(cmsPipeline* lut)
+cmsInt32Number CheckFloatLUT(cmsPipeline* lut)
{
- int n1, i, j;
+ cmsInt32Number n1, i, j;
cmsFloat32Number Inf[3], Outf[3];
n1=0;
for (j=0; j < 65535; j++) {
- int af[3];
+ cmsInt32Number af[3];
Inf[0] = Inf[1] = Inf[2] = (cmsFloat32Number) j / 65535.0F;
cmsPipelineEvalFloat(Inf, Outf, lut);
- af[0] = (int) floor(Outf[0]*65535.0 + 0.5);
- af[1] = (int) floor(Outf[1]*65535.0 + 0.5);
- af[2] = (int) floor(Outf[2]*65535.0 + 0.5);
+ af[0] = (cmsInt32Number) floor(Outf[0]*65535.0 + 0.5);
+ af[1] = (cmsInt32Number) floor(Outf[1]*65535.0 + 0.5);
+ af[2] = (cmsInt32Number) floor(Outf[2]*65535.0 + 0.5);
for (i=0; i < 3; i++) {
@@ -2564,16 +2570,16 @@ int CheckFloatLUT(cmsPipeline* lut)
static
-int Check16LUT(cmsPipeline* lut)
+cmsInt32Number Check16LUT(cmsPipeline* lut)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsUInt16Number Inw[3], Outw[3];
n2=0;
for (j=0; j < 65535; j++) {
- int aw[3];
+ cmsInt32Number aw[3];
Inw[0] = Inw[1] = Inw[2] = j;
cmsPipelineEval16(Inw, Outw, lut);
@@ -2596,10 +2602,10 @@ int Check16LUT(cmsPipeline* lut)
// Check any LUT that is linear
static
-int CheckStagesLUT(cmsPipeline* lut, int ExpectedStages)
+cmsInt32Number CheckStagesLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages)
{
- int nInpChans, nOutpChans, nStages;
+ cmsInt32Number nInpChans, nOutpChans, nStages;
nInpChans = cmsPipelineInputChannels(lut);
nOutpChans = cmsPipelineOutputChannels(lut);
@@ -2610,9 +2616,9 @@ int CheckStagesLUT(cmsPipeline* lut, int ExpectedStages)
static
-int CheckFullLUT(cmsPipeline* lut, int ExpectedStages)
+cmsInt32Number CheckFullLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages)
{
- int rc = CheckStagesLUT(lut, ExpectedStages) && Check16LUT(lut) && CheckFloatLUT(lut);
+ cmsInt32Number rc = CheckStagesLUT(lut, ExpectedStages) && Check16LUT(lut) && CheckFloatLUT(lut);
cmsPipelineFree(lut);
return rc;
@@ -2620,7 +2626,7 @@ int CheckFullLUT(cmsPipeline* lut, int ExpectedStages)
static
-int Check1StageLUT(void)
+cmsInt32Number Check1StageLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2631,7 +2637,7 @@ int Check1StageLUT(void)
static
-int Check2StageLUT(void)
+cmsInt32Number Check2StageLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2642,7 +2648,7 @@ int Check2StageLUT(void)
}
static
-int Check2Stage16LUT(void)
+cmsInt32Number Check2Stage16LUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2655,7 +2661,7 @@ int Check2Stage16LUT(void)
static
-int Check3StageLUT(void)
+cmsInt32Number Check3StageLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2667,7 +2673,7 @@ int Check3StageLUT(void)
}
static
-int Check3Stage16LUT(void)
+cmsInt32Number Check3Stage16LUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2681,7 +2687,7 @@ int Check3Stage16LUT(void)
static
-int Check4StageLUT(void)
+cmsInt32Number Check4StageLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2694,7 +2700,7 @@ int Check4StageLUT(void)
}
static
-int Check4Stage16LUT(void)
+cmsInt32Number Check4Stage16LUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2707,7 +2713,7 @@ int Check4Stage16LUT(void)
}
static
-int Check5StageLUT(void)
+cmsInt32Number Check5StageLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2722,7 +2728,7 @@ int Check5StageLUT(void)
static
-int Check5Stage16LUT(void)
+cmsInt32Number Check5Stage16LUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2736,7 +2742,7 @@ int Check5Stage16LUT(void)
}
static
-int Check6StageLUT(void)
+cmsInt32Number Check6StageLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2751,7 +2757,7 @@ int Check6StageLUT(void)
}
static
-int Check6Stage16LUT(void)
+cmsInt32Number Check6Stage16LUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
@@ -2767,10 +2773,10 @@ int Check6Stage16LUT(void)
static
-int CheckLab2LabLUT(void)
+cmsInt32Number CheckLab2LabLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
- int rc;
+ cmsInt32Number rc;
cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread()));
cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread()));
@@ -2784,10 +2790,10 @@ int CheckLab2LabLUT(void)
static
-int CheckXYZ2XYZLUT(void)
+cmsInt32Number CheckXYZ2XYZLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
- int rc;
+ cmsInt32Number rc;
cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread()));
cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread()));
@@ -2802,10 +2808,10 @@ int CheckXYZ2XYZLUT(void)
static
-int CheckLab2LabMatLUT(void)
+cmsInt32Number CheckLab2LabMatLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
- int rc;
+ cmsInt32Number rc;
cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread()));
AddIdentityMatrix(lut);
@@ -2819,11 +2825,11 @@ int CheckLab2LabMatLUT(void)
}
static
-int CheckNamedColorLUT(void)
+cmsInt32Number CheckNamedColorLUT(void)
{
cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3);
cmsNAMEDCOLORLIST* nc;
- int i,j, rc = 1, n2;
+ cmsInt32Number i,j, rc = 1, n2;
cmsUInt16Number PCS[3];
cmsUInt16Number Colorant[MAXCHANNELS];
char Name[255];
@@ -2874,12 +2880,12 @@ int CheckNamedColorLUT(void)
// A lightweight test of multilocalized unicode structures.
static
-int CheckMLU(void)
+cmsInt32Number CheckMLU(void)
{
cmsMLU* mlu, *mlu2, *mlu3;
char Buffer[256], Buffer2[256];
- int rc = 1;
- int i;
+ cmsInt32Number rc = 1;
+ cmsInt32Number i;
cmsHPROFILE h= NULL;
// Allocate a MLU structure, no preferred size
@@ -2999,10 +3005,10 @@ Error:
// A lightweight test of named color structures.
static
-int CheckNamedColorList(void)
+cmsInt32Number CheckNamedColorList(void)
{
cmsNAMEDCOLORLIST* nc = NULL, *nc2;
- int i, j, rc=1;
+ cmsInt32Number i, j, rc=1;
char Name[255];
cmsUInt16Number PCS[3];
cmsUInt16Number Colorant[MAXCHANNELS];
@@ -3102,7 +3108,7 @@ void CheckSingleFormatter16(cmsUInt32Number Type, const char* Text)
cmsUInt16Number Values[MAXCHANNELS];
char Buffer[1024];
cmsFormatter f, b;
- int i, j, nChannels, bytes;
+ cmsInt32Number i, j, nChannels, bytes;
_cmsTRANSFORM info;
// Already failed?
@@ -3174,7 +3180,7 @@ void CheckSingleFormatter16(cmsUInt32Number Type, const char* Text)
// Check all formatters
static
-int CheckFormatters16(void)
+cmsInt32Number CheckFormatters16(void)
{
FormatterFailed = FALSE;
@@ -3334,7 +3340,7 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text)
cmsFloat32Number Values[MAXCHANNELS];
char Buffer[1024];
cmsFormatter f, b;
- int i, j, nChannels;
+ cmsInt32Number i, j, nChannels;
_cmsTRANSFORM info;
// Already failed?
@@ -3395,7 +3401,7 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text)
#define C(a) CheckSingleFormatterFloat(a, #a)
static
-int CheckFormattersFloat(void)
+cmsInt32Number CheckFormattersFloat(void)
{
FormatterFailed = FALSE;
@@ -3419,7 +3425,7 @@ int CheckFormattersFloat(void)
// Write tag testbed ----------------------------------------------------------------------------------------
static
-int CheckXYZ(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsCIEXYZ XYZ, *Pt;
@@ -3445,10 +3451,10 @@ int CheckXYZ(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-int CheckGamma(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsToneCurve *g, *Pt;
- int rc;
+ cmsInt32Number rc;
switch (Pass) {
@@ -3470,10 +3476,10 @@ int CheckGamma(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
}
static
-int CheckText(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsMLU *m, *Pt;
- int rc;
+ cmsInt32Number rc;
char Buffer[256];
@@ -3498,11 +3504,11 @@ int CheckText(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
}
static
-int CheckData(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsICCData *Pt;
- cmsICCData d = { 1, 0, { '?' }};
- int rc;
+ cmsICCData d = { 1, 0, { '?' }};
+ cmsInt32Number rc;
switch (Pass) {
@@ -3523,7 +3529,7 @@ int CheckData(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-int CheckSignature(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsTagSignature *Pt, Holder;
@@ -3545,7 +3551,7 @@ int CheckSignature(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-int CheckDateTime(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
struct tm *Pt, Holder;
@@ -3580,10 +3586,10 @@ int CheckDateTime(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-int CheckNamedColor(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag, int max_check, cmsBool colorant_check)
+cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag, cmsInt32Number max_check, cmsBool colorant_check)
{
cmsNAMEDCOLORLIST* nc;
- int i, j, rc;
+ cmsInt32Number i, j, rc;
char Name[255];
cmsUInt16Number PCS[3];
cmsUInt16Number Colorant[MAXCHANNELS];
@@ -3648,10 +3654,10 @@ int CheckNamedColor(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag, int ma
static
-int CheckLUT(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsPipeline* Lut, *Pt;
- int rc;
+ cmsInt32Number rc;
switch (Pass) {
@@ -3683,11 +3689,11 @@ int CheckLUT(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
}
static
-int CheckCHAD(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsFloat64Number *Pt;
cmsFloat64Number CHAD[] = { 0, .1, .2, .3, .4, .5, .6, .7, .8 };
- int i;
+ cmsInt32Number i;
switch (Pass) {
@@ -3711,7 +3717,7 @@ int CheckCHAD(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
}
static
-int CheckChromaticity(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckChromaticity(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsCIExyYTRIPLE *Pt, c = { {0, .1, 1 }, { .3, .4, 1 }, { .6, .7, 1 }};
@@ -3740,10 +3746,10 @@ int CheckChromaticity(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-int CheckColorantOrder(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsUInt8Number *Pt, c[MAXCHANNELS];
- int i;
+ cmsInt32Number i;
switch (Pass) {
@@ -3767,7 +3773,7 @@ int CheckColorantOrder(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
}
static
-int CheckMeasurement(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsICCMeasurementConditions *Pt, m;
@@ -3805,10 +3811,10 @@ int CheckMeasurement(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-int CheckUcrBg(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsUcrBg *Pt, m;
- int rc;
+ cmsInt32Number rc;
char Buffer[256];
switch (Pass) {
@@ -3840,11 +3846,11 @@ int CheckUcrBg(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-int CheckCRDinfo(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsMLU *mlu;
char Buffer[256];
- int rc;
+ cmsInt32Number rc;
switch (Pass) {
@@ -3926,11 +3932,11 @@ cmsToneCurve *CreateSegmentedCurve(void)
static
-int CheckMPE(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsPipeline* Lut, *Pt;
cmsToneCurve* G[3];
- int rc;
+ cmsInt32Number rc;
switch (Pass) {
@@ -3962,10 +3968,10 @@ int CheckMPE(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-int CheckScreening(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
+cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
{
cmsScreening *Pt, sc;
- int rc;
+ cmsInt32Number rc;
switch (Pass) {
@@ -3999,7 +4005,7 @@ int CheckScreening(int Pass, cmsHPROFILE hProfile, cmsTagSignature tag)
static
-cmsBool CheckOneStr(cmsMLU* mlu, int n)
+cmsBool CheckOneStr(cmsMLU* mlu, cmsInt32Number n)
{
char Buffer[256], Buffer2[256];
@@ -4027,10 +4033,10 @@ void SetOneStr(cmsMLU** mlu, wchar_t* s1, wchar_t* s2)
static
-int CheckProfileSequenceTag(int Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsSEQ* s;
- int i;
+ cmsInt32Number i;
switch (Pass) {
@@ -4115,10 +4121,10 @@ int CheckProfileSequenceTag(int Pass, cmsHPROFILE hProfile)
static
-int CheckProfileSequenceIDTag(int Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsSEQ* s;
- int i;
+ cmsInt32Number i;
switch (Pass) {
@@ -4165,7 +4171,7 @@ int CheckProfileSequenceIDTag(int Pass, cmsHPROFILE hProfile)
static
-int CheckICCViewingConditions(int Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProfile)
{
cmsICCViewingConditions* v;
cmsICCViewingConditions s;
@@ -4207,42 +4213,42 @@ int CheckICCViewingConditions(int Pass, cmsHPROFILE hProfile)
static
-int CheckVCGT(int Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile)
{
- cmsToneCurve* Curves[3];
- cmsToneCurve** PtrCurve;
-
- switch (Pass) {
+ cmsToneCurve* Curves[3];
+ cmsToneCurve** PtrCurve;
+
+ switch (Pass) {
case 1:
- Curves[0] = cmsBuildGamma(DbgThread(), 1.1);
+ Curves[0] = cmsBuildGamma(DbgThread(), 1.1);
Curves[1] = cmsBuildGamma(DbgThread(), 2.2);
- Curves[2] = cmsBuildGamma(DbgThread(), 3.4);
+ Curves[2] = cmsBuildGamma(DbgThread(), 3.4);
- if (!cmsWriteTag(hProfile, cmsSigVcgtTag, Curves)) return 0;
+ if (!cmsWriteTag(hProfile, cmsSigVcgtTag, Curves)) return 0;
- cmsFreeToneCurveTriple(Curves);
+ cmsFreeToneCurveTriple(Curves);
return 1;
- case 2:
+ case 2:
- PtrCurve = cmsReadTag(hProfile, cmsSigVcgtTag);
- if (PtrCurve == NULL) return 0;
- if (!IsGoodVal("VCGT R", cmsEstimateGamma(PtrCurve[0], 0.01), 1.1, 0.001)) return 0;
+ PtrCurve = cmsReadTag(hProfile, cmsSigVcgtTag);
+ if (PtrCurve == NULL) return 0;
+ if (!IsGoodVal("VCGT R", cmsEstimateGamma(PtrCurve[0], 0.01), 1.1, 0.001)) return 0;
if (!IsGoodVal("VCGT G", cmsEstimateGamma(PtrCurve[1], 0.01), 2.2, 0.001)) return 0;
- if (!IsGoodVal("VCGT B", cmsEstimateGamma(PtrCurve[2], 0.01), 3.4, 0.001)) return 0;
- return 1;
+ if (!IsGoodVal("VCGT B", cmsEstimateGamma(PtrCurve[2], 0.01), 3.4, 0.001)) return 0;
+ return 1;
- default:;
- }
+ default:;
+ }
- return 0;
+ return 0;
}
static
-int CheckRAWtags(int Pass, cmsHPROFILE hProfile)
+cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile)
{
char Buffer[7];
@@ -4265,10 +4271,10 @@ int CheckRAWtags(int Pass, cmsHPROFILE hProfile)
// This is a very big test that checks every single tag
static
-int CheckProfileCreation(void)
+cmsInt32Number CheckProfileCreation(void)
{
cmsHPROFILE h;
- int Pass;
+ cmsInt32Number Pass;
h = cmsCreateProfilePlaceholder(DbgThread());
if (h == NULL) return 0;
@@ -4395,8 +4401,8 @@ int CheckProfileCreation(void)
if (!CheckICCViewingConditions(Pass, h)) return 0;
- SubTest("VCGT tags");
- if (!CheckVCGT(Pass, h)) return 0;
+ SubTest("VCGT tags");
+ if (!CheckVCGT(Pass, h)) return 0;
SubTest("RAW tags");
if (!CheckRAWtags(Pass, h)) return 0;
@@ -4438,7 +4444,7 @@ void ErrorReportingFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, con
static
-int CheckBadProfiles(void)
+cmsInt32Number CheckBadProfiles(void)
{
cmsHPROFILE h;
@@ -4504,17 +4510,17 @@ int CheckBadProfiles(void)
static
-int CheckErrReportingOnBadProfiles(void)
+cmsInt32Number CheckErrReportingOnBadProfiles(void)
{
- int rc;
+ cmsInt32Number rc;
- cmsSetLogErrorHandler(ErrorReportingFunction);
- rc = CheckBadProfiles();
- cmsSetLogErrorHandler(FatalErrorQuit);
+ cmsSetLogErrorHandler(ErrorReportingFunction);
+ rc = CheckBadProfiles();
+ cmsSetLogErrorHandler(FatalErrorQuit);
- // Reset the error state
- TrappedError = FALSE;
- return rc;
+ // Reset the error state
+ TrappedError = FALSE;
+ return rc;
}
@@ -4524,9 +4530,9 @@ int CheckErrReportingOnBadProfiles(void)
// Check a linear xform
static
-int Check8linearXFORM(cmsHTRANSFORM xform, int nChan)
+cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsUInt8Number Inw[MAXCHANNELS], Outw[MAXCHANNELS];
n2=0;
@@ -4538,7 +4544,7 @@ int Check8linearXFORM(cmsHTRANSFORM xform, int nChan)
for (i=0; i < nChan; i++) {
- int dif = abs(Outw[i] - j);
+ cmsInt32Number dif = abs(Outw[i] - j);
if (dif > n2) n2 = dif;
}
@@ -4555,9 +4561,9 @@ int Check8linearXFORM(cmsHTRANSFORM xform, int nChan)
}
static
-int Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, int nChan)
+cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsUInt8Number Inw[MAXCHANNELS], Outw1[MAXCHANNELS], Outw2[MAXCHANNELS];;
n2=0;
@@ -4570,7 +4576,7 @@ int Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, int nChan)
for (i=0; i < nChan; i++) {
- int dif = abs(Outw2[i] - Outw1[i]);
+ cmsInt32Number dif = abs(Outw2[i] - Outw1[i]);
if (dif > n2) n2 = dif;
}
@@ -4590,9 +4596,9 @@ int Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, int nChan)
// Check a linear xform
static
-int Check16linearXFORM(cmsHTRANSFORM xform, int nChan)
+cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsUInt16Number Inw[MAXCHANNELS], Outw[MAXCHANNELS];
n2=0;
@@ -4604,7 +4610,7 @@ int Check16linearXFORM(cmsHTRANSFORM xform, int nChan)
for (i=0; i < nChan; i++) {
- int dif = abs(Outw[i] - j);
+ cmsInt32Number dif = abs(Outw[i] - j);
if (dif > n2) n2 = dif;
}
@@ -4622,9 +4628,9 @@ int Check16linearXFORM(cmsHTRANSFORM xform, int nChan)
}
static
-int Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, int nChan)
+cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsUInt16Number Inw[MAXCHANNELS], Outw1[MAXCHANNELS], Outw2[MAXCHANNELS];;
n2=0;
@@ -4638,7 +4644,7 @@ int Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, int nChan)
for (i=0; i < nChan; i++) {
- int dif = abs(Outw2[i] - Outw1[i]);
+ cmsInt32Number dif = abs(Outw2[i] - Outw1[i]);
if (dif > n2) n2 = dif;
}
@@ -4658,9 +4664,9 @@ int Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, int nChan)
// Check a linear xform
static
-int CheckFloatlinearXFORM(cmsHTRANSFORM xform, int nChan)
+cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsFloat32Number In[MAXCHANNELS], Out[MAXCHANNELS];
n2=0;
@@ -4685,9 +4691,9 @@ int CheckFloatlinearXFORM(cmsHTRANSFORM xform, int nChan)
// Check a linear xform
static
-int CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, int nChan)
+cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan)
{
- int n2, i, j;
+ cmsInt32Number n2, i, j;
cmsFloat32Number In[MAXCHANNELS], Out1[MAXCHANNELS], Out2[MAXCHANNELS];
n2=0;
@@ -4715,13 +4721,13 @@ int CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, int nChan)
// Curves only transforms ----------------------------------------------------------------------------------------
static
-int CheckCurvesOnlyTransforms(void)
+cmsInt32Number CheckCurvesOnlyTransforms(void)
{
cmsHTRANSFORM xform1, xform2;
cmsHPROFILE h1, h2, h3;
cmsToneCurve* c1, *c2, *c3;
- int rc = 1;
+ cmsInt32Number rc = 1;
c1 = cmsBuildGamma(DbgThread(), 2.2);
@@ -4793,7 +4799,7 @@ Error:
static cmsFloat64Number MaxDE;
static
-int CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cmsFloat64Number b)
+cmsInt32Number CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cmsFloat64Number b)
{
cmsCIELab In, Out;
cmsFloat64Number dE;
@@ -4816,9 +4822,9 @@ int CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cms
// Check several Lab, slicing at non-exact values. Precision should be 16 bits. 50x50x50 checks aprox.
static
-int CheckSeveralLab(cmsHTRANSFORM xform)
+cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform)
{
- int L, a, b;
+ cmsInt32Number L, a, b;
MaxDE = 0;
for (L=0; L < 65536; L += 1311) {
@@ -4840,10 +4846,10 @@ int CheckSeveralLab(cmsHTRANSFORM xform)
static
-int OneTrivialLab(cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt)
+cmsInt32Number OneTrivialLab(cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt)
{
cmsHTRANSFORM xform;
- int rc;
+ cmsInt32Number rc;
SubTest(txt);
xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
@@ -4856,7 +4862,7 @@ int OneTrivialLab(cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt)
static
-int CheckFloatLabTransforms(void)
+cmsInt32Number CheckFloatLabTransforms(void)
{
return OneTrivialLab(cmsCreateLab4ProfileTHR(DbgThread(), NULL), cmsCreateLab4ProfileTHR(DbgThread(), NULL), "Lab4/Lab4") &&
OneTrivialLab(cmsCreateLab2ProfileTHR(DbgThread(), NULL), cmsCreateLab2ProfileTHR(DbgThread(), NULL), "Lab2/Lab2") &&
@@ -4866,7 +4872,7 @@ int CheckFloatLabTransforms(void)
static
-int CheckEncodedLabTransforms(void)
+cmsInt32Number CheckEncodedLabTransforms(void)
{
cmsHTRANSFORM xform;
cmsUInt16Number In[3];
@@ -4944,11 +4950,11 @@ int CheckEncodedLabTransforms(void)
}
static
-int CheckStoredIdentities(void)
+cmsInt32Number CheckStoredIdentities(void)
{
cmsHPROFILE hLab, hLink, h4, h2;
cmsHTRANSFORM xform;
- int rc = 1;
+ cmsInt32Number rc = 1;
hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL);
xform = cmsCreateTransformTHR(DbgThread(), hLab, TYPE_Lab_8, hLab, TYPE_Lab_8, 0, 0);
@@ -5017,11 +5023,11 @@ Error:
// Check a simple xform from a matrix profile to itself. Test floating point accuracy.
static
-int CheckMatrixShaperXFORMFloat(void)
+cmsInt32Number CheckMatrixShaperXFORMFloat(void)
{
cmsHPROFILE hAbove, hSRGB;
cmsHTRANSFORM xform;
- int rc1, rc2;
+ cmsInt32Number rc1, rc2;
hAbove = Create_AboveRGB();
xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0);
@@ -5041,11 +5047,11 @@ int CheckMatrixShaperXFORMFloat(void)
// Check a simple xform from a matrix profile to itself. Test 16 bits accuracy.
static
-int CheckMatrixShaperXFORM16(void)
+cmsInt32Number CheckMatrixShaperXFORM16(void)
{
cmsHPROFILE hAbove, hSRGB;
cmsHTRANSFORM xform;
- int rc1, rc2;
+ cmsInt32Number rc1, rc2;
hAbove = Create_AboveRGB();
xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0);
@@ -5066,11 +5072,11 @@ int CheckMatrixShaperXFORM16(void)
// Check a simple xform from a matrix profile to itself. Test 8 bits accuracy.
static
-int CheckMatrixShaperXFORM8(void)
+cmsInt32Number CheckMatrixShaperXFORM8(void)
{
cmsHPROFILE hAbove, hSRGB;
cmsHTRANSFORM xform;
- int rc1, rc2;
+ cmsInt32Number rc1, rc2;
hAbove = Create_AboveRGB();
xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_8, hAbove, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0);
@@ -5101,7 +5107,7 @@ int CheckMatrixShaperXFORM8(void)
// Check known values going from sRGB to XYZ
static
-int CheckOneRGB_f(cmsHTRANSFORM xform, int R, int G, int B, cmsFloat64Number X, cmsFloat64Number Y, cmsFloat64Number Z, cmsFloat64Number err)
+cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Number G, cmsInt32Number B, cmsFloat64Number X, cmsFloat64Number Y, cmsFloat64Number Z, cmsFloat64Number err)
{
cmsFloat32Number RGB[3];
cmsFloat64Number Out[3];
@@ -5119,11 +5125,11 @@ int CheckOneRGB_f(cmsHTRANSFORM xform, int R, int G, int B, cmsFloat64Number X,
static
-int Chack_sRGB_Float(void)
+cmsInt32Number Chack_sRGB_Float(void)
{
cmsHPROFILE hsRGB, hXYZ, hLab;
cmsHTRANSFORM xform1, xform2;
- int rc;
+ cmsInt32Number rc;
hsRGB = cmsCreate_sRGBProfileTHR(DbgThread());
@@ -5160,12 +5166,77 @@ int Chack_sRGB_Float(void)
}
+// ---------------------------------------------------
+
+static
+cmsBool GetProfileRGBPrimaries(cmsHPROFILE hProfile,
+ cmsCIEXYZTRIPLE *result,
+ cmsUInt32Number intent)
+{
+ cmsHPROFILE hXYZ;
+ cmsHTRANSFORM hTransform;
+ cmsFloat64Number rgb[3][3] = {{1., 0., 0.},
+ {0., 1., 0.},
+ {0., 0., 1.}};
+
+ hXYZ = cmsCreateXYZProfile();
+ if (hXYZ == NULL) return FALSE;
+
+ hTransform = cmsCreateTransform(hProfile, TYPE_RGB_DBL, hXYZ, TYPE_XYZ_DBL,
+ intent, cmsFLAGS_NOCACHE | cmsFLAGS_NOOPTIMIZE);
+ cmsCloseProfile(hXYZ);
+ if (hTransform == NULL) return FALSE;
+
+ cmsDoTransform(hTransform, rgb, result, 3);
+ cmsDeleteTransform(hTransform);
+ return TRUE;
+}
+
+
+static
+int CheckRGBPrimaries(void)
+{
+ cmsHPROFILE hsRGB;
+ cmsCIEXYZTRIPLE tripXYZ;
+ cmsCIExyYTRIPLE tripxyY;
+ cmsBool result;
+
+ hsRGB = cmsCreate_sRGBProfileTHR(DbgThread());
+ if (!hsRGB) return 0;
+
+ result = GetProfileRGBPrimaries(hsRGB, &tripXYZ,
+ INTENT_ABSOLUTE_COLORIMETRIC);
+
+ cmsCloseProfile(hsRGB);
+ if (!result) return 0;
+
+ cmsXYZ2xyY(&tripxyY.Red, &tripXYZ.Red);
+ cmsXYZ2xyY(&tripxyY.Green, &tripXYZ.Green);
+ cmsXYZ2xyY(&tripxyY.Blue, &tripXYZ.Blue);
+
+ /* valus were taken from
+ http://en.wikipedia.org/wiki/RGB_color_spaces#Specifications */
+
+ if (!IsGoodFixed15_16("xRed", tripxyY.Red.x, 0.64) ||
+ !IsGoodFixed15_16("yRed", tripxyY.Red.y, 0.33) ||
+ !IsGoodFixed15_16("xGreen", tripxyY.Green.x, 0.30) ||
+ !IsGoodFixed15_16("yGreen", tripxyY.Green.y, 0.60) ||
+ !IsGoodFixed15_16("xBlue", tripxyY.Blue.x, 0.15) ||
+ !IsGoodFixed15_16("yBlue", tripxyY.Blue.y, 0.06)) {
+ Fail("One or more primaries are wrong.");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
// -----------------------------------------------------------------------------------------------------------------
// This function will check CMYK -> CMYK transforms. It uses FOGRA29 and SWOP ICC profiles
static
-int CheckCMYK(int Intent, const char *Profile1, const char* Profile2)
+cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char* Profile2)
{
cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), Profile1, "r");
cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), Profile2, "r");
@@ -5174,7 +5245,7 @@ int CheckCMYK(int Intent, const char *Profile1, const char* Profile2)
cmsCIELab Lab1, Lab2;
cmsHPROFILE hLab;
cmsFloat64Number DeltaL, Max;
- int i;
+ cmsInt32Number i;
hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL);
@@ -5237,14 +5308,14 @@ int CheckCMYK(int Intent, const char *Profile1, const char* Profile2)
}
static
-int CheckCMYKRoundtrip(void)
+cmsInt32Number CheckCMYKRoundtrip(void)
{
return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "USWebCoatedSWOP.icc", "USWebCoatedSWOP.icc");
}
static
-int CheckCMYKPerceptual(void)
+cmsInt32Number CheckCMYKPerceptual(void)
{
return CheckCMYK(INTENT_PERCEPTUAL, "USWebCoatedSWOP.icc", "UncoatedFOGRA29.icc");
}
@@ -5252,7 +5323,7 @@ int CheckCMYKPerceptual(void)
static
-int CheckCMYKRelCol(void)
+cmsInt32Number CheckCMYKRelCol(void)
{
return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "USWebCoatedSWOP.icc", "UncoatedFOGRA29.icc");
}
@@ -5260,7 +5331,7 @@ int CheckCMYKRelCol(void)
static
-int CheckKOnlyBlackPreserving(void)
+cmsInt32Number CheckKOnlyBlackPreserving(void)
{
cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), "USWebCoatedSWOP.icc", "r");
cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), "UncoatedFOGRA29.icc", "r");
@@ -5269,7 +5340,7 @@ int CheckKOnlyBlackPreserving(void)
cmsCIELab Lab1, Lab2;
cmsHPROFILE hLab;
cmsFloat64Number DeltaL, Max;
- int i;
+ cmsInt32Number i;
hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL);
@@ -5286,16 +5357,16 @@ int CheckKOnlyBlackPreserving(void)
CMYK1[2] = 0;
CMYK1[3] = (cmsFloat32Number) i;
- // SWOP CMYK to Lab1
+ // SWOP CMYK to Lab1
cmsDoTransform(swop_lab, CMYK1, &Lab1, 1);
- // SWOP To FOGRA using black preservation
+ // SWOP To FOGRA using black preservation
cmsDoTransform(xform, CMYK1, CMYK2, 1);
- // Obtained FOGRA CMYK to Lab2
+ // Obtained FOGRA CMYK to Lab2
cmsDoTransform(fogra_lab, CMYK2, &Lab2, 1);
- // We care only on L*
+ // We care only on L*
DeltaL = fabs(Lab1.L - Lab2.L);
if (DeltaL > Max) Max = DeltaL;
@@ -5304,11 +5375,11 @@ int CheckKOnlyBlackPreserving(void)
cmsDeleteTransform(xform);
- // dL should be below 3.0
+ // dL should be below 3.0
if (Max > 3.0) return 0;
- // Same, but FOGRA to SWOP
+ // Same, but FOGRA to SWOP
xform = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0);
Max = 0;
@@ -5341,7 +5412,7 @@ int CheckKOnlyBlackPreserving(void)
}
static
-int CheckKPlaneBlackPreserving(void)
+cmsInt32Number CheckKPlaneBlackPreserving(void)
{
cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), "USWebCoatedSWOP.icc", "r");
cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), "UncoatedFOGRA29.icc", "r");
@@ -5350,7 +5421,7 @@ int CheckKPlaneBlackPreserving(void)
cmsCIELab Lab1, Lab2;
cmsHPROFILE hLab;
cmsFloat64Number DeltaE, Max;
- int i;
+ cmsInt32Number i;
hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL);
@@ -5416,11 +5487,11 @@ int CheckKPlaneBlackPreserving(void)
static
-int CheckProofingXFORMFloat(void)
+cmsInt32Number CheckProofingXFORMFloat(void)
{
cmsHPROFILE hAbove;
cmsHTRANSFORM xform;
- int rc;
+ cmsInt32Number rc;
hAbove = Create_AboveRGB();
xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove,
@@ -5432,11 +5503,11 @@ int CheckProofingXFORMFloat(void)
}
static
-int CheckProofingXFORM16(void)
+cmsInt32Number CheckProofingXFORM16(void)
{
cmsHPROFILE hAbove;
cmsHTRANSFORM xform;
- int rc;
+ cmsInt32Number rc;
hAbove = Create_AboveRGB();
xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove,
@@ -5449,11 +5520,11 @@ int CheckProofingXFORM16(void)
static
-int CheckGamutCheck(void)
+cmsInt32Number CheckGamutCheck(void)
{
cmsHPROFILE hSRGB, hAbove;
cmsHTRANSFORM xform;
- int rc;
+ cmsInt32Number rc;
cmsUInt16Number Alarm[3] = { 0xDEAD, 0xBABE, 0xFACE };
// Set alarm codes to fancy values so we could check the out of gamut condition
@@ -5502,7 +5573,7 @@ int CheckGamutCheck(void)
// -------------------------------------------------------------------------------------------------------------------
static
-int CheckBlackPoint(void)
+cmsInt32Number CheckBlackPoint(void)
{
cmsHPROFILE hProfile;
cmsCIEXYZ Black;
@@ -5538,37 +5609,37 @@ int CheckBlackPoint(void)
static
-int CheckOneTAC(cmsFloat64Number InkLimit)
+cmsInt32Number CheckOneTAC(cmsFloat64Number InkLimit)
{
- cmsHPROFILE h;
- cmsFloat64Number d;
+ cmsHPROFILE h;
+ cmsFloat64Number d;
- h =CreateFakeCMYK(InkLimit, TRUE);
- cmsSaveProfileToFile(h, "lcmstac.icc");
- cmsCloseProfile(h);
+ h =CreateFakeCMYK(InkLimit, TRUE);
+ cmsSaveProfileToFile(h, "lcmstac.icc");
+ cmsCloseProfile(h);
- h = cmsOpenProfileFromFile("lcmstac.icc", "r");
- d = cmsDetectTAC(h);
- cmsCloseProfile(h);
+ h = cmsOpenProfileFromFile("lcmstac.icc", "r");
+ d = cmsDetectTAC(h);
+ cmsCloseProfile(h);
- remove("lcmstac.icc");
+ remove("lcmstac.icc");
- if (fabs(d - InkLimit) > 5) return 0;
+ if (fabs(d - InkLimit) > 5) return 0;
- return 1;
+ return 1;
}
static
-int CheckTAC(void)
+cmsInt32Number CheckTAC(void)
{
- if (!CheckOneTAC(180)) return 0;
+ if (!CheckOneTAC(180)) return 0;
if (!CheckOneTAC(220)) return 0;
- if (!CheckOneTAC(286)) return 0;
- if (!CheckOneTAC(310)) return 0;
- if (!CheckOneTAC(330)) return 0;
+ if (!CheckOneTAC(286)) return 0;
+ if (!CheckOneTAC(310)) return 0;
+ if (!CheckOneTAC(330)) return 0;
- return 1;
+ return 1;
}
// -------------------------------------------------------------------------------------------------------
@@ -5577,10 +5648,10 @@ int CheckTAC(void)
#define NPOINTS_IT8 10 // (17*17*17*17)
static
-int CheckCGATS(void)
+cmsInt32Number CheckCGATS(void)
{
cmsHANDLE it8;
- int i;
+ cmsInt32Number i;
it8 = cmsIT8Alloc(DbgThread());
@@ -5722,7 +5793,7 @@ void GenerateCRD(const char* cOutProf, const char* FileName)
}
static
-int CheckPostScript(void)
+cmsInt32Number CheckPostScript(void)
{
GenerateCSA("sRGB_Color_Space_Profile.icm", "sRGB_CSA.ps");
GenerateCSA("aRGBlcms2.icc", "aRGB_CSA.ps");
@@ -5743,65 +5814,133 @@ int CheckPostScript(void)
static
-int CheckGray(cmsHTRANSFORM xform, int g, double L)
+cmsInt32Number CheckGray(cmsHTRANSFORM xform, cmsInt32Number g, double L)
{
- cmsCIELab Lab;
+ cmsCIELab Lab;
- cmsDoTransform(xform, &g, &Lab, 1);
+ cmsDoTransform(xform, &g, &Lab, 1);
- if (!IsGoodVal("a axis on gray", 0, Lab.a, 0.001)) return 0;
+ if (!IsGoodVal("a axis on gray", 0, Lab.a, 0.001)) return 0;
if (!IsGoodVal("b axis on gray", 0, Lab.b, 0.001)) return 0;
- return IsGoodVal("Gray value", L, Lab.L, 0.01);
+ return IsGoodVal("Gray value", L, Lab.L, 0.01);
}
static
-int CheckInputGray(void)
+cmsInt32Number CheckInputGray(void)
{
- cmsHPROFILE hGray = Create_Gray22();
- cmsHPROFILE hLab = cmsCreateLab4Profile(NULL);
+ cmsHPROFILE hGray = Create_Gray22();
+ cmsHPROFILE hLab = cmsCreateLab4Profile(NULL);
cmsHTRANSFORM xform;
- if (hGray == NULL || hLab == NULL) return 0;
+ if (hGray == NULL || hLab == NULL) return 0;
- xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
cmsCloseProfile(hGray); cmsCloseProfile(hLab);
if (!CheckGray(xform, 0, 0)) return 0;
if (!CheckGray(xform, 125, 52.768)) return 0;
if (!CheckGray(xform, 200, 81.069)) return 0;
- if (!CheckGray(xform, 255, 100.0)) return 0;
+ if (!CheckGray(xform, 255, 100.0)) return 0;
- cmsDeleteTransform(xform);
- return 1;
+ cmsDeleteTransform(xform);
+ return 1;
}
static
-int CheckLabInputGray(void)
+cmsInt32Number CheckLabInputGray(void)
{
- cmsHPROFILE hGray = Create_GrayLab();
- cmsHPROFILE hLab = cmsCreateLab4Profile(NULL);
+ cmsHPROFILE hGray = Create_GrayLab();
+ cmsHPROFILE hLab = cmsCreateLab4Profile(NULL);
cmsHTRANSFORM xform;
- if (hGray == NULL || hLab == NULL) return 0;
+ if (hGray == NULL || hLab == NULL) return 0;
- xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
+ xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0);
cmsCloseProfile(hGray); cmsCloseProfile(hLab);
if (!CheckGray(xform, 0, 0)) return 0;
if (!CheckGray(xform, 125, 49.019)) return 0;
if (!CheckGray(xform, 200, 78.431)) return 0;
- if (!CheckGray(xform, 255, 100.0)) return 0;
-
- cmsDeleteTransform(xform);
- return 1;
-}
-
-
-
-
-static
-int CheckV4gamma(void)
+ if (!CheckGray(xform, 255, 100.0)) return 0;
+
+ cmsDeleteTransform(xform);
+ return 1;
+}
+
+
+static
+cmsInt32Number CheckOutGray(cmsHTRANSFORM xform, double L, cmsUInt8Number g)
+{
+ cmsCIELab Lab;
+ cmsUInt8Number g_out;
+
+ Lab.L = L;
+ Lab.a = 0;
+ Lab.b = 0;
+
+ cmsDoTransform(xform, &Lab, &g_out, 1);
+
+ return IsGoodVal("Gray value", g, (double) g_out, 0.01);
+}
+
+static
+cmsInt32Number CheckOutputGray(void)
+{
+ cmsHPROFILE hGray = Create_Gray22();
+ cmsHPROFILE hLab = cmsCreateLab4Profile(NULL);
+ cmsHTRANSFORM xform;
+
+ if (hGray == NULL || hLab == NULL) return 0;
+
+ xform = cmsCreateTransform( hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(hGray); cmsCloseProfile(hLab);
+
+ if (!CheckOutGray(xform, 0, 0)) return 0;
+ if (!CheckOutGray(xform, 100, 255)) return 0;
+
+ if (!CheckOutGray(xform, 20, 52)) return 0;
+ if (!CheckOutGray(xform, 50, 118)) return 0;
+
+
+ cmsDeleteTransform(xform);
+ return 1;
+}
+
+
+static
+cmsInt32Number CheckLabOutputGray(void)
+{
+ cmsHPROFILE hGray = Create_GrayLab();
+ cmsHPROFILE hLab = cmsCreateLab4Profile(NULL);
+ cmsHTRANSFORM xform;
+ cmsInt32Number i;
+
+ if (hGray == NULL || hLab == NULL) return 0;
+
+ xform = cmsCreateTransform( hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0);
+ cmsCloseProfile(hGray); cmsCloseProfile(hLab);
+
+ if (!CheckOutGray(xform, 0, 0)) return 0;
+ if (!CheckOutGray(xform, 100, 255)) return 0;
+
+ for (i=0; i < 100; i++) {
+
+ cmsUInt8Number g;
+
+ g = (cmsUInt8Number) floor(i * 255.0 / 100.0 + 0.5);
+
+ if (!CheckOutGray(xform, i, g)) return 0;
+ }
+
+
+ cmsDeleteTransform(xform);
+ return 1;
+}
+
+
+static
+cmsInt32Number CheckV4gamma(void)
{
cmsHPROFILE h;
cmsUInt16Number Lin[] = {0, 0xffff};
@@ -5821,81 +5960,195 @@ int CheckV4gamma(void)
return 1;
}
-
-
-/*
-#include <windows.h>
-void WindowsPerformance(void)
-{
- LARGE_INTEGER s1, s2, f;
- cmsFloat64Number tmul, time;
- cmsUInt32Number i, j;
- cmsUInt16Number in, out;
- cmsInterpParams* p;
- cmsUInt16Number* Tab;
- int nNodesToCheck = 4096;
- int Down = 0;
-
- Tab = (cmsUInt16Number*) malloc(sizeof(cmsUInt16Number)* nNodesToCheck);
- if (Tab == NULL) return;
-
- p = _cmsComputeInterpParams(DbgThread(), nNodesToCheck, 1, 1, 0);
- if (p == NULL) return;
-
- BuildTable(nNodesToCheck, Tab, Down);
-
- p ->Table = Tab;
-
- QueryPerformanceFrequency(&f);
- QueryPerformanceCounter(&s1);
-
-
- for (j = 0; j < 0xa00; j++) {
-
- for (i=0; i <= 0xffff; i++) {
-
- in = i;
- p ->Interpolation.Lerp16(&in, &out, p);
+// cmsBool cmsGBDdumpVRML(cmsHANDLE hGBD, const char* fname);
+
+// Gamut descriptor routines
+static
+cmsInt32Number CheckGBD(void)
+{
+ cmsCIELab Lab;
+ cmsHANDLE h;
+ cmsInt32Number L, a, b;
+ cmsUInt32Number r1, g1, b1;
+ cmsHPROFILE hLab, hsRGB;
+ cmsHTRANSFORM xform;
+
+ h = cmsGBDAlloc(DbgThread());
+ if (h == NULL) return 0;
+
+ // Fill all Lab gamut as valid
+ SubTest("Filling RAW gamut");
+
+ for (L=0; L <= 100; L += 10)
+ for (a = -128; a <= 128; a += 5)
+ for (b = -128; b <= 128; b += 5) {
+
+ Lab.L = L;
+ Lab.a = a;
+ Lab.b = b;
+ if (!cmsGDBAddPoint(h, &Lab)) return 0;
+ }
+
+ // Complete boundaries
+ SubTest("computing Lab gamut");
+ if (!cmsGDBCompute(h, 0)) return 0;
+
+
+ // All points should be inside gamut
+ SubTest("checking Lab gamut");
+ for (L=10; L <= 90; L += 25)
+ for (a = -120; a <= 120; a += 25)
+ for (b = -120; b <= 120; b += 25) {
+
+ Lab.L = L;
+ Lab.a = a;
+ Lab.b = b;
+ if (!cmsGDBCheckPoint(h, &Lab)) {
+ return 0;
+ }
+ }
+ cmsGBDFree(h);
+
+
+ // Now for sRGB
+ SubTest("checking sRGB gamut");
+ h = cmsGBDAlloc(DbgThread());
+ hsRGB = cmsCreate_sRGBProfile();
+ hLab = cmsCreateLab4Profile(NULL);
+
+ xform = cmsCreateTransform(hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(hsRGB); cmsCloseProfile(hLab);
+
+
+ for (r1=0; r1 < 256; r1 += 5) {
+ for (g1=0; g1 < 256; g1 += 5)
+ for (b1=0; b1 < 256; b1 += 5) {
+
+
+ cmsUInt8Number rgb[3];
+
+ rgb[0] = r1;
+ rgb[1] = g1;
+ rgb[2] = b1;
+
+ cmsDoTransform(xform, rgb, &Lab, 1);
+
+ // if (fabs(Lab.b) < 20 && Lab.a > 0) continue;
+
+ if (!cmsGDBAddPoint(h, &Lab)) {
+ cmsGBDFree(h);
+ return 0;
+ }
+
+
+ }
}
+
+
+ if (!cmsGDBCompute(h, 0)) return 0;
+ // cmsGBDdumpVRML(h, "c:\\colormaps\\lab.wrl");
+
+ for (r1=10; r1 < 200; r1 += 10) {
+ for (g1=10; g1 < 200; g1 += 10)
+ for (b1=10; b1 < 200; b1 += 10) {
+
+
+ cmsUInt8Number rgb[3];
+
+ rgb[0] = r1;
+ rgb[1] = g1;
+ rgb[2] = b1;
+
+ cmsDoTransform(xform, rgb, &Lab, 1);
+ if (!cmsGDBCheckPoint(h, &Lab)) {
+
+ cmsDeleteTransform(xform);
+ cmsGBDFree(h);
+ return 0;
+ }
+ }
}
- QueryPerformanceCounter(&s2);
- tmul = 1000./(cmsFloat64Number)f.QuadPart;
- time = (s2.QuadPart - s1.QuadPart)*tmul;
+ cmsDeleteTransform(xform);
+ cmsGBDFree(h);
+
+ SubTest("checking LCh chroma ring");
+ h = cmsGBDAlloc(DbgThread());
- printf("\t\tTime = %lg ms\n", time);
- printf("xput = %f\n", (cmsFloat64Number) (65535.0 * 0xa00 * 1000.0) / (time * 1024.0 * 1024.0));
- _cmsFreeInterpParams(p);
- free(Tab);
-
-}
-*/
+ for (r1=0; r1 < 360; r1++) {
+
+ cmsCIELCh LCh;
+
+ LCh.L = 70;
+ LCh.C = 60;
+ LCh.h = r1;
+
+ cmsLCh2Lab(&Lab, &LCh);
+ if (!cmsGDBAddPoint(h, &Lab)) {
+ cmsGBDFree(h);
+ return 0;
+ }
+ }
+
+
+ if (!cmsGDBCompute(h, 0)) return 0;
+
+ cmsGBDFree(h);
+
+ return 1;
+}
+
+
+// --------------------------------------------------------------------------------------------------
+// P E R F O R M A N C E C H E C K S
+// --------------------------------------------------------------------------------------------------
typedef struct {cmsUInt8Number r, g, b, a;} Scanline_rgb1;
-typedef struct {cmsUInt16Number r, g, b, a;} Scanline_rgb2;
+typedef struct {cmsUInt16Number r, g, b, a;} Scanline_rgb2;
typedef struct {cmsUInt8Number r, g, b;} Scanline_rgb8;
-typedef struct {cmsUInt16Number r, g, b;} Scanline_rgb0;
+typedef struct {cmsUInt16Number r, g, b;} Scanline_rgb0;
+
+
+static
+void TitlePerformance(const char* Txt)
+{
+ printf("%-45s: ", Txt); fflush(stdout);
+}
+static
+void PrintPerformance(cmsUInt32Number Bytes, cmsUInt32Number SizeOfPixel, cmsFloat64Number diff)
+{
+ cmsFloat64Number seconds = (cmsFloat64Number) diff / CLOCKS_PER_SEC;
+ cmsFloat64Number mpix_sec = Bytes / (1024.0*1024.0*seconds*SizeOfPixel);
+
+ printf("%g MPixel/sec.\n", mpix_sec);
+ fflush(stdout);
+}
static
-void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
+void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
{
- int r, g, b, j;
+ cmsInt32Number r, g, b, j;
clock_t atime;
- cmsFloat64Number seconds, diff;
+ cmsFloat64Number diff;
cmsHTRANSFORM hlcmsxform;
Scanline_rgb0 *In;
cmsUInt32Number Mb;
-
- hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
- Mb = 256*256*256*sizeof(Scanline_rgb0);
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Die("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_16,
+ hlcmsProfileOut, TYPE_RGB_16, Intent, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(hlcmsProfileIn);
+ cmsCloseProfile(hlcmsProfileOut);
+ Mb = 256*256*256*sizeof(Scanline_rgb0);
In = (Scanline_rgb0*) malloc(Mb);
j = 0;
@@ -5911,38 +6164,38 @@ void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
}
- printf("%s...", Title);
+ TitlePerformance(Title);
atime = clock();
cmsDoTransform(hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
- seconds = (cmsFloat64Number) diff / CLOCKS_PER_SEC;
free(In);
-
-
- printf("done.\n[%d tics, %g sec, %g Mpixel/sec.]\n", (int) diff, seconds, Mb / (1024*1024*seconds*3*2) );
-
+
+ PrintPerformance(Mb, sizeof(Scanline_rgb0), diff);
cmsDeleteTransform(hlcmsxform);
- cmsCloseProfile(hlcmsProfileIn);
- cmsCloseProfile(hlcmsProfileOut);
+
}
static
void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
{
-
- int r, g, b, j;
+ cmsInt32Number r, g, b, j;
clock_t atime;
- cmsFloat64Number seconds, diff;
+ cmsFloat64Number diff;
cmsHTRANSFORM hlcmsxform;
Scanline_rgb2 *In;
cmsUInt32Number Mb;
-
+
+ if (hlcmsProfileOut == NULL || hlcmsProfileOut == NULL)
+ Die("Unable to open profiles");
- hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_16, hlcmsProfileOut, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_16,
+ hlcmsProfileOut, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(hlcmsProfileIn);
+ cmsCloseProfile(hlcmsProfileOut);
Mb = 256*256*256*sizeof(Scanline_rgb2);
@@ -5962,37 +6215,40 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO
}
- printf("%s...", Title);
+ TitlePerformance(Title);
atime = clock();
cmsDoTransform(hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
- seconds = (cmsFloat64Number) diff / CLOCKS_PER_SEC;
+
free(In);
-
- printf("done.\n[%d tics, %g sec, %g Mpixel/sec.]\n", (int) diff, seconds, Mb / (1024*1024*seconds*4*2) );
+ PrintPerformance(Mb, sizeof(Scanline_rgb2), diff);
cmsDeleteTransform(hlcmsxform);
- cmsCloseProfile(hlcmsProfileIn);
- cmsCloseProfile(hlcmsProfileOut);
+
}
static
-void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, int Intent)
+void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
{
- int r, g, b, j;
+ cmsInt32Number r, g, b, j;
clock_t atime;
- cmsFloat64Number seconds, diff;
+ cmsFloat64Number diff;
cmsHTRANSFORM hlcmsxform;
Scanline_rgb8 *In;
cmsUInt32Number Mb;
-
- hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_8, hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE);
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Die("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_8,
+ hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(hlcmsProfileIn);
+ cmsCloseProfile(hlcmsProfileOut);
Mb = 256*256*256*sizeof(Scanline_rgb8);
@@ -6010,37 +6266,40 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE
j++;
}
-
- printf("%s...", Title);
+ TitlePerformance(Title);
atime = clock();
cmsDoTransform(hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
- seconds = (cmsFloat64Number) diff / CLOCKS_PER_SEC;
+
free(In);
+ PrintPerformance(Mb, sizeof(Scanline_rgb8), diff);
- printf("done.\n[%d tics, %g sec, %g Mpixels/sec.]\n", (int) diff, seconds, Mb / (1024*1024*seconds*3) );
-
cmsDeleteTransform(hlcmsxform);
- cmsCloseProfile(hlcmsProfileIn);
- cmsCloseProfile(hlcmsProfileOut);
+
}
static
void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut)
{
- int r, g, b, j;
+ cmsInt32Number r, g, b, j;
clock_t atime;
- cmsFloat64Number seconds, diff;
+ cmsFloat64Number diff;
cmsHTRANSFORM hlcmsxform;
Scanline_rgb2 *In;
cmsUInt32Number Mb;
-
- hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_8, hlcmsProfileOut, TYPE_CMYK_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Die("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_8,
+ hlcmsProfileOut, TYPE_CMYK_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE);
+ cmsCloseProfile(hlcmsProfileIn);
+ cmsCloseProfile(hlcmsProfileOut);
Mb = 256*256*256*sizeof(Scanline_rgb2);
@@ -6059,25 +6318,68 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF
j++;
}
-
- printf("%s...", Title);
+ TitlePerformance(Title);
atime = clock();
cmsDoTransform(hlcmsxform, In, In, 256*256*256);
diff = clock() - atime;
- seconds = (cmsFloat64Number) diff / CLOCKS_PER_SEC;
+
free(In);
-
- printf("done.\n[%d tics, %g sec, %g Mpixels/sec.]\n", (int) diff, seconds, Mb / (1024*1024*seconds*4) );
+ PrintPerformance(Mb, sizeof(Scanline_rgb2), diff);
+
cmsDeleteTransform(hlcmsxform);
+
+}
+
+
+static
+void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent)
+{
+ cmsInt32Number r, g, b, j;
+ clock_t atime;
+ cmsFloat64Number diff;
+ cmsHTRANSFORM hlcmsxform;
+ cmsUInt8Number *In;
+ cmsUInt32Number Mb;
+
+
+ if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL)
+ Die("Unable to open profiles");
+
+ hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn,
+ TYPE_GRAY_8, hlcmsProfileOut, TYPE_GRAY_8, Intent, cmsFLAGS_NOCACHE);
cmsCloseProfile(hlcmsProfileIn);
cmsCloseProfile(hlcmsProfileOut);
-}
-
+ Mb = 256*256*256;
+
+ In = (cmsUInt8Number*) malloc(Mb);
+
+ j = 0;
+ for (r=0; r < 256; r++)
+ for (g=0; g < 256; g++)
+ for (b=0; b < 256; b++) {
+
+ In[j] = (cmsUInt8Number) r;
+
+ j++;
+ }
+
+ TitlePerformance(Title);
+
+ atime = clock();
+
+ cmsDoTransform(hlcmsxform, In, In, 256*256*256);
+
+ diff = clock() - atime;
+ free(In);
+
+ PrintPerformance(Mb, sizeof(cmsUInt8Number), diff);
+ cmsDeleteTransform(hlcmsxform);
+}
static
@@ -6100,51 +6402,79 @@ static
void SpeedTest(void)
{
+ printf("\n\nP E R F O R M A N C E T E S T S\n");
+ printf( "=================================\n\n");
+ fflush(stdout);
+
SpeedTest16bits("16 bits on CLUT profiles",
- cmsOpenProfileFromFileTHR(DbgThread(), "sRGB_Color_Space_Profile.icm", "r"),
- cmsOpenProfileFromFileTHR(DbgThread(), "sRGBSpac.icm", "r"));
+ cmsOpenProfileFromFile("sRGB_Color_Space_Profile.icm", "r"),
+ cmsOpenProfileFromFile("sRGBSpac.icm", "r"), INTENT_PERCEPTUAL);
SpeedTest8bits("8 bits on CLUT profiles",
- cmsOpenProfileFromFileTHR(DbgThread(), "sRGB_Color_Space_Profile.icm", "r"),
- cmsOpenProfileFromFileTHR(DbgThread(), "sRGBSpac.icm", "r"),
- INTENT_PERCEPTUAL);
+ cmsOpenProfileFromFile("sRGB_Color_Space_Profile.icm", "r"),
+ cmsOpenProfileFromFile("sRGBSpac.icm", "r"),
+ INTENT_PERCEPTUAL);
SpeedTest8bits("8 bits on Matrix-Shaper profiles",
- cmsCreate_sRGBProfile(),
- Create_AboveRGB(),
- INTENT_PERCEPTUAL);
+ cmsOpenProfileFromFile("sRGB_Color_Space_Profile.icm", "r"),
+ cmsOpenProfileFromFile("aRGBlcms2.icc", "r"),
+ INTENT_PERCEPTUAL);
SpeedTest8bits("8 bits on SAME Matrix-Shaper profiles",
- cmsCreate_sRGBProfile(),
- cmsCreate_sRGBProfile(),
- INTENT_PERCEPTUAL);
+ cmsOpenProfileFromFile("sRGB_Color_Space_Profile.icm", "r"),
+ cmsOpenProfileFromFile("sRGB_Color_Space_Profile.icm", "r"),
+ INTENT_PERCEPTUAL);
+
+ SpeedTest8bits("8 bits on Matrix-Shaper profiles (AbsCol)",
+ cmsOpenProfileFromFile("sRGB_Color_Space_Profile.icm", "r"),
+ cmsOpenProfileFromFile("aRGBlcms2.icc", "r"),
+ INTENT_ABSOLUTE_COLORIMETRIC);
+
+ SpeedTest16bits("16 bits on Matrix-Shaper profiles",
+ cmsOpenProfileFromFile("sRGB_Color_Space_Profile.icm", "r"),
+ cmsOpenProfileFromFile("aRGBlcms2.icc", "r"),
+ INTENT_PERCEPTUAL);
+
+ SpeedTest16bits("16 bits on SAME Matrix-Shaper profiles",
+ cmsOpenProfileFromFile("aRGBlcms2.icc", "r"),
+ cmsOpenProfileFromFile("aRGBlcms2.icc", "r"),
+ INTENT_PERCEPTUAL);
+
+ SpeedTest16bits("16 bits on Matrix-Shaper profiles (AbsCol)",
+ cmsOpenProfileFromFile("sRGB_Color_Space_Profile.icm", "r"),
+ cmsOpenProfileFromFile("aRGBlcms2.icc", "r"),
+ INTENT_ABSOLUTE_COLORIMETRIC);
SpeedTest8bits("8 bits on curves",
CreateCurves(),
CreateCurves(),
- INTENT_PERCEPTUAL);
-
-
- SpeedTest8bits("8 bits on Matrix-Shaper profiles (AbsCol)",
- cmsCreate_sRGBProfile(),
- Create_AboveRGB(),
- INTENT_ABSOLUTE_COLORIMETRIC);
+ INTENT_PERCEPTUAL);
SpeedTest16bits("16 bits on curves",
CreateCurves(),
- CreateCurves());
+ CreateCurves(),
+ INTENT_PERCEPTUAL);
SpeedTest8bitsCMYK("8 bits on CMYK profiles",
- cmsOpenProfileFromFileTHR(DbgThread(), "USWebCoatedSWOP.icc", "r"),
- cmsOpenProfileFromFileTHR(DbgThread(), "UncoatedFOGRA29.icc", "r"));
+ cmsOpenProfileFromFile("USWebCoatedSWOP.icc", "r"),
+ cmsOpenProfileFromFile("UncoatedFOGRA29.icc", "r"));
SpeedTest16bitsCMYK("16 bits on CMYK profiles",
- cmsOpenProfileFromFileTHR(DbgThread(), "USWebCoatedSWOP.icc", "r"),
- cmsOpenProfileFromFileTHR(DbgThread(), "UncoatedFOGRA29.icc", "r"));
+ cmsOpenProfileFromFile("USWebCoatedSWOP.icc", "r"),
+ cmsOpenProfileFromFile("UncoatedFOGRA29.icc", "r"));
+ SpeedTest8bitsGray("8 bits on gray-to-gray",
+ cmsOpenProfileFromFile("graylcms2.icc", "r"),
+ cmsOpenProfileFromFile("glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC);
+
+ SpeedTest8bitsGray("8 bits on SAME gray-to-gray",
+ cmsOpenProfileFromFile("graylcms2.icc", "r"),
+ cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_PERCEPTUAL);
}
+// -----------------------------------------------------------------------------------------------------
+
// Print the supported intents
static
@@ -6177,7 +6507,7 @@ static char ZOORawWrite[cmsMAX_PATH] = "c:\\colormaps\\rawwrite\\";
static
void ReadAllTags(cmsHPROFILE h)
{
- int i, n;
+ cmsInt32Number i, n;
cmsTagSignature sig;
n = cmsGetTagCount(h);
@@ -6193,9 +6523,9 @@ void ReadAllTags(cmsHPROFILE h)
static
void ReadAllRAWTags(cmsHPROFILE h)
{
- int i, n;
+ cmsInt32Number i, n;
cmsTagSignature sig;
- int len;
+ cmsInt32Number len;
n = cmsGetTagCount(h);
for (i=0; i < n; i++) {
@@ -6210,7 +6540,7 @@ static
void PrintInfo(cmsHPROFILE h, cmsInfoType Info)
{
wchar_t* text;
- int len;
+ cmsInt32Number len;
cmsContext id = DbgThread();
len = cmsGetProfileInfo(h, Info, "en", "US", NULL, 0);
@@ -6283,13 +6613,13 @@ void ReadAllLUTS(cmsHPROFILE h)
cmsDetectBlackPoint(&Black, h, INTENT_RELATIVE_COLORIMETRIC, 0);
cmsDetectBlackPoint(&Black, h, INTENT_SATURATION, 0);
cmsDetectBlackPoint(&Black, h, INTENT_ABSOLUTE_COLORIMETRIC, 0);
- cmsDetectTAC(h);
+ cmsDetectTAC(h);
}
// Check one specimen in the ZOO
static
-int CheckSingleSpecimen(const char* Profile)
+cmsInt32Number CheckSingleSpecimen(const char* Profile)
{
char BuffSrc[256];
char BuffDst[256];
@@ -6321,7 +6651,7 @@ int CheckSingleSpecimen(const char* Profile)
}
static
-int CheckRAWSpecimen(const char* Profile)
+cmsInt32Number CheckRAWSpecimen(const char* Profile)
{
char BuffSrc[256];
char BuffDst[256];
@@ -6354,222 +6684,45 @@ void CheckProfileZOO(void)
struct _finddata_t c_file;
long hFile;
- cmsSetLogErrorHandler(NULL);
+ cmsSetLogErrorHandler(NULL);
- if ( (hFile = _findfirst("c:\\colormaps\\*.*", &c_file)) == -1L )
+ if ( (hFile = _findfirst("c:\\colormaps\\*.*", &c_file)) == -1L )
printf("No files in current directory");
else
{
do
{
-
+
printf("%s\n", c_file.name);
if (strcmp(c_file.name, ".") != 0 &&
strcmp(c_file.name, "..") != 0) {
- CheckSingleSpecimen( c_file.name);
- CheckRAWSpecimen( c_file.name);
+ CheckSingleSpecimen( c_file.name);
+ CheckRAWSpecimen( c_file.name);
- if (TotalMemory > 0)
- printf("Ok, but %s are left!\n", MemStr(TotalMemory));
- else
- printf("Ok.\n");
+ if (TotalMemory > 0)
+ printf("Ok, but %s are left!\n", MemStr(TotalMemory));
+ else
+ printf("Ok.\n");
}
} while ( _findnext(hFile, &c_file) == 0 );
-
+
_findclose(hFile);
}
- cmsSetLogErrorHandler(FatalErrorQuit);
+ cmsSetLogErrorHandler(FatalErrorQuit);
}
#endif
// ---------------------------------------------------------------------------------------
-// cmsBool cmsGBDdumpVRML(cmsHANDLE hGBD, const char* fname);
-
-// Gamut descriptor routines
-static
-int CheckGBD(void)
-{
- cmsCIELab Lab;
- cmsHANDLE h;
- int L, a, b;
- cmsUInt32Number r1, g1, b1;
- cmsHPROFILE hLab, hsRGB;
- cmsHTRANSFORM xform;
-
- h = cmsGBDAlloc(DbgThread());
- if (h == NULL) return 0;
-
- // Fill all Lab gamut as valid
- SubTest("Filling RAW gamut");
-
- for (L=0; L <= 100; L += 10)
- for (a = -128; a <= 128; a += 5)
- for (b = -128; b <= 128; b += 5) {
-
- Lab.L = L;
- Lab.a = a;
- Lab.b = b;
- if (!cmsGDBAddPoint(h, &Lab)) return 0;
- }
-
- // Complete boundaries
- SubTest("computing Lab gamut");
- if (!cmsGDBCompute(h, 0)) return 0;
-
-
- // All points should be inside gamut
- SubTest("checking Lab gamut");
- for (L=10; L <= 90; L += 25)
- for (a = -120; a <= 120; a += 25)
- for (b = -120; b <= 120; b += 25) {
-
- Lab.L = L;
- Lab.a = a;
- Lab.b = b;
- if (!cmsGDBCheckPoint(h, &Lab)) {
- return 0;
- }
- }
- cmsGBDFree(h);
-
-
- // Now for sRGB
- SubTest("checking sRGB gamut");
- h = cmsGBDAlloc(DbgThread());
- hsRGB = cmsCreate_sRGBProfile();
- hLab = cmsCreateLab4Profile(NULL);
-
- xform = cmsCreateTransform(hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE);
- cmsCloseProfile(hsRGB); cmsCloseProfile(hLab);
-
-
- for (r1=0; r1 < 256; r1 += 5) {
- for (g1=0; g1 < 256; g1 += 5)
- for (b1=0; b1 < 256; b1 += 5) {
-
- cmsCIELab Lab;
- cmsUInt8Number rgb[3];
-
- rgb[0] = r1;
- rgb[1] = g1;
- rgb[2] = b1;
-
- cmsDoTransform(xform, rgb, &Lab, 1);
-
- // if (fabs(Lab.b) < 20 && Lab.a > 0) continue;
-
- if (!cmsGDBAddPoint(h, &Lab)) {
- cmsGBDFree(h);
- return 0;
- }
-
-
- }
- }
-
-
- if (!cmsGDBCompute(h, 0)) return 0;
- // cmsGBDdumpVRML(h, "c:\\colormaps\\lab.wrl");
-
- for (r1=10; r1 < 200; r1 += 10) {
- for (g1=10; g1 < 200; g1 += 10)
- for (b1=10; b1 < 200; b1 += 10) {
-
- cmsCIELab Lab;
- cmsUInt8Number rgb[3];
-
- rgb[0] = r1;
- rgb[1] = g1;
- rgb[2] = b1;
-
- cmsDoTransform(xform, rgb, &Lab, 1);
- if (!cmsGDBCheckPoint(h, &Lab)) {
-
- cmsDeleteTransform(xform);
- cmsGBDFree(h);
- return 0;
- }
- }
- }
-
-
- cmsDeleteTransform(xform);
- cmsGBDFree(h);
-
- SubTest("checking LCh chroma ring");
- h = cmsGBDAlloc(DbgThread());
-
-
- for (r1=0; r1 < 360; r1++) {
-
- cmsCIELCh LCh;
-
- LCh.L = 70;
- LCh.C = 60;
- LCh.h = r1;
-
- cmsLCh2Lab(&Lab, &LCh);
- if (!cmsGDBAddPoint(h, &Lab)) {
- cmsGBDFree(h);
- return 0;
- }
- }
-
-
- if (!cmsGDBCompute(h, 0)) return 0;
-
- cmsGBDFree(h);
-
- return 1;
-}
-
-
-static
-void CheckCode()
-{
- cmsHTRANSFORM Proof1_CMYK_from_XYZ_TRANSFORM, Proof2_CMYK_from_XYZ_TRANSFORM;
- cmsHPROFILE Input_XYZ_PROFILE;
- cmsHPROFILE Output_CMYK_PROFILE;
- int Intent = INTENT_PERCEPTUAL;
- cmsHPROFILE PROFILE_ary[3];
- cmsFloat64Number Limit = 250;
-
-
- Input_XYZ_PROFILE = cmsCreateXYZProfile();
- Output_CMYK_PROFILE = cmsOpenProfileFromFile("USWebCoatedSWOP.icc", "r");
-
-
- Proof1_CMYK_from_XYZ_TRANSFORM = cmsCreateProofingTransform(
- Input_XYZ_PROFILE, TYPE_XYZ_16,
- Output_CMYK_PROFILE, TYPE_CMYK_16,
- cmsCreateXYZProfile(),
- Intent,
- INTENT_ABSOLUTE_COLORIMETRIC, 0);
-
-
-
-
-
- PROFILE_ary[0] = cmsTransform2DeviceLink ( Proof1_CMYK_from_XYZ_TRANSFORM, 3.4, 0);
- PROFILE_ary[1] = cmsCreateInkLimitingDeviceLink( cmsSigCmykData, Limit);
-
- // Generate proof transform with InkLimit.
- Proof2_CMYK_from_XYZ_TRANSFORM = cmsCreateMultiprofileTransform(
- PROFILE_ary, 2, TYPE_XYZ_16, TYPE_CMYK_16, Intent, 0);
-
-}
-
-
int main(int argc, char* argv[])
{
- int Exhaustive = 0;
- int DoSpeedTests = 1;
+ cmsInt32Number Exhaustive = 0;
+ cmsInt32Number DoSpeedTests = 1;
#ifdef _MSC_VER
@@ -6584,24 +6737,24 @@ int main(int argc, char* argv[])
printf("Running exhaustive tests (will take a while...)\n\n");
}
-
+
printf("Installing debug memory plug-in ... ");
cmsPlugin(&DebugMemHandler);
printf("done.\n");
printf("Installing error logger ... ");
- cmsSetLogErrorHandler(FatalErrorQuit);
- printf("done.\n");
+ cmsSetLogErrorHandler(FatalErrorQuit);
+ printf("done.\n");
#ifdef _CMS_IS_WINDOWS
// CheckProfileZOO();
#endif
- // CheckCode();
-
PrintSupportedIntents();
- // Create utility profiles
+ CheckRGBPrimaries();
+
+ // Create utility profiles
Check("Creation of test profiles", CreateTestProfiles);
Check("Base types", CheckBaseTypes);
@@ -6645,17 +6798,17 @@ int main(int argc, char* argv[])
Check("Reverse interpolation 3 -> 3", CheckReverseInterpolation3x3);
Check("Reverse interpolation 4 -> 3", CheckReverseInterpolation4x3);
- // Encoding of colorspaces
+ // Encoding of colorspaces
Check("Lab to LCh and back (float only) ", CheckLab2LCh);
Check("Lab to XYZ and back (float only) ", CheckLab2XYZ);
- Check("Lab to xyY and back (float only) ", CheckLab2xyY);
+ Check("Lab to xyY and back (float only) ", CheckLab2xyY);
Check("Lab V2 encoding", CheckLabV2encoding);
Check("Lab V4 encoding", CheckLabV4encoding);
- // BlackBody
+ // BlackBody
Check("Blackbody radiator", CheckTemp2CHRM);
- // Tone curves
+ // Tone curves
Check("Linear gamma curves (16 bits)", CheckGammaCreation16);
Check("Linear gamma curves (float)", CheckGammaCreationFlt);
@@ -6667,7 +6820,7 @@ int main(int argc, char* argv[])
Check("Curve 2.2 (table)", CheckGamma22Table);
Check("Curve 3.0 (table)", CheckGamma30Table);
- Check("Curve 1.8 (word table)", CheckGamma18TableWord);
+ Check("Curve 1.8 (word table)", CheckGamma18TableWord);
Check("Curve 2.2 (word table)", CheckGamma22TableWord);
Check("Curve 3.0 (word table)", CheckGamma30TableWord);
@@ -6680,7 +6833,7 @@ int main(int argc, char* argv[])
Check("Join curves sRGB (16 bits)", CheckJoint16Curves_sRGB);
Check("Join curves sigmoidal", CheckJointCurvesSShaped);
- // LUT basics
+ // LUT basics
Check("LUT creation & dup", CheckLUTcreation);
Check("1 Stage LUT ", Check1StageLUT);
Check("2 Stage LUT ", Check2StageLUT);
@@ -6705,14 +6858,14 @@ int main(int argc, char* argv[])
// MLU
Check("Multilocalized Unicode", CheckMLU);
- // Named color
- Check("Named color lists", CheckNamedColorList);
+ // Named color
+ Check("Named color lists", CheckNamedColorList);
- // Profile I/O (this one is huge!)
+ // Profile I/O (this one is huge!)
Check("Profile creation", CheckProfileCreation);
-
- // Error reporting
+
+ // Error reporting
Check("Error reporting on bad profiles", CheckErrReportingOnBadProfiles);
// Transforms
@@ -6726,10 +6879,13 @@ int main(int argc, char* argv[])
Check("Matrix-shaper transform (8 bits)", CheckMatrixShaperXFORM8);
- // Known values
+ Check("Primaries of sRGB", CheckRGBPrimaries);
+ // Known values
Check("Known values across matrix-shaper", Chack_sRGB_Float);
Check("Gray input profile", CheckInputGray);
- Check("Gray lab input profile", CheckLabInputGray);
+ Check("Gray Lab input profile", CheckLabInputGray);
+ Check("Gray output profile", CheckOutputGray);
+ Check("Gray Lab output profile", CheckLabOutputGray);
Check("Matrix-shaper proofing transform (float)", CheckProofingXFORMFloat);
Check("Matrix-shaper proofing transform (16 bits)", CheckProofingXFORM16);
@@ -6754,15 +6910,16 @@ int main(int argc, char* argv[])
Check("PostScript generator", CheckPostScript);
Check("Segment maxima GBD", CheckGBD);
- if (DoSpeedTests)
- SpeedTest();
+ if (DoSpeedTests)
+ SpeedTest();
+
DebugMemPrintTotals();
- cmsUnregisterPlugins();
+ cmsUnregisterPlugins();
// Cleanup
- RemoveTestProfiles();
+ RemoveTestProfiles();
return TotalFail;
}