diff options
Diffstat (limited to 'lcms2mt/testbed/testcms2.c')
-rw-r--r-- | lcms2mt/testbed/testcms2.c | 3981 |
1 files changed, 1987 insertions, 1994 deletions
diff --git a/lcms2mt/testbed/testcms2.c b/lcms2mt/testbed/testcms2.c index 025c79ab..f633f565 100644 --- a/lcms2mt/testbed/testcms2.c +++ b/lcms2mt/testbed/testcms2.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -27,14 +27,8 @@ #include "testcms2.h" -// On Visual Studio, use debug CRT -#ifdef _MSC_VER -# include "crtdbg.h" -# include <io.h> -#endif - // A single check. Returns 1 if success, 0 if failed -typedef cmsInt32Number (*TestFn)(void); +typedef cmsInt32Number (*TestFn)(cmsContext); // A parametric Tone curve test function typedef cmsFloat32Number (* dblfnptr)(cmsFloat32Number x, const cmsFloat64Number Params[]); @@ -101,7 +95,7 @@ cmsContext DbgThread(void) { static cmsUInt32Number n = 1; - return (cmsContext) (void*)(n++ % 0xff0); + return (cmsContext) (void*) ((cmsUInt8Number*) NULL + (n++ % 0xff0)); } // The allocate routine @@ -220,7 +214,7 @@ void TestMemoryLeaks(cmsBool ok) } // Here we go with the plug-in declaration -static cmsPluginMemHandler DebugMemHandler = {{ cmsPluginMagicNumber, 2060, cmsPluginMemHandlerSig, NULL }, +static cmsPluginMemHandler DebugMemHandler = {{ cmsPluginMagicNumber, 2060-2000, cmsPluginMemHandlerSig, NULL }, DebugMalloc, DebugFree, DebugRealloc, NULL, NULL, NULL }; // Returns a pointer to the memhandler plugin @@ -296,8 +290,10 @@ void SubTest(const char* frm, ...) // The check framework static -void Check(const char* Title, TestFn Fn) +void Check(cmsContext ContextID, const char* Title, TestFn Fn) { + cmsContext ctx = DbgThread(); + printf("Checking %s ...", Title); fflush(stdout); @@ -307,7 +303,7 @@ void Check(const char* Title, TestFn Fn) SimultaneousErrors = 0; TotalTests++; - if (Fn() && !TrappedError) { + if (Fn(ctx) && !TrappedError) { // It is a good place to check memory TestMemoryLeaks(TRUE); @@ -330,30 +326,30 @@ void Check(const char* Title, TestFn Fn) } // Dump a tone curve, for easy diagnostic -void DumpToneCurve(cmsToneCurve* gamma, const char* FileName) +void DumpToneCurve(cmsContext ContextID, cmsToneCurve* gamma, const char* FileName) { cmsHANDLE hIT8; cmsUInt32Number i; - hIT8 = cmsIT8Alloc(DbgThread()); + hIT8 = cmsIT8Alloc(ContextID); - cmsIT8SetPropertyDbl(DbgThread(), hIT8, "NUMBER_OF_FIELDS", 2); - cmsIT8SetPropertyDbl(DbgThread(), hIT8, "NUMBER_OF_SETS", gamma ->nEntries); + cmsIT8SetPropertyDbl(ContextID, hIT8, "NUMBER_OF_FIELDS", 2); + cmsIT8SetPropertyDbl(ContextID, hIT8, "NUMBER_OF_SETS", gamma ->nEntries); - cmsIT8SetDataFormat(DbgThread(), hIT8, 0, "SAMPLE_ID"); - cmsIT8SetDataFormat(DbgThread(), hIT8, 1, "VALUE"); + cmsIT8SetDataFormat(ContextID, hIT8, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(ContextID, hIT8, 1, "VALUE"); for (i=0; i < gamma ->nEntries; i++) { char Val[30]; sprintf(Val, "%u", i); - cmsIT8SetDataRowCol(DbgThread(), hIT8, i, 0, Val); + cmsIT8SetDataRowCol(ContextID, hIT8, i, 0, Val); sprintf(Val, "0x%x", gamma ->Table16[i]); - cmsIT8SetDataRowCol(DbgThread(), hIT8, i, 1, Val); + cmsIT8SetDataRowCol(ContextID, hIT8, i, 1, Val); } - cmsIT8SaveToFile(DbgThread(), hIT8, FileName); - cmsIT8Free(DbgThread(), hIT8); + cmsIT8SaveToFile(ContextID, hIT8, FileName); + cmsIT8Free(ContextID, hIT8); } // ------------------------------------------------------------------------------------------------- @@ -363,7 +359,7 @@ void DumpToneCurve(cmsToneCurve* gamma, const char* FileName) // The space used is a clone of a well-known commercial // color space which I will name "Above RGB" static -cmsHPROFILE Create_AboveRGB(void) +cmsHPROFILE Create_AboveRGB(cmsContext ctx) { cmsToneCurve* Curve[3]; cmsHPROFILE hProfile; @@ -372,65 +368,65 @@ cmsHPROFILE Create_AboveRGB(void) {0.21, 0.71, 1 }, {0.15, 0.06, 1 }}; - Curve[0] = Curve[1] = Curve[2] = cmsBuildGamma(DbgThread(), 2.19921875); + Curve[0] = Curve[1] = Curve[2] = cmsBuildGamma(ctx, 2.19921875); - cmsWhitePointFromTemp(DbgThread(), &D65, 6504); - hProfile = cmsCreateRGBProfile(DbgThread(), &D65, &Primaries, Curve); - cmsFreeToneCurve(DbgThread(), Curve[0]); + cmsWhitePointFromTemp(ctx, &D65, 6504); + hProfile = cmsCreateRGBProfile(ctx, &D65, &Primaries, Curve); + cmsFreeToneCurve(ctx, Curve[0]); return hProfile; } // A gamma-2.2 gray space static -cmsHPROFILE Create_Gray22(void) +cmsHPROFILE Create_Gray22(cmsContext ctx) { cmsHPROFILE hProfile; - cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 2.2); + cmsToneCurve* Curve = cmsBuildGamma(ctx, 2.2); if (Curve == NULL) return NULL; - hProfile = cmsCreateGrayProfile(DbgThread(), cmsD50_xyY(DbgThread()), Curve); - cmsFreeToneCurve(DbgThread(), Curve); + hProfile = cmsCreateGrayProfile(ctx, cmsD50_xyY(ctx), Curve); + cmsFreeToneCurve(ctx, Curve); return hProfile; } // A gamma-3.0 gray space static -cmsHPROFILE Create_Gray30(void) +cmsHPROFILE Create_Gray30(cmsContext ctx) { cmsHPROFILE hProfile; - cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0); + cmsToneCurve* Curve = cmsBuildGamma(ctx, 3.0); if (Curve == NULL) return NULL; - hProfile = cmsCreateGrayProfile(DbgThread(), cmsD50_xyY(DbgThread()), Curve); - cmsFreeToneCurve(DbgThread(), Curve); + hProfile = cmsCreateGrayProfile(ctx, cmsD50_xyY(ctx), Curve); + cmsFreeToneCurve(ctx, Curve); return hProfile; } static -cmsHPROFILE Create_GrayLab(void) +cmsHPROFILE Create_GrayLab(cmsContext ctx) { cmsHPROFILE hProfile; - cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 1.0); + cmsToneCurve* Curve = cmsBuildGamma(ctx, 1.0); if (Curve == NULL) return NULL; - hProfile = cmsCreateGrayProfile(DbgThread(), cmsD50_xyY(DbgThread()), Curve); - cmsFreeToneCurve(DbgThread(), Curve); + hProfile = cmsCreateGrayProfile(ctx, cmsD50_xyY(ctx), Curve); + cmsFreeToneCurve(ctx, Curve); - cmsSetPCS(DbgThread(), hProfile, cmsSigLabData); + cmsSetPCS(ctx, hProfile, cmsSigLabData); return hProfile; } // A CMYK devicelink that adds gamma 3.0 to each channel static -cmsHPROFILE Create_CMYK_DeviceLink(void) +cmsHPROFILE Create_CMYK_DeviceLink(cmsContext ctx) { cmsHPROFILE hProfile; cmsToneCurve* Tab[4]; - cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0); + cmsToneCurve* Curve = cmsBuildGamma(ctx, 3.0); if (Curve == NULL) return NULL; Tab[0] = Curve; @@ -438,10 +434,10 @@ cmsHPROFILE Create_CMYK_DeviceLink(void) Tab[2] = Curve; Tab[3] = Curve; - hProfile = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigCmykData, Tab); + hProfile = cmsCreateLinearizationDeviceLink(ctx, cmsSigCmykData, Tab); if (hProfile == NULL) return NULL; - cmsFreeToneCurve(DbgThread(), Curve); + cmsFreeToneCurve(ctx, Curve); return hProfile; } @@ -473,7 +469,7 @@ cmsInt32Number ForwardSampler(cmsContext ContextID, register const cmsUInt16Numb cmsFloat64Number rgb[3], cmyk[4]; cmsFloat64Number c, m, y, k; - cmsDoTransform(DbgThread(), p ->hLab2sRGB, In, rgb, 1); + cmsDoTransform(ContextID, p ->hLab2sRGB, In, rgb, 1); c = 1 - rgb[0]; m = 1 - rgb[1]; @@ -490,7 +486,7 @@ cmsInt32Number ForwardSampler(cmsContext ContextID, register const cmsUInt16Numb cmyk[2] = y; cmyk[3] = k; - cmsDoTransform(DbgThread(), p ->hIlimit, cmyk, Out, 1); + cmsDoTransform(ContextID, p ->hIlimit, cmyk, Out, 1); return 1; } @@ -525,27 +521,24 @@ cmsInt32Number ReverseSampler(cmsContext ContextID, register const cmsUInt16Numb rgb[2] = Clip((1 - y) * (1 - k)); } - cmsDoTransform(DbgThread(), p ->sRGB2Lab, rgb, Out, 1); + cmsDoTransform(ContextID, p ->sRGB2Lab, rgb, Out, 1); return 1; } static -cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB) +cmsHPROFILE CreateFakeCMYK(cmsContext ContextID, cmsFloat64Number InkLimit, cmsBool lUseAboveRGB) { cmsHPROFILE hICC; cmsPipeline* AToB0, *BToA0; cmsStage* CLUT; - cmsContext ContextID; FakeCMYKParams p; cmsHPROFILE hLab, hsRGB, hLimit; cmsUInt32Number cmykfrm; - ContextID = DbgThread(); - if (lUseAboveRGB) - hsRGB = Create_AboveRGB(); + hsRGB = Create_AboveRGB(ContextID); else hsRGB = cmsCreate_sRGBProfile(ContextID); @@ -610,18 +603,18 @@ cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB) // Does create several profiles for latter use------------------------------------------------------------------------------------------------ static -cmsInt32Number OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* FileName) +cmsInt32Number OneVirtual(cmsContext ctx, cmsHPROFILE h, const char* SubTestTxt, const char* FileName) { SubTest(SubTestTxt); if (h == NULL) return 0; - if (!cmsSaveProfileToFile(DbgThread(), h, FileName)) return 0; - cmsCloseProfile(DbgThread(), h); + if (!cmsSaveProfileToFile(ctx, h, FileName)) return 0; + cmsCloseProfile(ctx, h); - h = cmsOpenProfileFromFile(DbgThread(), FileName, "r"); + h = cmsOpenProfileFromFile(ctx, FileName, "r"); if (h == NULL) return 0; - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ctx, h); return 1; } @@ -630,77 +623,77 @@ cmsInt32Number OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* Fil // 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 -cmsInt32Number CreateTestProfiles(void) +cmsInt32Number CreateTestProfiles(cmsContext ctx) { cmsHPROFILE h; - h = cmsCreate_sRGBProfile(DbgThread()); - if (!OneVirtual(h, "sRGB profile", "sRGBlcms2.icc")) return 0; + h = cmsCreate_sRGBProfile(ctx); + if (!OneVirtual(ctx, h, "sRGB profile", "sRGBlcms2.icc")) return 0; // ---- - h = Create_AboveRGB(); - if (!OneVirtual(h, "aRGB profile", "aRGBlcms2.icc")) return 0; + h = Create_AboveRGB(ctx); + if (!OneVirtual(ctx, h, "aRGB profile", "aRGBlcms2.icc")) return 0; // ---- - h = Create_Gray22(); - if (!OneVirtual(h, "Gray profile", "graylcms2.icc")) return 0; + h = Create_Gray22(ctx); + if (!OneVirtual(ctx, h, "Gray profile", "graylcms2.icc")) return 0; // ---- - h = Create_Gray30(); - if (!OneVirtual(h, "Gray 3.0 profile", "gray3lcms2.icc")) return 0; + h = Create_Gray30(ctx); + if (!OneVirtual(ctx, h, "Gray 3.0 profile", "gray3lcms2.icc")) return 0; // ---- - h = Create_GrayLab(); - if (!OneVirtual(h, "Gray Lab profile", "glablcms2.icc")) return 0; + h = Create_GrayLab(ctx); + if (!OneVirtual(ctx, h, "Gray Lab profile", "glablcms2.icc")) return 0; // ---- - h = Create_CMYK_DeviceLink(); - if (!OneVirtual(h, "Linearization profile", "linlcms2.icc")) return 0; + h = Create_CMYK_DeviceLink(ctx); + if (!OneVirtual(ctx, h, "Linearization profile", "linlcms2.icc")) return 0; // ------- - h = cmsCreateInkLimitingDeviceLink(DbgThread(), cmsSigCmykData, 150); + h = cmsCreateInkLimitingDeviceLink(ctx, cmsSigCmykData, 150); if (h == NULL) return 0; - if (!OneVirtual(h, "Ink-limiting profile", "limitlcms2.icc")) return 0; + if (!OneVirtual(ctx, h, "Ink-limiting profile", "limitlcms2.icc")) return 0; // ------ - h = cmsCreateLab2Profile(DbgThread(), NULL); - if (!OneVirtual(h, "Lab 2 identity profile", "labv2lcms2.icc")) return 0; + h = cmsCreateLab2Profile(ctx, NULL); + if (!OneVirtual(ctx, h, "Lab 2 identity profile", "labv2lcms2.icc")) return 0; // ---- - h = cmsCreateLab4Profile(DbgThread(), NULL); - if (!OneVirtual(h, "Lab 4 identity profile", "labv4lcms2.icc")) return 0; + h = cmsCreateLab4Profile(ctx, NULL); + if (!OneVirtual(ctx, h, "Lab 4 identity profile", "labv4lcms2.icc")) return 0; // ---- - h = cmsCreateXYZProfile(DbgThread()); - if (!OneVirtual(h, "XYZ identity profile", "xyzlcms2.icc")) return 0; + h = cmsCreateXYZProfile(ctx); + if (!OneVirtual(ctx, h, "XYZ identity profile", "xyzlcms2.icc")) return 0; // ---- - h = cmsCreateNULLProfile(DbgThread()); - if (!OneVirtual(h, "NULL profile", "nullcms2.icc")) return 0; + h = cmsCreateNULLProfile(ctx); + if (!OneVirtual(ctx, h, "NULL profile", "nullcms2.icc")) return 0; // --- - h = cmsCreateBCHSWabstractProfile(DbgThread(), 17, 0, 0, 0, 0, 5000, 6000); - if (!OneVirtual(h, "BCHS profile", "bchslcms2.icc")) return 0; + h = cmsCreateBCHSWabstractProfile(ctx, 17, 0, 0, 0, 0, 5000, 6000); + if (!OneVirtual(ctx, h, "BCHS profile", "bchslcms2.icc")) return 0; // --- - h = CreateFakeCMYK(300, FALSE); - if (!OneVirtual(h, "Fake CMYK profile", "lcms2cmyk.icc")) return 0; + h = CreateFakeCMYK(ctx, 300, FALSE); + if (!OneVirtual(ctx, h, "Fake CMYK profile", "lcms2cmyk.icc")) return 0; // --- - h = cmsCreateBCHSWabstractProfile(DbgThread(), 17, 0, 1.2, 0, 3, 5000, 5000); - if (!OneVirtual(h, "Brightness", "brightness.icc")) return 0; + h = cmsCreateBCHSWabstractProfile(ctx, 17, 0, 1.2, 0, 3, 5000, 5000); + if (!OneVirtual(ctx, h, "Brightness", "brightness.icc")) return 0; return 1; } @@ -729,7 +722,7 @@ void RemoveTestProfiles(void) // Check the size of basic types. If this test fails, nothing is going to work anyway static -cmsInt32Number CheckBaseTypes(void) +cmsInt32Number CheckBaseTypes(cmsContext ContextID) { // Ignore warnings about conditional expression #ifdef _MSC_VER @@ -759,7 +752,7 @@ cmsInt32Number CheckBaseTypes(void) // Are we little or big endian? From Harbison&Steele. static -cmsInt32Number CheckEndianness(void) +cmsInt32Number CheckEndianness(cmsContext ContextID) { cmsInt32Number BigEndian, IsOk; union { @@ -787,7 +780,7 @@ cmsInt32Number CheckEndianness(void) // Check quick floor static -cmsInt32Number CheckQuickFloor(void) +cmsInt32Number CheckQuickFloor(cmsContext ContextID) { if ((_cmsQuickFloor(1.234) != 1) || (_cmsQuickFloor(32767.234) != 32767) || @@ -805,7 +798,7 @@ cmsInt32Number CheckQuickFloor(void) // Quick floor restricted to word static -cmsInt32Number CheckQuickFloorWord(void) +cmsInt32Number CheckQuickFloorWord(cmsContext ContextID) { cmsUInt32Number i; @@ -890,51 +883,51 @@ cmsBool IsGoodWordPrec(const char *title, cmsUInt16Number in, cmsUInt16Number o // Fixed point ---------------------------------------------------------------------------------------------- static -cmsInt32Number TestSingleFixed15_16(cmsFloat64Number d) +cmsInt32Number TestSingleFixed15_16(cmsContext ContextID, cmsFloat64Number d) { - cmsS15Fixed16Number f = _cmsDoubleTo15Fixed16(DbgThread(), d); - cmsFloat64Number RoundTrip = _cms15Fixed16toDouble(DbgThread(), f); + cmsS15Fixed16Number f = _cmsDoubleTo15Fixed16(ContextID, d); + cmsFloat64Number RoundTrip = _cms15Fixed16toDouble(ContextID, f); cmsFloat64Number Error = fabs(d - RoundTrip); return ( Error <= FIXED_PRECISION_15_16); } static -cmsInt32Number CheckFixedPoint15_16(void) +cmsInt32Number CheckFixedPoint15_16(cmsContext ContextID) { - if (!TestSingleFixed15_16(1.0)) return 0; - if (!TestSingleFixed15_16(2.0)) return 0; - if (!TestSingleFixed15_16(1.23456)) return 0; - if (!TestSingleFixed15_16(0.99999)) return 0; - if (!TestSingleFixed15_16(0.1234567890123456789099999)) return 0; - if (!TestSingleFixed15_16(-1.0)) return 0; - if (!TestSingleFixed15_16(-2.0)) return 0; - if (!TestSingleFixed15_16(-1.23456)) return 0; - if (!TestSingleFixed15_16(-1.1234567890123456789099999)) return 0; - if (!TestSingleFixed15_16(+32767.1234567890123456789099999)) return 0; - if (!TestSingleFixed15_16(-32767.1234567890123456789099999)) return 0; + if (!TestSingleFixed15_16(ContextID, 1.0)) return 0; + if (!TestSingleFixed15_16(ContextID, 2.0)) return 0; + if (!TestSingleFixed15_16(ContextID, 1.23456)) return 0; + if (!TestSingleFixed15_16(ContextID, 0.99999)) return 0; + if (!TestSingleFixed15_16(ContextID, 0.1234567890123456789099999)) return 0; + if (!TestSingleFixed15_16(ContextID, -1.0)) return 0; + if (!TestSingleFixed15_16(ContextID, -2.0)) return 0; + if (!TestSingleFixed15_16(ContextID, -1.23456)) return 0; + if (!TestSingleFixed15_16(ContextID, -1.1234567890123456789099999)) return 0; + if (!TestSingleFixed15_16(ContextID, +32767.1234567890123456789099999)) return 0; + if (!TestSingleFixed15_16(ContextID, -32767.1234567890123456789099999)) return 0; return 1; } static -cmsInt32Number TestSingleFixed8_8(cmsFloat64Number d) +cmsInt32Number TestSingleFixed8_8(cmsContext ContextID, cmsFloat64Number d) { - cmsS15Fixed16Number f = _cmsDoubleTo8Fixed8(DbgThread(), d); - cmsFloat64Number RoundTrip = _cms8Fixed8toDouble(DbgThread(), (cmsUInt16Number) f); + cmsS15Fixed16Number f = _cmsDoubleTo8Fixed8(ContextID, d); + cmsFloat64Number RoundTrip = _cms8Fixed8toDouble(ContextID, (cmsUInt16Number) f); cmsFloat64Number Error = fabs(d - RoundTrip); return ( Error <= FIXED_PRECISION_8_8); } static -cmsInt32Number CheckFixedPoint8_8(void) +cmsInt32Number CheckFixedPoint8_8(cmsContext ContextID) { - if (!TestSingleFixed8_8(1.0)) return 0; - if (!TestSingleFixed8_8(2.0)) return 0; - if (!TestSingleFixed8_8(1.23456)) return 0; - if (!TestSingleFixed8_8(0.99999)) return 0; - if (!TestSingleFixed8_8(0.1234567890123456789099999)) return 0; - if (!TestSingleFixed8_8(+255.1234567890123456789099999)) return 0; + if (!TestSingleFixed8_8(ContextID, 1.0)) return 0; + if (!TestSingleFixed8_8(ContextID, 2.0)) return 0; + if (!TestSingleFixed8_8(ContextID, 1.23456)) return 0; + if (!TestSingleFixed8_8(ContextID, 0.99999)) return 0; + if (!TestSingleFixed8_8(ContextID, 0.1234567890123456789099999)) return 0; + if (!TestSingleFixed8_8(ContextID, +255.1234567890123456789099999)) return 0; return 1; } @@ -942,19 +935,19 @@ cmsInt32Number CheckFixedPoint8_8(void) // D50 constant -------------------------------------------------------------------------------------------- static -cmsInt32Number CheckD50Roundtrip(void) +cmsInt32Number CheckD50Roundtrip(cmsContext ContextID) { cmsFloat64Number cmsD50X_2 = 0.96420288; cmsFloat64Number cmsD50Y_2 = 1.0; cmsFloat64Number cmsD50Z_2 = 0.82490540; - cmsS15Fixed16Number xe = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50X); - cmsS15Fixed16Number ye = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50Y); - cmsS15Fixed16Number ze = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50Z); + cmsS15Fixed16Number xe = _cmsDoubleTo15Fixed16(ContextID, cmsD50X); + cmsS15Fixed16Number ye = _cmsDoubleTo15Fixed16(ContextID, cmsD50Y); + cmsS15Fixed16Number ze = _cmsDoubleTo15Fixed16(ContextID, cmsD50Z); - cmsFloat64Number x = _cms15Fixed16toDouble(DbgThread(), xe); - cmsFloat64Number y = _cms15Fixed16toDouble(DbgThread(), ye); - cmsFloat64Number z = _cms15Fixed16toDouble(DbgThread(), ze); + cmsFloat64Number x = _cms15Fixed16toDouble(ContextID, xe); + cmsFloat64Number y = _cms15Fixed16toDouble(ContextID, ye); + cmsFloat64Number z = _cms15Fixed16toDouble(ContextID, ze); double dx = fabs(cmsD50X - x); double dy = fabs(cmsD50Y - y); @@ -968,13 +961,13 @@ cmsInt32Number CheckD50Roundtrip(void) return 0; } - xe = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50X_2); - ye = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50Y_2); - ze = _cmsDoubleTo15Fixed16(DbgThread(), cmsD50Z_2); + xe = _cmsDoubleTo15Fixed16(ContextID, cmsD50X_2); + ye = _cmsDoubleTo15Fixed16(ContextID, cmsD50Y_2); + ze = _cmsDoubleTo15Fixed16(ContextID, cmsD50Z_2); - x = _cms15Fixed16toDouble(DbgThread(), xe); - y = _cms15Fixed16toDouble(DbgThread(), ye); - z = _cms15Fixed16toDouble(DbgThread(), ze); + x = _cms15Fixed16toDouble(ContextID, xe); + y = _cms15Fixed16toDouble(ContextID, ye); + z = _cms15Fixed16toDouble(ContextID, ze); dx = fabs(cmsD50X_2 - x); dy = fabs(cmsD50Y_2 - y); @@ -1019,7 +1012,7 @@ void BuildTable(cmsInt32Number n, cmsUInt16Number Tab[], cmsBool Descending) // max_err = max allowed error static -cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Number max_err) +cmsInt32Number Check1D(cmsContext ContextID, cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Number max_err) { cmsUInt32Number i; cmsUInt16Number in, out; @@ -1029,7 +1022,7 @@ cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Numb Tab = (cmsUInt16Number*) malloc(sizeof(cmsUInt16Number)* nNodesToCheck); if (Tab == NULL) return 0; - p = _cmsComputeInterpParams(DbgThread(), nNodesToCheck, 1, 1, Tab, CMS_LERP_FLAGS_16BITS); + p = _cmsComputeInterpParams(ContextID, nNodesToCheck, 1, 1, Tab, CMS_LERP_FLAGS_16BITS); if (p == NULL) return 0; BuildTable(nNodesToCheck, Tab, Down); @@ -1039,85 +1032,85 @@ cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Numb in = (cmsUInt16Number) i; out = 0; - p ->Interpolation.Lerp16(DbgThread(), &in, &out, p); + p ->Interpolation.Lerp16(ContextID, &in, &out, p); if (Down) out = 0xffff - out; if (abs(out - in) > max_err) { Fail("(%dp): Must be %x, But is %x : ", nNodesToCheck, in, out); - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); free(Tab); return 0; } } - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); free(Tab); return 1; } static -cmsInt32Number Check1DLERP2(void) +cmsInt32Number Check1DLERP2(cmsContext ContextID) { - return Check1D(2, FALSE, 0); + return Check1D(ContextID, 2, FALSE, 0); } static -cmsInt32Number Check1DLERP3(void) +cmsInt32Number Check1DLERP3(cmsContext ContextID) { - return Check1D(3, FALSE, 1); + return Check1D(ContextID, 3, FALSE, 1); } static -cmsInt32Number Check1DLERP4(void) +cmsInt32Number Check1DLERP4(cmsContext ContextID) { - return Check1D(4, FALSE, 0); + return Check1D(ContextID, 4, FALSE, 0); } static -cmsInt32Number Check1DLERP6(void) +cmsInt32Number Check1DLERP6(cmsContext ContextID) { - return Check1D(6, FALSE, 0); + return Check1D(ContextID, 6, FALSE, 0); } static -cmsInt32Number Check1DLERP18(void) +cmsInt32Number Check1DLERP18(cmsContext ContextID) { - return Check1D(18, FALSE, 0); + return Check1D(ContextID, 18, FALSE, 0); } static -cmsInt32Number Check1DLERP2Down(void) +cmsInt32Number Check1DLERP2Down(cmsContext ContextID) { - return Check1D(2, TRUE, 0); + return Check1D(ContextID, 2, TRUE, 0); } static -cmsInt32Number Check1DLERP3Down(void) +cmsInt32Number Check1DLERP3Down(cmsContext ContextID) { - return Check1D(3, TRUE, 1); + return Check1D(ContextID, 3, TRUE, 1); } static -cmsInt32Number Check1DLERP6Down(void) +cmsInt32Number Check1DLERP6Down(cmsContext ContextID) { - return Check1D(6, TRUE, 0); + return Check1D(ContextID, 6, TRUE, 0); } static -cmsInt32Number Check1DLERP18Down(void) +cmsInt32Number Check1DLERP18Down(cmsContext ContextID) { - return Check1D(18, TRUE, 0); + return Check1D(ContextID, 18, TRUE, 0); } static -cmsInt32Number ExhaustiveCheck1DLERP(void) +cmsInt32Number ExhaustiveCheck1DLERP(cmsContext ContextID) { cmsUInt32Number j; @@ -1126,7 +1119,7 @@ cmsInt32Number ExhaustiveCheck1DLERP(void) if ((j % 10) == 0) printf("%u \r", j); - if (!Check1D(j, FALSE, 1)) return 0; + if (!Check1D(ContextID, j, FALSE, 1)) return 0; } printf("\rResult is "); @@ -1134,7 +1127,7 @@ cmsInt32Number ExhaustiveCheck1DLERP(void) } static -cmsInt32Number ExhaustiveCheck1DLERPDown(void) +cmsInt32Number ExhaustiveCheck1DLERPDown(cmsContext ContextID) { cmsUInt32Number j; @@ -1143,7 +1136,7 @@ cmsInt32Number ExhaustiveCheck1DLERPDown(void) if ((j % 10) == 0) printf("%u \r", j); - if (!Check1D(j, TRUE, 1)) return 0; + if (!Check1D(ContextID, j, TRUE, 1)) return 0; } @@ -1156,7 +1149,7 @@ cmsInt32Number ExhaustiveCheck1DLERPDown(void) // 3D interpolation ------------------------------------------------------------------------------------------------- static -cmsInt32Number Check3DinterpolationFloatTetrahedral(void) +cmsInt32Number Check3DinterpolationFloatTetrahedral(cmsContext ContextID) { cmsInterpParams* p; cmsInt32Number i; @@ -1177,7 +1170,7 @@ cmsInt32Number Check3DinterpolationFloatTetrahedral(void) }; - p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); + p = _cmsComputeInterpParams(ContextID, 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); MaxErr = 0.0; @@ -1185,7 +1178,7 @@ cmsInt32Number Check3DinterpolationFloatTetrahedral(void) In[0] = In[1] = In[2] = (cmsFloat32Number) ( (cmsFloat32Number) i / 65535.0F); - p ->Interpolation.LerpFloat(DbgThread(), In, Out, p); + p ->Interpolation.LerpFloat(ContextID, 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; @@ -1193,16 +1186,16 @@ cmsInt32Number Check3DinterpolationFloatTetrahedral(void) } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 1; Error: - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 0; } static -cmsInt32Number Check3DinterpolationFloatTrilinear(void) +cmsInt32Number Check3DinterpolationFloatTrilinear(cmsContext ContextID) { cmsInterpParams* p; cmsInt32Number i; @@ -1223,14 +1216,14 @@ cmsInt32Number Check3DinterpolationFloatTrilinear(void) }; - p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); + p = _cmsComputeInterpParams(ContextID, 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); MaxErr = 0.0; for (i=0; i < 0xffff; i++) { In[0] = In[1] = In[2] = (cmsFloat32Number) ( (cmsFloat32Number) i / 65535.0F); - p ->Interpolation.LerpFloat(DbgThread(), In, Out, p); + p ->Interpolation.LerpFloat(ContextID, 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; @@ -1238,17 +1231,17 @@ cmsInt32Number Check3DinterpolationFloatTrilinear(void) } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 1; Error: - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 0; } static -cmsInt32Number Check3DinterpolationTetrahedral16(void) +cmsInt32Number Check3DinterpolationTetrahedral16(cmsContext ContextID) { cmsInterpParams* p; cmsInt32Number i; @@ -1268,14 +1261,14 @@ cmsInt32Number Check3DinterpolationTetrahedral16(void) 0xffff, 0xffff, 0xffff }; - p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); + p = _cmsComputeInterpParams(ContextID, 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); MaxErr = 0.0; for (i=0; i < 0xffff; i++) { In[0] = In[1] = In[2] = (cmsUInt16Number) i; - p ->Interpolation.Lerp16(DbgThread(), In, Out, p); + p ->Interpolation.Lerp16(ContextID, In, Out, p); if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; @@ -1283,16 +1276,16 @@ cmsInt32Number Check3DinterpolationTetrahedral16(void) } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 1; Error: - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 0; } static -cmsInt32Number Check3DinterpolationTrilinear16(void) +cmsInt32Number Check3DinterpolationTrilinear16(cmsContext ContextID) { cmsInterpParams* p; cmsInt32Number i; @@ -1312,14 +1305,14 @@ cmsInt32Number Check3DinterpolationTrilinear16(void) 0xffff, 0xffff, 0xffff }; - p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); + p = _cmsComputeInterpParams(ContextID, 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); MaxErr = 0.0; for (i=0; i < 0xffff; i++) { In[0] = In[1] = In[2] = (cmsUInt16Number) i; - p ->Interpolation.Lerp16(DbgThread(), In, Out, p); + p ->Interpolation.Lerp16(ContextID, In, Out, p); if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; @@ -1327,17 +1320,17 @@ cmsInt32Number Check3DinterpolationTrilinear16(void) } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 1; Error: - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 0; } static -cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void) +cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(cmsContext ContextID) { cmsInterpParams* p; cmsInt32Number r, g, b; @@ -1358,7 +1351,7 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void) }; - p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); + p = _cmsComputeInterpParams(ContextID, 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); MaxErr = 0.0; for (r=0; r < 0xff; r++) @@ -1371,7 +1364,7 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void) In[2] = (cmsFloat32Number) b / 255.0F; - p ->Interpolation.LerpFloat(DbgThread(), In, Out, p); + p ->Interpolation.LerpFloat(ContextID, 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; @@ -1379,16 +1372,16 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void) } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 1; Error: - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 0; } static -cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void) +cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(cmsContext ContextID) { cmsInterpParams* p; cmsInt32Number r, g, b; @@ -1409,7 +1402,7 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void) }; - p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); + p = _cmsComputeInterpParams(ContextID, 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); MaxErr = 0.0; for (r=0; r < 0xff; r++) @@ -1422,7 +1415,7 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void) In[2] = (cmsFloat32Number) b / 255.0F; - p ->Interpolation.LerpFloat(DbgThread(), In, Out, p); + p ->Interpolation.LerpFloat(ContextID, 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; @@ -1430,17 +1423,17 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void) } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 1; Error: - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 0; } static -cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void) +cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(cmsContext ContextID) { cmsInterpParams* p; cmsInt32Number r, g, b; @@ -1460,7 +1453,7 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void) 0xffff, 0xffff, 0xffff }; - p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); + p = _cmsComputeInterpParams(ContextID, 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); for (r=0; r < 0xff; r++) for (g=0; g < 0xff; g++) @@ -1471,23 +1464,23 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void) In[2] = (cmsUInt16Number) b ; - p ->Interpolation.Lerp16(DbgThread(), In, Out, p); + p ->Interpolation.Lerp16(ContextID, In, Out, p); if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; } - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 1; Error: - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 0; } static -cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void) +cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(cmsContext ContextID) { cmsInterpParams* p; cmsInt32Number r, g, b; @@ -1507,7 +1500,7 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void) 0xffff, 0xffff, 0xffff }; - p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); + p = _cmsComputeInterpParams(ContextID, 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); for (r=0; r < 0xff; r++) for (g=0; g < 0xff; g++) @@ -1518,7 +1511,7 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void) In[2] = (cmsUInt16Number)b ; - p ->Interpolation.Lerp16(DbgThread(), In, Out, p); + p ->Interpolation.Lerp16(ContextID, In, Out, p); if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; @@ -1526,17 +1519,17 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void) } - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 1; Error: - _cmsFreeInterpParams(DbgThread(), p); + _cmsFreeInterpParams(ContextID, p); return 0; } // Check reverse interpolation on LUTS. This is right now exclusively used by K preservation algorithm static -cmsInt32Number CheckReverseInterpolation3x3(void) +cmsInt32Number CheckReverseInterpolation3x3(cmsContext ContextID) { cmsPipeline* Lut; cmsStage* clut; @@ -1560,14 +1553,14 @@ cmsInt32Number CheckReverseInterpolation3x3(void) - Lut = cmsPipelineAlloc(DbgThread(), 3, 3); + Lut = cmsPipelineAlloc(ContextID, 3, 3); - clut = cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table); - cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_BEGIN, clut); + clut = cmsStageAllocCLut16bit(ContextID, 2, 3, 3, Table); + cmsPipelineInsertStage(ContextID, Lut, cmsAT_BEGIN, clut); Target[0] = 0; Target[1] = 0; Target[2] = 0; Hint[0] = 0; Hint[1] = 0; Hint[2] = 0; - cmsPipelineEvalReverseFloat(DbgThread(), Target, Result, NULL, Lut); + cmsPipelineEvalReverseFloat(ContextID, Target, Result, NULL, Lut); if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0){ Fail("Reverse interpolation didn't find zero"); @@ -1581,7 +1574,7 @@ cmsInt32Number CheckReverseInterpolation3x3(void) cmsFloat32Number in = i / 100.0F; Target[0] = in; Target[1] = 0; Target[2] = 0; - cmsPipelineEvalReverseFloat(DbgThread(), Target, Result, Hint, Lut); + cmsPipelineEvalReverseFloat(ContextID, Target, Result, Hint, Lut); err = fabsf(in - Result[0]); if (err > max) max = err; @@ -1589,17 +1582,17 @@ cmsInt32Number CheckReverseInterpolation3x3(void) memcpy(Hint, Result, sizeof(Hint)); } - cmsPipelineFree(DbgThread(), Lut); + cmsPipelineFree(ContextID, Lut); return (max <= FLOAT_PRECISSION); Error: - cmsPipelineFree(DbgThread(), Lut); + cmsPipelineFree(ContextID, Lut); return 0; } static -cmsInt32Number CheckReverseInterpolation4x3(void) +cmsInt32Number CheckReverseInterpolation4x3(cmsContext ContextID) { cmsPipeline* Lut; cmsStage* clut; @@ -1636,10 +1629,10 @@ cmsInt32Number CheckReverseInterpolation4x3(void) }; - Lut = cmsPipelineAlloc(DbgThread(), 4, 3); + Lut = cmsPipelineAlloc(ContextID, 4, 3); - clut = cmsStageAllocCLut16bit(DbgThread(), 2, 4, 3, Table); - cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_BEGIN, clut); + clut = cmsStageAllocCLut16bit(ContextID, 2, 4, 3, Table); + cmsPipelineInsertStage(ContextID, Lut, cmsAT_BEGIN, clut); // Check if the LUT is behaving as expected SubTest("4->3 feasibility"); @@ -1650,7 +1643,7 @@ cmsInt32Number CheckReverseInterpolation4x3(void) Target[2] = 0; Target[3] = 12; - cmsPipelineEvalFloat(DbgThread(), Target, Result, Lut); + cmsPipelineEvalFloat(ContextID, Target, Result, Lut); if (!IsGoodFixed15_16("0", Target[0], Result[0])) goto Error; if (!IsGoodFixed15_16("1", Target[1], Result[1])) goto Error; @@ -1668,7 +1661,7 @@ cmsInt32Number CheckReverseInterpolation4x3(void) // This is our hint (which is a big lie in this case) Hint[0] = 0.1F; Hint[1] = 0.1F; Hint[2] = 0.1F; - cmsPipelineEvalReverseFloat(DbgThread(), Target, Result, Hint, Lut); + cmsPipelineEvalReverseFloat(ContextID, Target, Result, Hint, Lut); if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0 || Result[3] != 0){ @@ -1683,7 +1676,7 @@ cmsInt32Number CheckReverseInterpolation4x3(void) cmsFloat32Number in = i / 100.0F; Target[0] = in; Target[1] = 0; Target[2] = 0; - cmsPipelineEvalReverseFloat(DbgThread(), Target, Result, Hint, Lut); + cmsPipelineEvalReverseFloat(ContextID, Target, Result, Hint, Lut); err = fabsf(in - Result[0]); if (err > max) max = err; @@ -1691,11 +1684,11 @@ cmsInt32Number CheckReverseInterpolation4x3(void) memcpy(Hint, Result, sizeof(Hint)); } - cmsPipelineFree(DbgThread(), Lut); + cmsPipelineFree(ContextID, Lut); return (max <= FLOAT_PRECISSION); Error: - cmsPipelineFree(DbgThread(), Lut); + cmsPipelineFree(ContextID, Lut); return 0; } @@ -1824,17 +1817,17 @@ cmsInt32Number Sampler8D(cmsContext ContextID, register const cmsUInt16Number In } static -cmsBool CheckOne3D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3) +cmsBool CheckOne3D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3) { cmsUInt16Number In[3], Out1[3], Out2[3]; In[0] = a1; In[1] = a2; In[2] = a3; // This is the interpolated value - cmsPipelineEval16(DbgThread(), In, Out1, lut); + cmsPipelineEval16(ContextID, In, Out1, lut); // This is the real value - Sampler3D(DbgThread(), In, Out2, NULL); + Sampler3D(ContextID, In, Out2, NULL); // Let's see the difference @@ -1846,17 +1839,17 @@ cmsBool CheckOne3D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cms } static -cmsBool CheckOne4D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4) +cmsBool CheckOne4D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4) { cmsUInt16Number In[4], Out1[3], Out2[3]; In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; // This is the interpolated value - cmsPipelineEval16(DbgThread(), In, Out1, lut); + cmsPipelineEval16(ContextID, In, Out1, lut); // This is the real value - Sampler4D(DbgThread(), In, Out2, NULL); + Sampler4D(ContextID, In, Out2, NULL); // Let's see the difference @@ -1868,7 +1861,7 @@ cmsBool CheckOne4D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cms } static -cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, +cmsBool CheckOne5D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5) { cmsUInt16Number In[5], Out1[3], Out2[3]; @@ -1876,10 +1869,10 @@ cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; // This is the interpolated value - cmsPipelineEval16(DbgThread(), In, Out1, lut); + cmsPipelineEval16(ContextID, In, Out1, lut); // This is the real value - Sampler5D(DbgThread(), In, Out2, NULL); + Sampler5D(ContextID, In, Out2, NULL); // Let's see the difference @@ -1891,7 +1884,7 @@ cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, } static -cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, +cmsBool CheckOne6D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6) { @@ -1900,10 +1893,10 @@ cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; // This is the interpolated value - cmsPipelineEval16(DbgThread(), In, Out1, lut); + cmsPipelineEval16(ContextID, In, Out1, lut); // This is the real value - Sampler6D(DbgThread(), In, Out2, NULL); + Sampler6D(ContextID, In, Out2, NULL); // Let's see the difference @@ -1916,7 +1909,7 @@ cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, static -cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, +cmsBool CheckOne7D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7) @@ -1926,10 +1919,10 @@ cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; In[6] = a7; // This is the interpolated value - cmsPipelineEval16(DbgThread(), In, Out1, lut); + cmsPipelineEval16(ContextID, In, Out1, lut); // This is the real value - Sampler7D(DbgThread(), In, Out2, NULL); + Sampler7D(ContextID, In, Out2, NULL); // Let's see the difference @@ -1942,7 +1935,7 @@ cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, static -cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, +cmsBool CheckOne8D(cmsContext ContextID, cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8) @@ -1952,10 +1945,10 @@ cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; In[6] = a7; In[7] = a8; // This is the interpolated value - cmsPipelineEval16(DbgThread(), In, Out1, lut); + cmsPipelineEval16(ContextID, In, Out1, lut); // This is the real value - Sampler8D(DbgThread(), In, Out2, NULL); + Sampler8D(ContextID, In, Out2, NULL); // Let's see the difference @@ -1968,87 +1961,87 @@ cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, static -cmsInt32Number Check3Dinterp(void) +cmsInt32Number Check3Dinterp(cmsContext ContextID) { cmsPipeline* lut; cmsStage* mpe; - lut = cmsPipelineAlloc(DbgThread(), 3, 3); - mpe = cmsStageAllocCLut16bit(DbgThread(), 9, 3, 3, NULL); - cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler3D, NULL, 0); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe); + lut = cmsPipelineAlloc(ContextID, 3, 3); + mpe = cmsStageAllocCLut16bit(ContextID, 9, 3, 3, NULL); + cmsStageSampleCLut16bit(ContextID, mpe, Sampler3D, NULL, 0); + cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe); // Check accuracy - if (!CheckOne3D(lut, 0, 0, 0)) return 0; - if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne3D(ContextID, lut, 0, 0, 0)) return 0; + if (!CheckOne3D(ContextID, lut, 0xffff, 0xffff, 0xffff)) return 0; - if (!CheckOne3D(lut, 0x8080, 0x8080, 0x8080)) return 0; - if (!CheckOne3D(lut, 0x0000, 0xFE00, 0x80FF)) return 0; - if (!CheckOne3D(lut, 0x1111, 0x2222, 0x3333)) return 0; - if (!CheckOne3D(lut, 0x0000, 0x0012, 0x0013)) return 0; - if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0; - if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0; + if (!CheckOne3D(ContextID, lut, 0x8080, 0x8080, 0x8080)) return 0; + if (!CheckOne3D(ContextID, lut, 0x0000, 0xFE00, 0x80FF)) return 0; + if (!CheckOne3D(ContextID, lut, 0x1111, 0x2222, 0x3333)) return 0; + if (!CheckOne3D(ContextID, lut, 0x0000, 0x0012, 0x0013)) return 0; + if (!CheckOne3D(ContextID, lut, 0x3141, 0x1415, 0x1592)) return 0; + if (!CheckOne3D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12)) return 0; - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return 1; } static -cmsInt32Number Check3DinterpGranular(void) +cmsInt32Number Check3DinterpGranular(cmsContext ContextID) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 7, 8, 9 }; - lut = cmsPipelineAlloc(DbgThread(), 3, 3); - mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 3, 3, NULL); - cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler3D, NULL, 0); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe); + lut = cmsPipelineAlloc(ContextID, 3, 3); + mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 3, 3, NULL); + cmsStageSampleCLut16bit(ContextID, mpe, Sampler3D, NULL, 0); + cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe); // Check accuracy - if (!CheckOne3D(lut, 0, 0, 0)) return 0; - if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne3D(ContextID, lut, 0, 0, 0)) return 0; + if (!CheckOne3D(ContextID, lut, 0xffff, 0xffff, 0xffff)) return 0; - if (!CheckOne3D(lut, 0x8080, 0x8080, 0x8080)) return 0; - if (!CheckOne3D(lut, 0x0000, 0xFE00, 0x80FF)) return 0; - if (!CheckOne3D(lut, 0x1111, 0x2222, 0x3333)) return 0; - if (!CheckOne3D(lut, 0x0000, 0x0012, 0x0013)) return 0; - if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0; - if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0; + if (!CheckOne3D(ContextID, lut, 0x8080, 0x8080, 0x8080)) return 0; + if (!CheckOne3D(ContextID, lut, 0x0000, 0xFE00, 0x80FF)) return 0; + if (!CheckOne3D(ContextID, lut, 0x1111, 0x2222, 0x3333)) return 0; + if (!CheckOne3D(ContextID, lut, 0x0000, 0x0012, 0x0013)) return 0; + if (!CheckOne3D(ContextID, lut, 0x3141, 0x1415, 0x1592)) return 0; + if (!CheckOne3D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12)) return 0; - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return 1; } static -cmsInt32Number Check4Dinterp(void) +cmsInt32Number Check4Dinterp(cmsContext ContextID) { cmsPipeline* lut; cmsStage* mpe; - lut = cmsPipelineAlloc(DbgThread(), 4, 3); - mpe = cmsStageAllocCLut16bit(DbgThread(), 9, 4, 3, NULL); - cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler4D, NULL, 0); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe); + lut = cmsPipelineAlloc(ContextID, 4, 3); + mpe = cmsStageAllocCLut16bit(ContextID, 9, 4, 3, NULL); + cmsStageSampleCLut16bit(ContextID, mpe, Sampler4D, NULL, 0); + cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe); // Check accuracy - if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0; - if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne4D(ContextID, lut, 0, 0, 0, 0)) return 0; + if (!CheckOne4D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; - if (!CheckOne4D(lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0; - if (!CheckOne4D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0; - if (!CheckOne4D(lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0; - if (!CheckOne4D(lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0; - if (!CheckOne4D(lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0; - if (!CheckOne4D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0; + if (!CheckOne4D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0; + if (!CheckOne4D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0; + if (!CheckOne4D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0; + if (!CheckOne4D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0; + if (!CheckOne4D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0; + if (!CheckOne4D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0; - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return 1; } @@ -2056,148 +2049,148 @@ cmsInt32Number Check4Dinterp(void) static -cmsInt32Number Check4DinterpGranular(void) +cmsInt32Number Check4DinterpGranular(cmsContext ContextID) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 9, 8, 7, 6 }; - lut = cmsPipelineAlloc(DbgThread(), 4, 3); - mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 4, 3, NULL); - cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler4D, NULL, 0); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe); + lut = cmsPipelineAlloc(ContextID, 4, 3); + mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 4, 3, NULL); + cmsStageSampleCLut16bit(ContextID, mpe, Sampler4D, NULL, 0); + cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe); // Check accuracy - if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0; - if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne4D(ContextID, lut, 0, 0, 0, 0)) return 0; + if (!CheckOne4D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; - if (!CheckOne4D(lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0; - if (!CheckOne4D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0; - if (!CheckOne4D(lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0; - if (!CheckOne4D(lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0; - if (!CheckOne4D(lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0; - if (!CheckOne4D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0; + if (!CheckOne4D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0; + if (!CheckOne4D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0; + if (!CheckOne4D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0; + if (!CheckOne4D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0; + if (!CheckOne4D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0; + if (!CheckOne4D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0; - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return 1; } static -cmsInt32Number Check5DinterpGranular(void) +cmsInt32Number Check5DinterpGranular(cmsContext ContextID) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 3, 2, 2, 2, 2 }; - lut = cmsPipelineAlloc(DbgThread(), 5, 3); - mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 5, 3, NULL); - cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler5D, NULL, 0); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe); + lut = cmsPipelineAlloc(ContextID, 5, 3); + mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 5, 3, NULL); + cmsStageSampleCLut16bit(ContextID, mpe, Sampler5D, NULL, 0); + cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe); // Check accuracy - if (!CheckOne5D(lut, 0, 0, 0, 0, 0)) return 0; - if (!CheckOne5D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne5D(ContextID, lut, 0, 0, 0, 0, 0)) return 0; + if (!CheckOne5D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; - if (!CheckOne5D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234)) return 0; - if (!CheckOne5D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078)) return 0; - if (!CheckOne5D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455)) return 0; - if (!CheckOne5D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333)) return 0; - if (!CheckOne5D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567)) return 0; - if (!CheckOne5D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344)) return 0; + if (!CheckOne5D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234)) return 0; + if (!CheckOne5D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078)) return 0; + if (!CheckOne5D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455)) return 0; + if (!CheckOne5D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333)) return 0; + if (!CheckOne5D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567)) return 0; + if (!CheckOne5D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344)) return 0; - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return 1; } static -cmsInt32Number Check6DinterpGranular(void) +cmsInt32Number Check6DinterpGranular(cmsContext ContextID) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2 }; - lut = cmsPipelineAlloc(DbgThread(), 6, 3); - mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 6, 3, NULL); - cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler6D, NULL, 0); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe); + lut = cmsPipelineAlloc(ContextID, 6, 3); + mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 6, 3, NULL); + cmsStageSampleCLut16bit(ContextID, mpe, Sampler6D, NULL, 0); + cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe); // Check accuracy - if (!CheckOne6D(lut, 0, 0, 0, 0, 0, 0)) return 0; - if (!CheckOne6D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne6D(ContextID, lut, 0, 0, 0, 0, 0, 0)) return 0; + if (!CheckOne6D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; - if (!CheckOne6D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122)) return 0; - if (!CheckOne6D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233)) return 0; - if (!CheckOne6D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344)) return 0; - if (!CheckOne6D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455)) return 0; - if (!CheckOne6D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566)) return 0; - if (!CheckOne6D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677)) return 0; + if (!CheckOne6D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122)) return 0; + if (!CheckOne6D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233)) return 0; + if (!CheckOne6D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344)) return 0; + if (!CheckOne6D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455)) return 0; + if (!CheckOne6D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566)) return 0; + if (!CheckOne6D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677)) return 0; - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return 1; } static -cmsInt32Number Check7DinterpGranular(void) +cmsInt32Number Check7DinterpGranular(cmsContext ContextID) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2, 2 }; - lut = cmsPipelineAlloc(DbgThread(), 7, 3); - mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 7, 3, NULL); - cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler7D, NULL, 0); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe); + lut = cmsPipelineAlloc(ContextID, 7, 3); + mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 7, 3, NULL); + cmsStageSampleCLut16bit(ContextID, mpe, Sampler7D, NULL, 0); + cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe); // Check accuracy - if (!CheckOne7D(lut, 0, 0, 0, 0, 0, 0, 0)) return 0; - if (!CheckOne7D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne7D(ContextID, lut, 0, 0, 0, 0, 0, 0, 0)) return 0; + if (!CheckOne7D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; - if (!CheckOne7D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056)) return 0; - if (!CheckOne7D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088)) return 0; - if (!CheckOne7D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987)) return 0; - if (!CheckOne7D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988)) return 0; - if (!CheckOne7D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56)) return 0; - if (!CheckOne7D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe)) return 0; + if (!CheckOne7D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056)) return 0; + if (!CheckOne7D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088)) return 0; + if (!CheckOne7D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987)) return 0; + if (!CheckOne7D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988)) return 0; + if (!CheckOne7D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56)) return 0; + if (!CheckOne7D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe)) return 0; - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return 1; } static -cmsInt32Number Check8DinterpGranular(void) +cmsInt32Number Check8DinterpGranular(cmsContext ContextID) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2, 2, 2 }; - lut = cmsPipelineAlloc(DbgThread(), 8, 3); - mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 8, 3, NULL); - cmsStageSampleCLut16bit(DbgThread(), mpe, Sampler8D, NULL, 0); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_BEGIN, mpe); + lut = cmsPipelineAlloc(ContextID, 8, 3); + mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 8, 3, NULL); + cmsStageSampleCLut16bit(ContextID, mpe, Sampler8D, NULL, 0); + cmsPipelineInsertStage(ContextID, lut, cmsAT_BEGIN, mpe); // Check accuracy - if (!CheckOne8D(lut, 0, 0, 0, 0, 0, 0, 0, 0)) return 0; - if (!CheckOne8D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne8D(ContextID, lut, 0, 0, 0, 0, 0, 0, 0, 0)) return 0; + if (!CheckOne8D(ContextID, lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; - if (!CheckOne8D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056, 0x0011)) return 0; - if (!CheckOne8D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088, 0x2020)) return 0; - if (!CheckOne8D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987, 0x4532)) return 0; - if (!CheckOne8D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988, 0x1200)) return 0; - if (!CheckOne8D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56, 0x6666)) return 0; - if (!CheckOne8D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe, 0xface)) return 0; + if (!CheckOne8D(ContextID, lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056, 0x0011)) return 0; + if (!CheckOne8D(ContextID, lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088, 0x2020)) return 0; + if (!CheckOne8D(ContextID, lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987, 0x4532)) return 0; + if (!CheckOne8D(ContextID, lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988, 0x1200)) return 0; + if (!CheckOne8D(ContextID, lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56, 0x6666)) return 0; + if (!CheckOne8D(ContextID, lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe, 0xface)) return 0; - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return 1; } @@ -2206,7 +2199,7 @@ cmsInt32Number Check8DinterpGranular(void) // Lab to LCh and back should be performed at 1E-12 accuracy at least static -cmsInt32Number CheckLab2LCh(void) +cmsInt32Number CheckLab2LCh(cmsContext ContextID) { cmsInt32Number l, a, b; cmsFloat64Number dist, Max = 0; @@ -2223,10 +2216,10 @@ cmsInt32Number CheckLab2LCh(void) Lab.a = a; Lab.b = b; - cmsLab2LCh(DbgThread(), &LCh, &Lab); - cmsLCh2Lab(DbgThread(), &Lab2, &LCh); + cmsLab2LCh(ContextID, &LCh, &Lab); + cmsLCh2Lab(ContextID, &Lab2, &LCh); - dist = cmsDeltaE(DbgThread(), &Lab, &Lab2); + dist = cmsDeltaE(ContextID, &Lab, &Lab2); if (dist > Max) Max = dist; } } @@ -2237,7 +2230,7 @@ cmsInt32Number CheckLab2LCh(void) // Lab to LCh and back should be performed at 1E-12 accuracy at least static -cmsInt32Number CheckLab2XYZ(void) +cmsInt32Number CheckLab2XYZ(cmsContext ContextID) { cmsInt32Number l, a, b; cmsFloat64Number dist, Max = 0; @@ -2254,10 +2247,10 @@ cmsInt32Number CheckLab2XYZ(void) Lab.a = a; Lab.b = b; - cmsLab2XYZ(DbgThread(), NULL, &XYZ, &Lab); - cmsXYZ2Lab(DbgThread(), NULL, &Lab2, &XYZ); + cmsLab2XYZ(ContextID, NULL, &XYZ, &Lab); + cmsXYZ2Lab(ContextID, NULL, &Lab2, &XYZ); - dist = cmsDeltaE(DbgThread(), &Lab, &Lab2); + dist = cmsDeltaE(ContextID, &Lab, &Lab2); if (dist > Max) Max = dist; } @@ -2269,7 +2262,7 @@ cmsInt32Number CheckLab2XYZ(void) // Lab to xyY and back should be performed at 1E-12 accuracy at least static -cmsInt32Number CheckLab2xyY(void) +cmsInt32Number CheckLab2xyY(cmsContext ContextID) { cmsInt32Number l, a, b; cmsFloat64Number dist, Max = 0; @@ -2287,12 +2280,12 @@ cmsInt32Number CheckLab2xyY(void) Lab.a = a; Lab.b = b; - cmsLab2XYZ(DbgThread(), NULL, &XYZ, &Lab); - cmsXYZ2xyY(DbgThread(), &xyY, &XYZ); - cmsxyY2XYZ(DbgThread(), &XYZ, &xyY); - cmsXYZ2Lab(DbgThread(), NULL, &Lab2, &XYZ); + cmsLab2XYZ(ContextID, NULL, &XYZ, &Lab); + cmsXYZ2xyY(ContextID, &xyY, &XYZ); + cmsxyY2XYZ(ContextID, &XYZ, &xyY); + cmsXYZ2Lab(ContextID, NULL, &Lab2, &XYZ); - dist = cmsDeltaE(DbgThread(), &Lab, &Lab2); + dist = cmsDeltaE(ContextID, &Lab, &Lab2); if (dist > Max) Max = dist; } @@ -2304,7 +2297,7 @@ cmsInt32Number CheckLab2xyY(void) static -cmsInt32Number CheckLabV2encoding(void) +cmsInt32Number CheckLabV2encoding(cmsContext ContextID) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[3], aw[3]; @@ -2316,8 +2309,8 @@ cmsInt32Number CheckLabV2encoding(void) Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; - cmsLabEncoded2FloatV2(DbgThread(), &Lab, Inw); - cmsFloat2LabEncodedV2(DbgThread(), aw, &Lab); + cmsLabEncoded2FloatV2(ContextID, &Lab, Inw); + cmsFloat2LabEncodedV2(ContextID, aw, &Lab); for (i=0; i < 3; i++) { @@ -2332,7 +2325,7 @@ cmsInt32Number CheckLabV2encoding(void) } static -cmsInt32Number CheckLabV4encoding(void) +cmsInt32Number CheckLabV4encoding(cmsContext ContextID) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[3], aw[3]; @@ -2344,8 +2337,8 @@ cmsInt32Number CheckLabV4encoding(void) Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; - cmsLabEncoded2Float(DbgThread(), &Lab, Inw); - cmsFloat2LabEncoded(DbgThread(), aw, &Lab); + cmsLabEncoded2Float(ContextID, &Lab, Inw); + cmsFloat2LabEncoded(ContextID, aw, &Lab); for (i=0; i < 3; i++) { @@ -2363,7 +2356,7 @@ cmsInt32Number CheckLabV4encoding(void) // BlackBody ----------------------------------------------------------------------------------------------------- static -cmsInt32Number CheckTemp2CHRM(void) +cmsInt32Number CheckTemp2CHRM(cmsContext ContextID) { cmsInt32Number j; cmsFloat64Number d, v, Max = 0; @@ -2371,8 +2364,8 @@ cmsInt32Number CheckTemp2CHRM(void) for (j=4000; j < 25000; j++) { - cmsWhitePointFromTemp(DbgThread(), &White, j); - if (!cmsTempFromWhitePoint(DbgThread(), &v, &White)) return 0; + cmsWhitePointFromTemp(ContextID, &White, j); + if (!cmsTempFromWhitePoint(ContextID, &v, &White)) return 0; d = fabs(v - j); if (d > Max) Max = d; @@ -2387,9 +2380,9 @@ cmsInt32Number CheckTemp2CHRM(void) // Tone curves ----------------------------------------------------------------------------------------------------- static -cmsInt32Number CheckGammaEstimation(cmsToneCurve* c, cmsFloat64Number g) +cmsInt32Number CheckGammaEstimation(cmsContext ContextID, cmsToneCurve* c, cmsFloat64Number g) { - cmsFloat64Number est = cmsEstimateGamma(DbgThread(), c, 0.001); + cmsFloat64Number est = cmsEstimateGamma(ContextID, c, 0.001); SubTest("Gamma estimation"); if (fabs(est - g) > 0.001) return 0; @@ -2397,59 +2390,59 @@ cmsInt32Number CheckGammaEstimation(cmsToneCurve* c, cmsFloat64Number g) } static -cmsInt32Number CheckGammaCreation16(void) +cmsInt32Number CheckGammaCreation16(cmsContext ContextID) { - cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0); + cmsToneCurve* LinGamma = cmsBuildGamma(ContextID, 1.0); cmsInt32Number i; cmsUInt16Number in, out; for (i=0; i < 0xffff; i++) { in = (cmsUInt16Number) i; - out = cmsEvalToneCurve16(DbgThread(), LinGamma, in); + out = cmsEvalToneCurve16(ContextID, LinGamma, in); if (in != out) { Fail("(lin gamma): Must be %x, But is %x : ", in, out); - cmsFreeToneCurve(DbgThread(), LinGamma); + cmsFreeToneCurve(ContextID, LinGamma); return 0; } } - if (!CheckGammaEstimation(LinGamma, 1.0)) return 0; + if (!CheckGammaEstimation(ContextID, LinGamma, 1.0)) return 0; - cmsFreeToneCurve(DbgThread(), LinGamma); + cmsFreeToneCurve(ContextID, LinGamma); return 1; } static -cmsInt32Number CheckGammaCreationFlt(void) +cmsInt32Number CheckGammaCreationFlt(cmsContext ContextID) { - cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0); + cmsToneCurve* LinGamma = cmsBuildGamma(ContextID, 1.0); cmsInt32Number i; cmsFloat32Number in, out; for (i=0; i < 0xffff; i++) { in = (cmsFloat32Number) (i / 65535.0); - out = cmsEvalToneCurveFloat(DbgThread(), LinGamma, in); + out = cmsEvalToneCurveFloat(ContextID, LinGamma, in); if (fabs(in - out) > (1/65535.0)) { Fail("(lin gamma): Must be %f, But is %f : ", in, out); - cmsFreeToneCurve(DbgThread(), LinGamma); + cmsFreeToneCurve(ContextID, LinGamma); return 0; } } - if (!CheckGammaEstimation(LinGamma, 1.0)) return 0; - cmsFreeToneCurve(DbgThread(), LinGamma); + if (!CheckGammaEstimation(ContextID, LinGamma, 1.0)) return 0; + cmsFreeToneCurve(ContextID, LinGamma); return 1; } // Curve curves using a single power function // Error is given in 0..ffff counts static -cmsInt32Number CheckGammaFloat(cmsFloat64Number g) +cmsInt32Number CheckGammaFloat(cmsContext ContextID, cmsFloat64Number g) { - cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), g); + cmsToneCurve* Curve = cmsBuildGamma(ContextID, g); cmsInt32Number i; cmsFloat32Number in, out; cmsFloat64Number val, Err; @@ -2458,7 +2451,7 @@ cmsInt32Number CheckGammaFloat(cmsFloat64Number g) for (i=0; i < 0xffff; i++) { in = (cmsFloat32Number) (i / 65535.0); - out = cmsEvalToneCurveFloat(DbgThread(), Curve, in); + out = cmsEvalToneCurveFloat(ContextID, Curve, in); val = pow((cmsFloat64Number) in, g); Err = fabs( val - out); @@ -2467,31 +2460,31 @@ cmsInt32Number CheckGammaFloat(cmsFloat64Number g) if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); - if (!CheckGammaEstimation(Curve, g)) return 0; + if (!CheckGammaEstimation(ContextID, Curve, g)) return 0; - cmsFreeToneCurve(DbgThread(), Curve); + cmsFreeToneCurve(ContextID, Curve); return 1; } -static cmsInt32Number CheckGamma18(void) +static cmsInt32Number CheckGamma18(cmsContext ContextID) { - return CheckGammaFloat(1.8); + return CheckGammaFloat(ContextID, 1.8); } -static cmsInt32Number CheckGamma22(void) +static cmsInt32Number CheckGamma22(cmsContext ContextID) { - return CheckGammaFloat(2.2); + return CheckGammaFloat(ContextID, 2.2); } -static cmsInt32Number CheckGamma30(void) +static cmsInt32Number CheckGamma30(cmsContext ContextID) { - return CheckGammaFloat(3.0); + return CheckGammaFloat(ContextID, 3.0); } // Check table-based gamma functions static -cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g) +cmsInt32Number CheckGammaFloatTable(cmsContext ContextID, cmsFloat64Number g) { cmsFloat32Number Values[1025]; cmsToneCurve* Curve; @@ -2505,13 +2498,13 @@ cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g) Values[i] = powf(in, (float) g); } - Curve = cmsBuildTabulatedToneCurveFloat(DbgThread(), 1025, Values); + Curve = cmsBuildTabulatedToneCurveFloat(ContextID, 1025, Values); MaxErr = 0.0; for (i=0; i <= 0xffff; i++) { in = (cmsFloat32Number) (i / 65535.0); - out = cmsEvalToneCurveFloat(DbgThread(), Curve, in); + out = cmsEvalToneCurveFloat(ContextID, Curve, in); val = pow(in, g); Err = fabs(val - out); @@ -2520,31 +2513,31 @@ cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g) if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); - if (!CheckGammaEstimation(Curve, g)) return 0; + if (!CheckGammaEstimation(ContextID, Curve, g)) return 0; - cmsFreeToneCurve(DbgThread(), Curve); + cmsFreeToneCurve(ContextID, Curve); return 1; } -static cmsInt32Number CheckGamma18Table(void) +static cmsInt32Number CheckGamma18Table(cmsContext ContextID) { - return CheckGammaFloatTable(1.8); + return CheckGammaFloatTable(ContextID, 1.8); } -static cmsInt32Number CheckGamma22Table(void) +static cmsInt32Number CheckGamma22Table(cmsContext ContextID) { - return CheckGammaFloatTable(2.2); + return CheckGammaFloatTable(ContextID, 2.2); } -static cmsInt32Number CheckGamma30Table(void) +static cmsInt32Number CheckGamma30Table(cmsContext ContextID) { - return CheckGammaFloatTable(3.0); + return CheckGammaFloatTable(ContextID, 3.0); } // Create a curve from a table (which is a pure gamma function) and check it against the pow function. static -cmsInt32Number CheckGammaWordTable(cmsFloat64Number g) +cmsInt32Number CheckGammaWordTable(cmsContext ContextID, cmsFloat64Number g) { cmsUInt16Number Values[1025]; cmsToneCurve* Curve; @@ -2558,13 +2551,13 @@ cmsInt32Number CheckGammaWordTable(cmsFloat64Number g) Values[i] = (cmsUInt16Number) floor(pow(in, g) * 65535.0 + 0.5); } - Curve = cmsBuildTabulatedToneCurve16(DbgThread(), 1025, Values); + Curve = cmsBuildTabulatedToneCurve16(ContextID, 1025, Values); MaxErr = 0.0; for (i=0; i <= 0xffff; i++) { in = (cmsFloat32Number) (i / 65535.0); - out = cmsEvalToneCurveFloat(DbgThread(), Curve, in); + out = cmsEvalToneCurveFloat(ContextID, Curve, in); val = pow(in, g); Err = fabs(val - out); @@ -2573,45 +2566,45 @@ cmsInt32Number CheckGammaWordTable(cmsFloat64Number g) if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); - if (!CheckGammaEstimation(Curve, g)) return 0; + if (!CheckGammaEstimation(ContextID, Curve, g)) return 0; - cmsFreeToneCurve(DbgThread(), Curve); + cmsFreeToneCurve(ContextID, Curve); return 1; } -static cmsInt32Number CheckGamma18TableWord(void) +static cmsInt32Number CheckGamma18TableWord(cmsContext ContextID) { - return CheckGammaWordTable(1.8); + return CheckGammaWordTable(ContextID, 1.8); } -static cmsInt32Number CheckGamma22TableWord(void) +static cmsInt32Number CheckGamma22TableWord(cmsContext ContextID) { - return CheckGammaWordTable(2.2); + return CheckGammaWordTable(ContextID, 2.2); } -static cmsInt32Number CheckGamma30TableWord(void) +static cmsInt32Number CheckGamma30TableWord(cmsContext ContextID) { - return CheckGammaWordTable(3.0); + return CheckGammaWordTable(ContextID, 3.0); } // Curve joining test. Joining two high-gamma of 3.0 curves should // give something like linear static -cmsInt32Number CheckJointCurves(void) +cmsInt32Number CheckJointCurves(cmsContext ContextID) { cmsToneCurve *Forward, *Reverse, *Result; cmsBool rc; - Forward = cmsBuildGamma(DbgThread(), 3.0); - Reverse = cmsBuildGamma(DbgThread(), 3.0); + Forward = cmsBuildGamma(ContextID, 3.0); + Reverse = cmsBuildGamma(ContextID, 3.0); - Result = cmsJoinToneCurve(DbgThread(), Forward, Reverse, 256); + Result = cmsJoinToneCurve(ContextID, Forward, Reverse, 256); - cmsFreeToneCurve(DbgThread(), Forward); cmsFreeToneCurve(DbgThread(), Reverse); + cmsFreeToneCurve(ContextID, Forward); cmsFreeToneCurve(ContextID, Reverse); - rc = cmsIsToneCurveLinear(DbgThread(), Result); - cmsFreeToneCurve(DbgThread(), Result); + rc = cmsIsToneCurveLinear(ContextID, Result); + cmsFreeToneCurve(ContextID, Result); if (!rc) Fail("Joining same curve twice does not result in a linear ramp"); @@ -2622,10 +2615,10 @@ cmsInt32Number CheckJointCurves(void) // Create a gamma curve by cheating the table static -cmsToneCurve* GammaTableLinear(cmsInt32Number nEntries, cmsBool Dir) +cmsToneCurve* GammaTableLinear(cmsContext ContextID, cmsInt32Number nEntries, cmsBool Dir) { cmsInt32Number i; - cmsToneCurve* g = cmsBuildTabulatedToneCurve16(DbgThread(), nEntries, NULL); + cmsToneCurve* g = cmsBuildTabulatedToneCurve16(ContextID, nEntries, NULL); for (i=0; i < nEntries; i++) { @@ -2642,12 +2635,12 @@ cmsToneCurve* GammaTableLinear(cmsInt32Number nEntries, cmsBool Dir) static -cmsInt32Number CheckJointCurvesDescending(void) +cmsInt32Number CheckJointCurvesDescending(cmsContext ContextID) { cmsToneCurve *Forward, *Reverse, *Result; cmsInt32Number i, rc; - Forward = cmsBuildGamma(DbgThread(), 2.2); + Forward = cmsBuildGamma(ContextID, 2.2); // Fake the curve to be table-based @@ -2655,32 +2648,32 @@ cmsInt32Number CheckJointCurvesDescending(void) Forward ->Table16[i] = 0xffff - Forward->Table16[i]; Forward ->Segments[0].Type = 0; - Reverse = cmsReverseToneCurve(DbgThread(), Forward); + Reverse = cmsReverseToneCurve(ContextID, Forward); - Result = cmsJoinToneCurve(DbgThread(), Reverse, Reverse, 256); + Result = cmsJoinToneCurve(ContextID, Reverse, Reverse, 256); - cmsFreeToneCurve(DbgThread(), Forward); - cmsFreeToneCurve(DbgThread(), Reverse); + cmsFreeToneCurve(ContextID, Forward); + cmsFreeToneCurve(ContextID, Reverse); - rc = cmsIsToneCurveLinear(DbgThread(), Result); - cmsFreeToneCurve(DbgThread(), Result); + rc = cmsIsToneCurveLinear(ContextID, Result); + cmsFreeToneCurve(ContextID, Result); return rc; } static -cmsInt32Number CheckFToneCurvePoint(cmsToneCurve* c, cmsUInt16Number Point, cmsInt32Number Value) +cmsInt32Number CheckFToneCurvePoint(cmsContext ContextID, cmsToneCurve* c, cmsUInt16Number Point, cmsInt32Number Value) { cmsInt32Number Result; - Result = cmsEvalToneCurve16(DbgThread(), c, Point); + Result = cmsEvalToneCurve16(ContextID, c, Point); return (abs(Value - Result) < 2); } static -cmsInt32Number CheckReverseDegenerated(void) +cmsInt32Number CheckReverseDegenerated(cmsContext ContextID) { cmsToneCurve* p, *g; cmsUInt16Number Tab[16]; @@ -2702,21 +2695,21 @@ cmsInt32Number CheckReverseDegenerated(void) Tab[14]= 0xffff; Tab[15]= 0xffff; - p = cmsBuildTabulatedToneCurve16(DbgThread(), 16, Tab); - g = cmsReverseToneCurve(DbgThread(), p); + p = cmsBuildTabulatedToneCurve16(ContextID, 16, Tab); + g = cmsReverseToneCurve(ContextID, p); // Now let's check some points - if (!CheckFToneCurvePoint(g, 0x5555, 0x5555)) return 0; - if (!CheckFToneCurvePoint(g, 0x7777, 0x7777)) return 0; + if (!CheckFToneCurvePoint(ContextID, g, 0x5555, 0x5555)) return 0; + if (!CheckFToneCurvePoint(ContextID, g, 0x7777, 0x7777)) return 0; // First point for zero - if (!CheckFToneCurvePoint(g, 0x0000, 0x4444)) return 0; + if (!CheckFToneCurvePoint(ContextID, g, 0x0000, 0x4444)) return 0; // Last point - if (!CheckFToneCurvePoint(g, 0xFFFF, 0xFFFF)) return 0; + if (!CheckFToneCurvePoint(ContextID, g, 0xFFFF, 0xFFFF)) return 0; - cmsFreeToneCurve(DbgThread(), p); - cmsFreeToneCurve(DbgThread(), g); + cmsFreeToneCurve(ContextID, p); + cmsFreeToneCurve(ContextID, g); return 1; } @@ -2724,7 +2717,7 @@ cmsInt32Number CheckReverseDegenerated(void) // Build a parametric sRGB-like curve static -cmsToneCurve* Build_sRGBGamma(void) +cmsToneCurve* Build_sRGBGamma(cmsContext ContextID) { cmsFloat64Number Parameters[5]; @@ -2734,14 +2727,14 @@ cmsToneCurve* Build_sRGBGamma(void) Parameters[3] = 1. / 12.92; Parameters[4] = 0.04045; // d - return cmsBuildParametricToneCurve(DbgThread(), 4, Parameters); + return cmsBuildParametricToneCurve(ContextID, 4, Parameters); } // Join two gamma tables in floating point format. Result should be a straight line static -cmsToneCurve* CombineGammaFloat(cmsToneCurve* g1, cmsToneCurve* g2) +cmsToneCurve* CombineGammaFloat(cmsContext ContextID, cmsToneCurve* g1, cmsToneCurve* g2) { cmsUInt16Number Tab[256]; cmsFloat32Number f; @@ -2750,17 +2743,17 @@ cmsToneCurve* CombineGammaFloat(cmsToneCurve* g1, cmsToneCurve* g2) for (i=0; i < 256; i++) { f = (cmsFloat32Number) i / 255.0F; - f = cmsEvalToneCurveFloat(DbgThread(), g2, cmsEvalToneCurveFloat(DbgThread(), g1, f)); + f = cmsEvalToneCurveFloat(ContextID, g2, cmsEvalToneCurveFloat(ContextID, g1, f)); Tab[i] = (cmsUInt16Number) floor(f * 65535.0 + 0.5); } - return cmsBuildTabulatedToneCurve16(DbgThread(), 256, Tab); + return cmsBuildTabulatedToneCurve16(ContextID, 256, Tab); } // Same of anterior, but using quantized tables static -cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2) +cmsToneCurve* CombineGamma16(cmsContext ContextID, cmsToneCurve* g1, cmsToneCurve* g2) { cmsUInt16Number Tab[256]; @@ -2771,42 +2764,42 @@ cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2) cmsUInt16Number wValIn; wValIn = _cmsQuantizeVal(i, 256); - Tab[i] = cmsEvalToneCurve16(DbgThread(), g2, cmsEvalToneCurve16(DbgThread(), g1, wValIn)); + Tab[i] = cmsEvalToneCurve16(ContextID, g2, cmsEvalToneCurve16(ContextID, g1, wValIn)); } - return cmsBuildTabulatedToneCurve16(DbgThread(), 256, Tab); + return cmsBuildTabulatedToneCurve16(ContextID, 256, Tab); } static -cmsInt32Number CheckJointFloatCurves_sRGB(void) +cmsInt32Number CheckJointFloatCurves_sRGB(cmsContext ContextID) { cmsToneCurve *Forward, *Reverse, *Result; cmsBool rc; - Forward = Build_sRGBGamma(); - Reverse = cmsReverseToneCurve(DbgThread(), Forward); - Result = CombineGammaFloat(Forward, Reverse); - cmsFreeToneCurve(DbgThread(), Forward); cmsFreeToneCurve(DbgThread(), Reverse); + Forward = Build_sRGBGamma(ContextID); + Reverse = cmsReverseToneCurve(ContextID, Forward); + Result = CombineGammaFloat(ContextID, Forward, Reverse); + cmsFreeToneCurve(ContextID, Forward); cmsFreeToneCurve(ContextID, Reverse); - rc = cmsIsToneCurveLinear(DbgThread(), Result); - cmsFreeToneCurve(DbgThread(), Result); + rc = cmsIsToneCurveLinear(ContextID, Result); + cmsFreeToneCurve(ContextID, Result); return rc; } static -cmsInt32Number CheckJoint16Curves_sRGB(void) +cmsInt32Number CheckJoint16Curves_sRGB(cmsContext ContextID) { cmsToneCurve *Forward, *Reverse, *Result; cmsBool rc; - Forward = Build_sRGBGamma(); - Reverse = cmsReverseToneCurve(DbgThread(), Forward); - Result = CombineGamma16(Forward, Reverse); - cmsFreeToneCurve(DbgThread(), Forward); cmsFreeToneCurve(DbgThread(), Reverse); + Forward = Build_sRGBGamma(ContextID); + Reverse = cmsReverseToneCurve(ContextID, Forward); + Result = CombineGamma16(ContextID, Forward, Reverse); + cmsFreeToneCurve(ContextID, Forward); cmsFreeToneCurve(ContextID, Reverse); - rc = cmsIsToneCurveLinear(DbgThread(), Result); - cmsFreeToneCurve(DbgThread(), Result); + rc = cmsIsToneCurveLinear(ContextID, Result); + cmsFreeToneCurve(ContextID, Result); return rc; } @@ -2814,21 +2807,21 @@ cmsInt32Number CheckJoint16Curves_sRGB(void) // sigmoidal curve f(x) = (1-x^g) ^(1/g) static -cmsInt32Number CheckJointCurvesSShaped(void) +cmsInt32Number CheckJointCurvesSShaped(cmsContext ContextID) { cmsFloat64Number p = 3.2; cmsToneCurve *Forward, *Reverse, *Result; cmsInt32Number rc; - Forward = cmsBuildParametricToneCurve(DbgThread(), 108, &p); - Reverse = cmsReverseToneCurve(DbgThread(), Forward); - Result = cmsJoinToneCurve(DbgThread(), Forward, Forward, 4096); + Forward = cmsBuildParametricToneCurve(ContextID, 108, &p); + Reverse = cmsReverseToneCurve(ContextID, Forward); + Result = cmsJoinToneCurve(ContextID, Forward, Forward, 4096); - cmsFreeToneCurve(DbgThread(), Forward); - cmsFreeToneCurve(DbgThread(), Reverse); + cmsFreeToneCurve(ContextID, Forward); + cmsFreeToneCurve(ContextID, Reverse); - rc = cmsIsToneCurveLinear(DbgThread(), Result); - cmsFreeToneCurve(DbgThread(), Result); + rc = cmsIsToneCurveLinear(ContextID, Result); + cmsFreeToneCurve(ContextID, Result); return rc; } @@ -2972,15 +2965,15 @@ cmsFloat32Number sigmoidal(cmsFloat32Number x, const cmsFloat64Number Params[]) static -cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type, const cmsFloat64Number Params[]) +cmsBool CheckSingleParametric(cmsContext ContextID, const char* Name, dblfnptr fn, cmsInt32Number Type, const cmsFloat64Number Params[]) { cmsInt32Number i; cmsToneCurve* tc; cmsToneCurve* tc_1; char InverseText[256]; - tc = cmsBuildParametricToneCurve(DbgThread(), Type, Params); - tc_1 = cmsBuildParametricToneCurve(DbgThread(), -Type, Params); + tc = cmsBuildParametricToneCurve(ContextID, Type, Params); + tc_1 = cmsBuildParametricToneCurve(ContextID, -Type, Params); for (i=0; i <= 1000; i++) { @@ -2988,8 +2981,8 @@ cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type cmsFloat32Number y_fn, y_param, x_param, y_param2; y_fn = fn(x, Params); - y_param = cmsEvalToneCurveFloat(DbgThread(), tc, x); - x_param = cmsEvalToneCurveFloat(DbgThread(), tc_1, y_param); + y_param = cmsEvalToneCurveFloat(ContextID, tc, x); + x_param = cmsEvalToneCurveFloat(ContextID, tc_1, y_param); y_param2 = fn(x_param, Params); @@ -3001,19 +2994,19 @@ cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type goto Error; } - cmsFreeToneCurve(DbgThread(), tc); - cmsFreeToneCurve(DbgThread(), tc_1); + cmsFreeToneCurve(ContextID, tc); + cmsFreeToneCurve(ContextID, tc_1); return TRUE; Error: - cmsFreeToneCurve(DbgThread(), tc); - cmsFreeToneCurve(DbgThread(), tc_1); + cmsFreeToneCurve(ContextID, tc); + cmsFreeToneCurve(ContextID, tc_1); return FALSE; } // Check against some known values static -cmsInt32Number CheckParametricToneCurves(void) +cmsInt32Number CheckParametricToneCurves(cmsContext ContextID) { cmsFloat64Number Params[10]; @@ -3021,7 +3014,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[0] = 2.2; - if (!CheckSingleParametric("Gamma", Gamma, 1, Params)) return 0; + if (!CheckSingleParametric(ContextID, "Gamma", Gamma, 1, Params)) return 0; // 2) CIE 122-1966 // Y = (aX + b)^Gamma | X >= -b/a @@ -3031,7 +3024,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[1] = 1.5; Params[2] = -0.5; - if (!CheckSingleParametric("CIE122-1966", CIE122, 2, Params)) return 0; + if (!CheckSingleParametric(ContextID, "CIE122-1966", CIE122, 2, Params)) return 0; // 3) IEC 61966-3 // Y = (aX + b)^Gamma | X <= -b/a @@ -3043,7 +3036,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[3] = 0.3; - if (!CheckSingleParametric("IEC 61966-3", IEC61966_3, 3, Params)) return 0; + if (!CheckSingleParametric(ContextID, "IEC 61966-3", IEC61966_3, 3, Params)) return 0; // 4) IEC 61966-2.1 (sRGB) // Y = (aX + b)^Gamma | X >= d @@ -3055,7 +3048,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[3] = 1. / 12.92; Params[4] = 0.04045; - if (!CheckSingleParametric("IEC 61966-2.1", IEC61966_21, 4, Params)) return 0; + if (!CheckSingleParametric(ContextID, "IEC 61966-2.1", IEC61966_21, 4, Params)) return 0; // 5) Y = (aX + b)^Gamma + e | X >= d @@ -3069,7 +3062,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[5] = 0.5; Params[6] = 0.2; - if (!CheckSingleParametric("param_5", param_5, 5, Params)) return 0; + if (!CheckSingleParametric(ContextID, "param_5", param_5, 5, Params)) return 0; // 6) Y = (aX + b) ^ Gamma + c @@ -3078,7 +3071,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[2] = 0.2; Params[3] = 0.3; - if (!CheckSingleParametric("param_6", param_6, 6, Params)) return 0; + if (!CheckSingleParametric(ContextID, "param_6", param_6, 6, Params)) return 0; // 7) Y = a * log (b * X^Gamma + c) + d @@ -3088,7 +3081,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[3] = 0.02; Params[4] = 0.1; - if (!CheckSingleParametric("param_7", param_7, 7, Params)) return 0; + if (!CheckSingleParametric(ContextID, "param_7", param_7, 7, Params)) return 0; // 8) Y = a * b ^ (c*X+d) + e @@ -3098,12 +3091,12 @@ cmsInt32Number CheckParametricToneCurves(void) Params[3] = 0.1; Params[4] = 0.2; - if (!CheckSingleParametric("param_8", param_8, 8, Params)) return 0; + if (!CheckSingleParametric(ContextID, "param_8", param_8, 8, Params)) return 0; // 108: S-Shaped: (1 - (1-x)^1/g)^1/g Params[0] = 1.9; - if (!CheckSingleParametric("sigmoidal", sigmoidal, 108, Params)) return 0; + if (!CheckSingleParametric(ContextID, "sigmoidal", sigmoidal, 108, Params)) return 0; // All OK @@ -3113,38 +3106,38 @@ cmsInt32Number CheckParametricToneCurves(void) // LUT checks ------------------------------------------------------------------------------ static -cmsInt32Number CheckLUTcreation(void) +cmsInt32Number CheckLUTcreation(cmsContext ContextID) { cmsPipeline* lut; cmsPipeline* lut2; cmsInt32Number n1, n2; - lut = cmsPipelineAlloc(DbgThread(), 1, 1); - n1 = cmsPipelineStageCount(DbgThread(), lut); - lut2 = cmsPipelineDup(DbgThread(), lut); - n2 = cmsPipelineStageCount(DbgThread(), lut2); + lut = cmsPipelineAlloc(ContextID, 1, 1); + n1 = cmsPipelineStageCount(ContextID, lut); + lut2 = cmsPipelineDup(ContextID, lut); + n2 = cmsPipelineStageCount(ContextID, lut2); - cmsPipelineFree(DbgThread(), lut); - cmsPipelineFree(DbgThread(), lut2); + cmsPipelineFree(ContextID, lut); + cmsPipelineFree(ContextID, lut2); return (n1 == 0) && (n2 == 0); } // Create a MPE for a identity matrix static -void AddIdentityMatrix(cmsPipeline* lut) +void AddIdentityMatrix(cmsContext ContextID, cmsPipeline* lut) { const cmsFloat64Number Identity[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }; - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, cmsStageAllocMatrix(DbgThread(), 3, 3, Identity, NULL)); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, Identity, NULL)); } // Create a MPE for identity cmsFloat32Number CLUT static -void AddIdentityCLUTfloat(cmsPipeline* lut) +void AddIdentityCLUTfloat(cmsContext ContextID, cmsPipeline* lut) { const cmsFloat32Number Table[] = { @@ -3161,12 +3154,12 @@ void AddIdentityCLUTfloat(cmsPipeline* lut) 1.0, 1.0, 1.0 }; - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, cmsStageAllocCLutFloat(DbgThread(), 2, 3, 3, Table)); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, cmsStageAllocCLutFloat(ContextID, 2, 3, 3, Table)); } // Create a MPE for identity cmsFloat32Number CLUT static -void AddIdentityCLUT16(cmsPipeline* lut) +void AddIdentityCLUT16(cmsContext ContextID, cmsPipeline* lut) { const cmsUInt16Number Table[] = { @@ -3184,30 +3177,30 @@ void AddIdentityCLUT16(cmsPipeline* lut) }; - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table)); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, cmsStageAllocCLut16bit(ContextID, 2, 3, 3, Table)); } // Create a 3 fn identity curves static -void Add3GammaCurves(cmsPipeline* lut, cmsFloat64Number Curve) +void Add3GammaCurves(cmsContext ContextID, cmsPipeline* lut, cmsFloat64Number Curve) { - cmsToneCurve* id = cmsBuildGamma(DbgThread(), Curve); + cmsToneCurve* id = cmsBuildGamma(ContextID, Curve); cmsToneCurve* id3[3]; id3[0] = id; id3[1] = id; id3[2] = id; - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, id3)); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, id3)); - cmsFreeToneCurve(DbgThread(), id); + cmsFreeToneCurve(ContextID, id); } static -cmsInt32Number CheckFloatLUT(cmsPipeline* lut) +cmsInt32Number CheckFloatLUT(cmsContext ContextID, cmsPipeline* lut) { cmsInt32Number n1, i, j; cmsFloat32Number Inf[3], Outf[3]; @@ -3219,7 +3212,7 @@ cmsInt32Number CheckFloatLUT(cmsPipeline* lut) cmsInt32Number af[3]; Inf[0] = Inf[1] = Inf[2] = (cmsFloat32Number) j / 65535.0F; - cmsPipelineEvalFloat(DbgThread(), Inf, Outf, lut); + cmsPipelineEvalFloat(ContextID, Inf, Outf, lut); af[0] = (cmsInt32Number) floor(Outf[0]*65535.0 + 0.5); af[1] = (cmsInt32Number) floor(Outf[1]*65535.0 + 0.5); @@ -3239,7 +3232,7 @@ cmsInt32Number CheckFloatLUT(cmsPipeline* lut) static -cmsInt32Number Check16LUT(cmsPipeline* lut) +cmsInt32Number Check16LUT(cmsContext ContextID, cmsPipeline* lut) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[3], Outw[3]; @@ -3251,7 +3244,7 @@ cmsInt32Number Check16LUT(cmsPipeline* lut) cmsInt32Number aw[3]; Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; - cmsPipelineEval16(DbgThread(), Inw, Outw, lut); + cmsPipelineEval16(ContextID, Inw, Outw, lut); aw[0] = Outw[0]; aw[1] = Outw[1]; aw[2] = Outw[2]; @@ -3271,205 +3264,205 @@ cmsInt32Number Check16LUT(cmsPipeline* lut) // Check any LUT that is linear static -cmsInt32Number CheckStagesLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages) +cmsInt32Number CheckStagesLUT(cmsContext ContextID, cmsPipeline* lut, cmsInt32Number ExpectedStages) { cmsInt32Number nInpChans, nOutpChans, nStages; - nInpChans = cmsPipelineInputChannels(DbgThread(), lut); - nOutpChans = cmsPipelineOutputChannels(DbgThread(), lut); - nStages = cmsPipelineStageCount(DbgThread(), lut); + nInpChans = cmsPipelineInputChannels(ContextID, lut); + nOutpChans = cmsPipelineOutputChannels(ContextID, lut); + nStages = cmsPipelineStageCount(ContextID, lut); return (nInpChans == 3) && (nOutpChans == 3) && (nStages == ExpectedStages); } static -cmsInt32Number CheckFullLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages) +cmsInt32Number CheckFullLUT(cmsContext ContextID, cmsPipeline* lut, cmsInt32Number ExpectedStages) { - cmsInt32Number rc = CheckStagesLUT(lut, ExpectedStages) && Check16LUT(lut) && CheckFloatLUT(lut); + cmsInt32Number rc = CheckStagesLUT(ContextID, lut, ExpectedStages) && Check16LUT(ContextID, lut) && CheckFloatLUT(ContextID, lut); - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return rc; } static -cmsInt32Number Check1StageLUT(void) +cmsInt32Number Check1StageLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - return CheckFullLUT(lut, 1); + AddIdentityMatrix(ContextID, lut); + return CheckFullLUT(ContextID, lut, 1); } static -cmsInt32Number Check2StageLUT(void) +cmsInt32Number Check2StageLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - AddIdentityCLUTfloat(lut); + AddIdentityMatrix(ContextID, lut); + AddIdentityCLUTfloat(ContextID, lut); - return CheckFullLUT(lut, 2); + return CheckFullLUT(ContextID, lut, 2); } static -cmsInt32Number Check2Stage16LUT(void) +cmsInt32Number Check2Stage16LUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - AddIdentityCLUT16(lut); + AddIdentityMatrix(ContextID, lut); + AddIdentityCLUT16(ContextID, lut); - return CheckFullLUT(lut, 2); + return CheckFullLUT(ContextID, lut, 2); } static -cmsInt32Number Check3StageLUT(void) +cmsInt32Number Check3StageLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - AddIdentityCLUTfloat(lut); - Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(ContextID, lut); + AddIdentityCLUTfloat(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); - return CheckFullLUT(lut, 3); + return CheckFullLUT(ContextID, lut, 3); } static -cmsInt32Number Check3Stage16LUT(void) +cmsInt32Number Check3Stage16LUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - AddIdentityCLUT16(lut); - Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(ContextID, lut); + AddIdentityCLUT16(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); - return CheckFullLUT(lut, 3); + return CheckFullLUT(ContextID, lut, 3); } static -cmsInt32Number Check4StageLUT(void) +cmsInt32Number Check4StageLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - AddIdentityCLUTfloat(lut); - Add3GammaCurves(lut, 1.0); - AddIdentityMatrix(lut); + AddIdentityMatrix(ContextID, lut); + AddIdentityCLUTfloat(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); + AddIdentityMatrix(ContextID, lut); - return CheckFullLUT(lut, 4); + return CheckFullLUT(ContextID, lut, 4); } static -cmsInt32Number Check4Stage16LUT(void) +cmsInt32Number Check4Stage16LUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - AddIdentityCLUT16(lut); - Add3GammaCurves(lut, 1.0); - AddIdentityMatrix(lut); + AddIdentityMatrix(ContextID, lut); + AddIdentityCLUT16(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); + AddIdentityMatrix(ContextID, lut); - return CheckFullLUT(lut, 4); + return CheckFullLUT(ContextID, lut, 4); } static -cmsInt32Number Check5StageLUT(void) +cmsInt32Number Check5StageLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - AddIdentityCLUTfloat(lut); - Add3GammaCurves(lut, 1.0); - AddIdentityMatrix(lut); - Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(ContextID, lut); + AddIdentityCLUTfloat(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); + AddIdentityMatrix(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); - return CheckFullLUT(lut, 5); + return CheckFullLUT(ContextID, lut, 5); } static -cmsInt32Number Check5Stage16LUT(void) +cmsInt32Number Check5Stage16LUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - AddIdentityCLUT16(lut); - Add3GammaCurves(lut, 1.0); - AddIdentityMatrix(lut); - Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(ContextID, lut); + AddIdentityCLUT16(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); + AddIdentityMatrix(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); - return CheckFullLUT(lut, 5); + return CheckFullLUT(ContextID, lut, 5); } static -cmsInt32Number Check6StageLUT(void) +cmsInt32Number Check6StageLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - Add3GammaCurves(lut, 1.0); - AddIdentityCLUTfloat(lut); - Add3GammaCurves(lut, 1.0); - AddIdentityMatrix(lut); - Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); + AddIdentityCLUTfloat(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); + AddIdentityMatrix(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); - return CheckFullLUT(lut, 6); + return CheckFullLUT(ContextID, lut, 6); } static -cmsInt32Number Check6Stage16LUT(void) +cmsInt32Number Check6Stage16LUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); - AddIdentityMatrix(lut); - Add3GammaCurves(lut, 1.0); - AddIdentityCLUT16(lut); - Add3GammaCurves(lut, 1.0); - AddIdentityMatrix(lut); - Add3GammaCurves(lut, 1.0); + AddIdentityMatrix(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); + AddIdentityCLUT16(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); + AddIdentityMatrix(ContextID, lut); + Add3GammaCurves(ContextID, lut, 1.0); - return CheckFullLUT(lut, 6); + return CheckFullLUT(ContextID, lut, 6); } static -cmsInt32Number CheckLab2LabLUT(void) +cmsInt32Number CheckLab2LabLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); cmsInt32Number rc; - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocLab2XYZ(ContextID)); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocXYZ2Lab(ContextID)); - rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 2); + rc = CheckFloatLUT(ContextID, lut) && CheckStagesLUT(ContextID, lut, 2); - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return rc; } static -cmsInt32Number CheckXYZ2XYZLUT(void) +cmsInt32Number CheckXYZ2XYZLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); cmsInt32Number rc; - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocXYZ2Lab(ContextID)); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocLab2XYZ(ContextID)); - rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 2); + rc = CheckFloatLUT(ContextID, lut) && CheckStagesLUT(ContextID, lut, 2); - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return rc; } @@ -3477,26 +3470,26 @@ cmsInt32Number CheckXYZ2XYZLUT(void) static -cmsInt32Number CheckLab2LabMatLUT(void) +cmsInt32Number CheckLab2LabMatLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); cmsInt32Number rc; - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); - AddIdentityMatrix(lut); - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocLab2XYZ(ContextID)); + AddIdentityMatrix(ContextID, lut); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocXYZ2Lab(ContextID)); - rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 3); + rc = CheckFloatLUT(ContextID, lut) && CheckStagesLUT(ContextID, lut, 3); - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return rc; } static -cmsInt32Number CheckNamedColorLUT(void) +cmsInt32Number CheckNamedColorLUT(cmsContext ContextID) { - cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); + cmsPipeline* lut = cmsPipelineAlloc(ContextID, 3, 3); cmsNAMEDCOLORLIST* nc; cmsInt32Number i,j, rc = 1, n2; cmsUInt16Number PCS[3]; @@ -3506,7 +3499,7 @@ cmsInt32Number CheckNamedColorLUT(void) - nc = cmsAllocNamedColorList(DbgThread(), 256, 3, "pre", "post"); + nc = cmsAllocNamedColorList(ContextID, 256, 3, "pre", "post"); if (nc == NULL) return 0; for (i=0; i < 256; i++) { @@ -3515,12 +3508,12 @@ cmsInt32Number CheckNamedColorLUT(void) Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) i; sprintf(Name, "#%d", i); - if (!cmsAppendNamedColor(DbgThread(), nc, Name, PCS, Colorant)) { rc = 0; break; } + if (!cmsAppendNamedColor(ContextID, nc, Name, PCS, Colorant)) { rc = 0; break; } } - cmsPipelineInsertStage(DbgThread(), lut, cmsAT_END, _cmsStageAllocNamedColor(DbgThread(), nc, FALSE)); + cmsPipelineInsertStage(ContextID, lut, cmsAT_END, _cmsStageAllocNamedColor(ContextID, nc, FALSE)); - cmsFreeNamedColorList(DbgThread(), nc); + cmsFreeNamedColorList(ContextID, nc); if (rc == 0) return 0; n2=0; @@ -3529,7 +3522,7 @@ cmsInt32Number CheckNamedColorLUT(void) Inw[0] = (cmsUInt16Number) j; - cmsPipelineEval16(DbgThread(), Inw, Outw, lut); + cmsPipelineEval16(ContextID, Inw, Outw, lut); for (i=0; i < 3; i++) { if (Outw[i] != j) { @@ -3539,7 +3532,7 @@ cmsInt32Number CheckNamedColorLUT(void) } - cmsPipelineFree(DbgThread(), lut); + cmsPipelineFree(ContextID, lut); return (n2 == 0); } @@ -3550,7 +3543,7 @@ cmsInt32Number CheckNamedColorLUT(void) // A lightweight test of multilocalized unicode structures. static -cmsInt32Number CheckMLU(void) +cmsInt32Number CheckMLU(cmsContext ContextID) { cmsMLU* mlu, *mlu2, *mlu3; char Buffer[256], Buffer2[256]; @@ -3559,40 +3552,40 @@ cmsInt32Number CheckMLU(void) cmsHPROFILE h= NULL; // Allocate a MLU structure, no preferred size - mlu = cmsMLUalloc(DbgThread(), 0); + mlu = cmsMLUalloc(ContextID, 0); // Add some localizations - cmsMLUsetWide(DbgThread(), mlu, "en", "US", L"Hello, world"); - cmsMLUsetWide(DbgThread(), mlu, "es", "ES", L"Hola, mundo"); - cmsMLUsetWide(DbgThread(), mlu, "fr", "FR", L"Bonjour, le monde"); - cmsMLUsetWide(DbgThread(), mlu, "ca", "CA", L"Hola, mon"); + cmsMLUsetWide(ContextID, mlu, "en", "US", L"Hello, world"); + cmsMLUsetWide(ContextID, mlu, "es", "ES", L"Hola, mundo"); + cmsMLUsetWide(ContextID, mlu, "fr", "FR", L"Bonjour, le monde"); + cmsMLUsetWide(ContextID, mlu, "ca", "CA", L"Hola, mon"); // Check the returned string for each language - cmsMLUgetASCII(DbgThread(), mlu, "en", "US", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "en", "US", Buffer, 256); if (strcmp(Buffer, "Hello, world") != 0) rc = 0; - cmsMLUgetASCII(DbgThread(), mlu, "es", "ES", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "es", "ES", Buffer, 256); if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0; - cmsMLUgetASCII(DbgThread(), mlu, "fr", "FR", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "fr", "FR", Buffer, 256); if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0; - cmsMLUgetASCII(DbgThread(), mlu, "ca", "CA", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "ca", "CA", Buffer, 256); if (strcmp(Buffer, "Hola, mon") != 0) rc = 0; if (rc == 0) Fail("Unexpected string '%s'", Buffer); // So far, so good. - cmsMLUfree(DbgThread(), mlu); + cmsMLUfree(ContextID, mlu); // Now for performance, allocate an empty struct - mlu = cmsMLUalloc(DbgThread(), 0); + mlu = cmsMLUalloc(ContextID, 0); // Fill it with several thousands of different lenguages for (i=0; i < 4096; i++) { @@ -3604,14 +3597,14 @@ cmsInt32Number CheckMLU(void) Lang[2] = 0; sprintf(Buffer, "String #%i", i); - cmsMLUsetASCII(DbgThread(), mlu, Lang, Lang, Buffer); + cmsMLUsetASCII(ContextID, mlu, Lang, Lang, Buffer); } // Duplicate it - mlu2 = cmsMLUdup(DbgThread(), mlu); + mlu2 = cmsMLUdup(ContextID, mlu); // Get rid of original - cmsMLUfree(DbgThread(), mlu); + cmsMLUfree(ContextID, mlu); // Check all is still in place for (i=0; i < 4096; i++) { @@ -3622,7 +3615,7 @@ cmsInt32Number CheckMLU(void) Lang[1] = (char)(i / 255); Lang[2] = 0; - cmsMLUgetASCII(DbgThread(), mlu2, Lang, Lang, Buffer2, 256); + cmsMLUgetASCII(ContextID, mlu2, Lang, Lang, Buffer2, 256); sprintf(Buffer, "String #%i", i); if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; } @@ -3633,18 +3626,18 @@ cmsInt32Number CheckMLU(void) // Check profile IO - h = cmsOpenProfileFromFile(DbgThread(), "mlucheck.icc", "w"); + h = cmsOpenProfileFromFile(ContextID, "mlucheck.icc", "w"); - cmsSetProfileVersion(DbgThread(), h, 4.3); + cmsSetProfileVersion(ContextID, h, 4.3); - cmsWriteTag(DbgThread(), h, cmsSigProfileDescriptionTag, mlu2); - cmsCloseProfile(DbgThread(), h); - cmsMLUfree(DbgThread(), mlu2); + cmsWriteTag(ContextID, h, cmsSigProfileDescriptionTag, mlu2); + cmsCloseProfile(ContextID, h); + cmsMLUfree(ContextID, mlu2); - h = cmsOpenProfileFromFile(DbgThread(), "mlucheck.icc", "r"); + h = cmsOpenProfileFromFile(ContextID, "mlucheck.icc", "r"); - mlu3 = (cmsMLU *) cmsReadTag(DbgThread(), h, cmsSigProfileDescriptionTag); + mlu3 = (cmsMLU *) cmsReadTag(ContextID, h, cmsSigProfileDescriptionTag); if (mlu3 == NULL) { Fail("Profile didn't get the MLU\n"); rc = 0; goto Error; } // Check all is still in place @@ -3656,7 +3649,7 @@ cmsInt32Number CheckMLU(void) Lang[1] = (char) (i / 255); Lang[2] = 0; - cmsMLUgetASCII(DbgThread(), mlu3, Lang, Lang, Buffer2, 256); + cmsMLUgetASCII(ContextID, mlu3, Lang, Lang, Buffer2, 256); sprintf(Buffer, "String #%i", i); if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; } @@ -3666,7 +3659,7 @@ cmsInt32Number CheckMLU(void) Error: - if (h != NULL) cmsCloseProfile(DbgThread(), h); + if (h != NULL) cmsCloseProfile(ContextID, h); remove("mlucheck.icc"); return rc; @@ -3675,7 +3668,7 @@ Error: // A lightweight test of named color structures. static -cmsInt32Number CheckNamedColorList(void) +cmsInt32Number CheckNamedColorList(cmsContext ContextID) { cmsNAMEDCOLORLIST* nc = NULL, *nc2; cmsInt32Number i, j, rc=1; @@ -3687,7 +3680,7 @@ cmsInt32Number CheckNamedColorList(void) cmsUInt16Number CheckColorant[cmsMAXCHANNELS]; cmsHPROFILE h; - nc = cmsAllocNamedColorList(DbgThread(), 0, 4, "prefix", "suffix"); + nc = cmsAllocNamedColorList(ContextID, 0, 4, "prefix", "suffix"); if (nc == NULL) return 0; for (i=0; i < 4096; i++) { @@ -3697,7 +3690,7 @@ cmsInt32Number CheckNamedColorList(void) Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) (4096 - i); sprintf(Name, "#%d", i); - if (!cmsAppendNamedColor(DbgThread(), nc, Name, PCS, Colorant)) { rc = 0; break; } + if (!cmsAppendNamedColor(ContextID, nc, Name, PCS, Colorant)) { rc = 0; break; } } for (i=0; i < 4096; i++) { @@ -3706,7 +3699,7 @@ cmsInt32Number CheckNamedColorList(void) CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (4096 - i); sprintf(CheckName, "#%d", i); - if (!cmsNamedColorInfo(DbgThread(), nc, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; } + if (!cmsNamedColorInfo(ContextID, nc, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; } for (j=0; j < 3; j++) { @@ -3720,19 +3713,19 @@ cmsInt32Number CheckNamedColorList(void) if (strcmp(Name, CheckName) != 0) {rc = 0; Fail("Invalid Name"); goto Error; }; } - h = cmsOpenProfileFromFile(DbgThread(), "namedcol.icc", "w"); + h = cmsOpenProfileFromFile(ContextID, "namedcol.icc", "w"); if (h == NULL) return 0; - if (!cmsWriteTag(DbgThread(), h, cmsSigNamedColor2Tag, nc)) return 0; - cmsCloseProfile(DbgThread(), h); - cmsFreeNamedColorList(DbgThread(), nc); + if (!cmsWriteTag(ContextID, h, cmsSigNamedColor2Tag, nc)) return 0; + cmsCloseProfile(ContextID, h); + cmsFreeNamedColorList(ContextID, nc); nc = NULL; - h = cmsOpenProfileFromFile(DbgThread(), "namedcol.icc", "r"); - nc2 = (cmsNAMEDCOLORLIST *) cmsReadTag(DbgThread(), h, cmsSigNamedColor2Tag); + h = cmsOpenProfileFromFile(ContextID, "namedcol.icc", "r"); + nc2 = (cmsNAMEDCOLORLIST *) cmsReadTag(ContextID, h, cmsSigNamedColor2Tag); - if (cmsNamedColorCount(DbgThread(), nc2) != 4096) { rc = 0; Fail("Invalid count"); goto Error; } + if (cmsNamedColorCount(ContextID, nc2) != 4096) { rc = 0; Fail("Invalid count"); goto Error; } - i = cmsNamedColorIndex(DbgThread(), nc2, "#123"); + i = cmsNamedColorIndex(ContextID, nc2, "#123"); if (i != 123) { rc = 0; Fail("Invalid index"); goto Error; } @@ -3742,7 +3735,7 @@ cmsInt32Number CheckNamedColorList(void) CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (4096 - i); sprintf(CheckName, "#%d", i); - if (!cmsNamedColorInfo(DbgThread(), nc2, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; } + if (!cmsNamedColorInfo(ContextID, nc2, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; } for (j=0; j < 3; j++) { @@ -3756,11 +3749,11 @@ cmsInt32Number CheckNamedColorList(void) if (strcmp(Name, CheckName) != 0) {rc = 0; Fail("Invalid Name"); goto Error; }; } - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); remove("namedcol.icc"); Error: - if (nc != NULL) cmsFreeNamedColorList(DbgThread(), nc); + if (nc != NULL) cmsFreeNamedColorList(ContextID, nc); return rc; } @@ -3813,9 +3806,9 @@ void CheckSingleFormatter16(cmsContext id, cmsUInt32Number Type, const char* Tex Values[i] <<= 8; } - b.Fmt16(DbgThread(), &info, Values, Buffer, 2); + b.Fmt16(id, &info, Values, Buffer, 2); memset(Values, 0, sizeof(Values)); - f.Fmt16(DbgThread(), &info, Values, Buffer, 2); + f.Fmt16(id, &info, Values, Buffer, 2); for (i=0; i < nChannels; i++) { if (bytes == 1) @@ -3834,8 +3827,8 @@ void CheckSingleFormatter16(cmsContext id, cmsUInt32Number Type, const char* Tex Values[i] <<= 8; } - b.Fmt16(DbgThread(), &info, Values, Buffer, 1); - f.Fmt16(DbgThread(), &info, Values, Buffer, 1); + b.Fmt16(id, &info, Values, Buffer, 1); + f.Fmt16(id, &info, Values, Buffer, 1); return; } } @@ -3847,7 +3840,7 @@ void CheckSingleFormatter16(cmsContext id, cmsUInt32Number Type, const char* Tex // Check all formatters static -cmsInt32Number CheckFormatters16(void) +cmsInt32Number CheckFormatters16(cmsContext ContextID) { FormatterFailed = FALSE; @@ -4028,7 +4021,7 @@ cmsInt32Number CheckFormatters16(void) #undef C static -void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text) +void CheckSingleFormatterFloat(cmsContext ContextID, cmsUInt32Number Type, const char* Text) { cmsFloat32Number Values[cmsMAXCHANNELS]; cmsUInt8Number Buffer[1024]; @@ -4043,16 +4036,16 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text) info.OutputFormat = info.InputFormat = Type; // Go forth and back - f = _cmsGetFormatter(0, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT); - b = _cmsGetFormatter(0, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT); + f = _cmsGetFormatter(ContextID, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT); + b = _cmsGetFormatter(ContextID, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT); if (f.FmtFloat == NULL || b.FmtFloat == NULL) { Fail("no formatter for %s", Text); FormatterFailed = TRUE; // Useful for debug - f = _cmsGetFormatter(0, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT); - b = _cmsGetFormatter(0, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT); + f = _cmsGetFormatter(ContextID, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT); + b = _cmsGetFormatter(ContextID, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT); return; } @@ -4064,9 +4057,9 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text) Values[i] = (cmsFloat32Number) (i+j); } - b.FmtFloat(DbgThread(), &info, Values, Buffer, 1); + b.FmtFloat(ContextID, &info, Values, Buffer, 1); memset(Values, 0, sizeof(Values)); - f.FmtFloat(DbgThread(), &info, Values, Buffer, 1); + f.FmtFloat(ContextID, &info, Values, Buffer, 1); for (i=0; i < nChannels; i++) { @@ -4082,18 +4075,18 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text) Values[i] = (cmsFloat32Number) (i+j); } - b.FmtFloat(DbgThread(), &info, Values, Buffer, 1); - f.FmtFloat(DbgThread(), &info, Values, Buffer, 1); + b.FmtFloat(ContextID, &info, Values, Buffer, 1); + f.FmtFloat(ContextID, &info, Values, Buffer, 1); return; } } } } -#define C(a) CheckSingleFormatterFloat(a, #a) +#define C(a) CheckSingleFormatterFloat(ContextID, a, #a) static -cmsInt32Number CheckFormattersFloat(void) +cmsInt32Number CheckFormattersFloat(cmsContext ContextID) { FormatterFailed = FALSE; @@ -4144,7 +4137,7 @@ cmsInt32Number CheckFormattersFloat(void) // Check half float #define my_isfinite(x) ((x) != (x)) static -cmsInt32Number CheckFormattersHalf(void) +cmsInt32Number CheckFormattersHalf(cmsContext ContextID) { int i, j; @@ -4170,7 +4163,7 @@ cmsInt32Number CheckFormattersHalf(void) #endif static -cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Number G, cmsUInt16Number B, cmsUInt16Number Ro, cmsUInt16Number Go, cmsUInt16Number Bo) +cmsInt32Number CheckOneRGB(cmsContext ContextID, cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Number G, cmsUInt16Number B, cmsUInt16Number Ro, cmsUInt16Number Go, cmsUInt16Number Bo) { cmsUInt16Number RGB[3]; cmsUInt16Number Out[3]; @@ -4179,7 +4172,7 @@ cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Numb RGB[1] = G; RGB[2] = B; - cmsDoTransform(DbgThread(), xform, RGB, Out, 1); + cmsDoTransform(ContextID, xform, RGB, Out, 1); return IsGoodWord("R", Ro , Out[0]) && IsGoodWord("G", Go , Out[1]) && @@ -4188,7 +4181,7 @@ cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Numb // Check known values going from sRGB to XYZ static -cmsInt32Number CheckOneRGB_double(cmsHTRANSFORM xform, cmsFloat64Number R, cmsFloat64Number G, cmsFloat64Number B, cmsFloat64Number Ro, cmsFloat64Number Go, cmsFloat64Number Bo) +cmsInt32Number CheckOneRGB_double(cmsContext ContextID, cmsHTRANSFORM xform, cmsFloat64Number R, cmsFloat64Number G, cmsFloat64Number B, cmsFloat64Number Ro, cmsFloat64Number Go, cmsFloat64Number Bo) { cmsFloat64Number RGB[3]; cmsFloat64Number Out[3]; @@ -4197,7 +4190,7 @@ cmsInt32Number CheckOneRGB_double(cmsHTRANSFORM xform, cmsFloat64Number R, cmsFl RGB[1] = G; RGB[2] = B; - cmsDoTransform(DbgThread(), xform, RGB, Out, 1); + cmsDoTransform(ContextID, xform, RGB, Out, 1); return IsGoodVal("R", Ro , Out[0], 0.01) && IsGoodVal("G", Go , Out[1], 0.01) && @@ -4206,37 +4199,37 @@ cmsInt32Number CheckOneRGB_double(cmsHTRANSFORM xform, cmsFloat64Number R, cmsFl static -cmsInt32Number CheckChangeBufferFormat(void) +cmsInt32Number CheckChangeBufferFormat(cmsContext ContextID) { - cmsHPROFILE hsRGB = cmsCreate_sRGBProfile(DbgThread()); + cmsHPROFILE hsRGB = cmsCreate_sRGBProfile(ContextID); cmsHTRANSFORM xform; cmsHTRANSFORM xform2; - xform = cmsCreateTransform(DbgThread(), hsRGB, TYPE_RGB_16, hsRGB, TYPE_RGB_16, INTENT_PERCEPTUAL, 0); - cmsCloseProfile(DbgThread(), hsRGB); + xform = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_16, hsRGB, TYPE_RGB_16, INTENT_PERCEPTUAL, 0); + cmsCloseProfile(ContextID, hsRGB); if (xform == NULL) return 0; - if (!CheckOneRGB(xform, 0, 0, 0, 0, 0, 0)) return 0; - if (!CheckOneRGB(xform, 120, 0, 0, 120, 0, 0)) return 0; - if (!CheckOneRGB(xform, 0, 222, 255, 0, 222, 255)) return 0; + if (!CheckOneRGB(ContextID, xform, 0, 0, 0, 0, 0, 0)) return 0; + if (!CheckOneRGB(ContextID, xform, 120, 0, 0, 120, 0, 0)) return 0; + if (!CheckOneRGB(ContextID, xform, 0, 222, 255, 0, 222, 255)) return 0; - xform2 = cmsCloneTransformChangingFormats(DbgThread(), xform, TYPE_BGR_16, TYPE_RGB_16); + xform2 = cmsCloneTransformChangingFormats(ContextID, xform, TYPE_BGR_16, TYPE_RGB_16); if (!xform2) return 0; - if (!CheckOneRGB(xform2, 0, 0, 123, 123, 0, 0)) return 0; - if (!CheckOneRGB(xform2, 154, 234, 0, 0, 234, 154)) return 0; + if (!CheckOneRGB(ContextID, xform2, 0, 0, 123, 123, 0, 0)) return 0; + if (!CheckOneRGB(ContextID, xform2, 154, 234, 0, 0, 234, 154)) return 0; - cmsDeleteTransform(DbgThread(),xform2); - xform2 = cmsCloneTransformChangingFormats(DbgThread(), xform, TYPE_RGB_DBL, TYPE_RGB_DBL); + cmsDeleteTransform(ContextID,xform2); + xform2 = cmsCloneTransformChangingFormats(ContextID, xform, TYPE_RGB_DBL, TYPE_RGB_DBL); if (!xform2) return 0; - if (!CheckOneRGB_double(xform2, 0.20, 0, 0, 0.20, 0, 0)) return 0; - if (!CheckOneRGB_double(xform2, 0, 0.9, 1, 0, 0.9, 1)) return 0; + if (!CheckOneRGB_double(ContextID, xform2, 0.20, 0, 0, 0.20, 0, 0)) return 0; + if (!CheckOneRGB_double(ContextID, xform2, 0, 0.9, 1, 0, 0.9, 1)) return 0; - cmsDeleteTransform(DbgThread(),xform2); - cmsDeleteTransform(DbgThread(),xform); + cmsDeleteTransform(ContextID,xform2); + cmsDeleteTransform(ContextID,xform); return 1; } @@ -4245,7 +4238,7 @@ return 1; // Write tag testbed ---------------------------------------------------------------------------------------- static -cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckXYZ(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsCIEXYZ XYZ, *Pt; @@ -4255,10 +4248,10 @@ cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignatu case 1: XYZ.X = 1.0; XYZ.Y = 1.1; XYZ.Z = 1.2; - return cmsWriteTag(DbgThread(), hProfile, tag, &XYZ); + return cmsWriteTag(ContextID, hProfile, tag, &XYZ); case 2: - Pt = (cmsCIEXYZ *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsCIEXYZ *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; return IsGoodFixed15_16("X", 1.0, Pt ->X) && IsGoodFixed15_16("Y", 1.1, Pt->Y) && @@ -4271,7 +4264,7 @@ cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignatu static -cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckGamma(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsToneCurve *g, *Pt; cmsInt32Number rc; @@ -4280,15 +4273,15 @@ cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna case 1: - g = cmsBuildGamma(DbgThread(), 1.0); - rc = cmsWriteTag(DbgThread(), hProfile, tag, g); - cmsFreeToneCurve(DbgThread(), g); + g = cmsBuildGamma(ContextID, 1.0); + rc = cmsWriteTag(ContextID, hProfile, tag, g); + cmsFreeToneCurve(ContextID, g); return rc; case 2: - Pt = (cmsToneCurve *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsToneCurve *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; - return cmsIsToneCurveLinear(DbgThread(), Pt); + return cmsIsToneCurveLinear(ContextID, Pt); default: return 0; @@ -4296,7 +4289,7 @@ cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna } static -cmsInt32Number CheckTextSingle(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckTextSingle(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsMLU *m, *Pt; cmsInt32Number rc; @@ -4306,16 +4299,16 @@ cmsInt32Number CheckTextSingle(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag switch (Pass) { case 1: - m = cmsMLUalloc(DbgThread(), 0); - cmsMLUsetASCII(DbgThread(), m, cmsNoLanguage, cmsNoCountry, "Test test"); - rc = cmsWriteTag(DbgThread(), hProfile, tag, m); - cmsMLUfree(DbgThread(), m); + m = cmsMLUalloc(ContextID, 0); + cmsMLUsetASCII(ContextID, m, cmsNoLanguage, cmsNoCountry, "Test test"); + rc = cmsWriteTag(ContextID, hProfile, tag, m); + cmsMLUfree(ContextID, m); return rc; case 2: - Pt = (cmsMLU *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsMLU *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; - cmsMLUgetASCII(DbgThread(), Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256); + cmsMLUgetASCII(ContextID, Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256); if (strcmp(Buffer, "Test test") != 0) return FALSE; return TRUE; @@ -4326,7 +4319,7 @@ cmsInt32Number CheckTextSingle(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag static -cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckText(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsMLU *m, *Pt; cmsInt32Number rc; @@ -4336,28 +4329,28 @@ cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat switch (Pass) { case 1: - m = cmsMLUalloc(DbgThread(), 0); - cmsMLUsetASCII(DbgThread(), m, cmsNoLanguage, cmsNoCountry, "Test test"); - cmsMLUsetASCII(DbgThread(), m, "en", "US", "1 1 1 1"); - cmsMLUsetASCII(DbgThread(), m, "es", "ES", "2 2 2 2"); - cmsMLUsetASCII(DbgThread(), m, "ct", "ES", "3 3 3 3"); - cmsMLUsetASCII(DbgThread(), m, "en", "GB", "444444444"); - rc = cmsWriteTag(DbgThread(), hProfile, tag, m); - cmsMLUfree(DbgThread(), m); + m = cmsMLUalloc(ContextID, 0); + cmsMLUsetASCII(ContextID, m, cmsNoLanguage, cmsNoCountry, "Test test"); + cmsMLUsetASCII(ContextID, m, "en", "US", "1 1 1 1"); + cmsMLUsetASCII(ContextID, m, "es", "ES", "2 2 2 2"); + cmsMLUsetASCII(ContextID, m, "ct", "ES", "3 3 3 3"); + cmsMLUsetASCII(ContextID, m, "en", "GB", "444444444"); + rc = cmsWriteTag(ContextID, hProfile, tag, m); + cmsMLUfree(ContextID, m); return rc; case 2: - Pt = (cmsMLU *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsMLU *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; - cmsMLUgetASCII(DbgThread(), Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256); + cmsMLUgetASCII(ContextID, Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256); if (strcmp(Buffer, "Test test") != 0) return FALSE; - cmsMLUgetASCII(DbgThread(), Pt, "en", "US", Buffer, 256); + cmsMLUgetASCII(ContextID, Pt, "en", "US", Buffer, 256); if (strcmp(Buffer, "1 1 1 1") != 0) return FALSE; - cmsMLUgetASCII(DbgThread(), Pt, "es", "ES", Buffer, 256); + cmsMLUgetASCII(ContextID, Pt, "es", "ES", Buffer, 256); if (strcmp(Buffer, "2 2 2 2") != 0) return FALSE; - cmsMLUgetASCII(DbgThread(), Pt, "ct", "ES", Buffer, 256); + cmsMLUgetASCII(ContextID, Pt, "ct", "ES", Buffer, 256); if (strcmp(Buffer, "3 3 3 3") != 0) return FALSE; - cmsMLUgetASCII(DbgThread(), Pt, "en", "GB", Buffer, 256); + cmsMLUgetASCII(ContextID, Pt, "en", "GB", Buffer, 256); if (strcmp(Buffer, "444444444") != 0) return FALSE; return TRUE; @@ -4367,7 +4360,7 @@ cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat } static -cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckData(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsICCData *Pt; cmsICCData d = { 1, 0, { '?' }}; @@ -4377,11 +4370,11 @@ cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna switch (Pass) { case 1: - rc = cmsWriteTag(DbgThread(), hProfile, tag, &d); + rc = cmsWriteTag(ContextID, hProfile, tag, &d); return rc; case 2: - Pt = (cmsICCData *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsICCData *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; return (Pt ->data[0] == '?') && (Pt ->flag == 0) && (Pt ->len == 1); @@ -4392,7 +4385,7 @@ cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna static -cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckSignature(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsTagSignature *Pt, Holder; @@ -4400,10 +4393,10 @@ cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag case 1: Holder = (cmsTagSignature) cmsSigPerceptualReferenceMediumGamut; - return cmsWriteTag(DbgThread(), hProfile, tag, &Holder); + return cmsWriteTag(ContextID, hProfile, tag, &Holder); case 2: - Pt = (cmsTagSignature *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsTagSignature *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; return *Pt == cmsSigPerceptualReferenceMediumGamut; @@ -4414,7 +4407,7 @@ cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag static -cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckDateTime(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { struct tm *Pt, Holder; @@ -4428,10 +4421,10 @@ cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagS Holder.tm_mday = 4; Holder.tm_mon = 5; Holder.tm_year = 2009 - 1900; - return cmsWriteTag(DbgThread(), hProfile, tag, &Holder); + return cmsWriteTag(ContextID, hProfile, tag, &Holder); case 2: - Pt = (struct tm *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (struct tm *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; return (Pt ->tm_hour == 1 && @@ -4449,7 +4442,7 @@ cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagS static -cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag, cmsInt32Number max_check, cmsBool colorant_check) +cmsInt32Number CheckNamedColor(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag, cmsInt32Number max_check, cmsBool colorant_check) { cmsNAMEDCOLORLIST* nc; cmsInt32Number i, j, rc; @@ -4464,7 +4457,7 @@ cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTa case 1: - nc = cmsAllocNamedColorList(DbgThread(), 0, 4, "prefix", "suffix"); + nc = cmsAllocNamedColorList(ContextID, 0, 4, "prefix", "suffix"); if (nc == NULL) return 0; for (i=0; i < max_check; i++) { @@ -4473,16 +4466,16 @@ cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTa Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) (max_check - i); sprintf(Name, "#%d", i); - if (!cmsAppendNamedColor(DbgThread(), nc, Name, PCS, Colorant)) { Fail("Couldn't append named color"); return 0; } + if (!cmsAppendNamedColor(ContextID, nc, Name, PCS, Colorant)) { Fail("Couldn't append named color"); return 0; } } - rc = cmsWriteTag(DbgThread(), hProfile, tag, nc); - cmsFreeNamedColorList(DbgThread(), nc); + rc = cmsWriteTag(ContextID, hProfile, tag, nc); + cmsFreeNamedColorList(ContextID, nc); return rc; case 2: - nc = (cmsNAMEDCOLORLIST *) cmsReadTag(DbgThread(), hProfile, tag); + nc = (cmsNAMEDCOLORLIST *) cmsReadTag(ContextID, hProfile, tag); if (nc == NULL) return 0; for (i=0; i < max_check; i++) { @@ -4491,7 +4484,7 @@ cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTa CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (max_check - i); sprintf(CheckName, "#%d", i); - if (!cmsNamedColorInfo(DbgThread(), nc, i, Name, NULL, NULL, PCS, Colorant)) { Fail("Invalid string"); return 0; } + if (!cmsNamedColorInfo(ContextID, nc, i, Name, NULL, NULL, PCS, Colorant)) { Fail("Invalid string"); return 0; } for (j=0; j < 3; j++) { @@ -4517,7 +4510,7 @@ cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTa static -cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckLUT(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsPipeline* Lut, *Pt; cmsInt32Number rc; @@ -4527,24 +4520,24 @@ cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat case 1: - Lut = cmsPipelineAlloc(DbgThread(), 3, 3); + Lut = cmsPipelineAlloc(ContextID, 3, 3); if (Lut == NULL) return 0; // Create an identity LUT - cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(DbgThread(), 3)); - cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_END, _cmsStageAllocIdentityCLut(DbgThread(), 3)); - cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_END, _cmsStageAllocIdentityCurves(DbgThread(), 3)); + cmsPipelineInsertStage(ContextID, Lut, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3)); + cmsPipelineInsertStage(ContextID, Lut, cmsAT_END, _cmsStageAllocIdentityCLut(ContextID, 3)); + cmsPipelineInsertStage(ContextID, Lut, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 3)); - rc = cmsWriteTag(DbgThread(), hProfile, tag, Lut); - cmsPipelineFree(DbgThread(), Lut); + rc = cmsWriteTag(ContextID, hProfile, tag, Lut); + cmsPipelineFree(ContextID, Lut); return rc; case 2: - Pt = (cmsPipeline *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsPipeline *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; // Transform values, check for identity - return Check16LUT(Pt); + return Check16LUT(ContextID, Pt); default: return 0; @@ -4552,7 +4545,7 @@ cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat } static -cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckCHAD(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsFloat64Number *Pt; cmsFloat64Number CHAD[] = { 0, .1, .2, .3, .4, .5, .6, .7, .8 }; @@ -4561,11 +4554,11 @@ cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna switch (Pass) { case 1: - return cmsWriteTag(DbgThread(), hProfile, tag, CHAD); + return cmsWriteTag(ContextID, hProfile, tag, CHAD); case 2: - Pt = (cmsFloat64Number *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsFloat64Number *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; for (i=0; i < 9; i++) { @@ -4580,18 +4573,18 @@ cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna } static -cmsInt32Number CheckChromaticity(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckChromaticity(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsCIExyYTRIPLE *Pt, c = { {0, .1, 1 }, { .3, .4, 1 }, { .6, .7, 1 }}; switch (Pass) { case 1: - return cmsWriteTag(DbgThread(), hProfile, tag, &c); + return cmsWriteTag(ContextID, hProfile, tag, &c); case 2: - Pt = (cmsCIExyYTRIPLE *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsCIExyYTRIPLE *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; if (!IsGoodFixed15_16("xyY", Pt ->Red.x, c.Red.x)) return 0; @@ -4609,7 +4602,7 @@ cmsInt32Number CheckChromaticity(cmsInt32Number Pass, cmsHPROFILE hProfile, cms static -cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckColorantOrder(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsUInt8Number *Pt, c[cmsMAXCHANNELS]; cmsInt32Number i; @@ -4618,11 +4611,11 @@ cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cm case 1: for (i=0; i < cmsMAXCHANNELS; i++) c[i] = (cmsUInt8Number) (cmsMAXCHANNELS - i - 1); - return cmsWriteTag(DbgThread(), hProfile, tag, c); + return cmsWriteTag(ContextID, hProfile, tag, c); case 2: - Pt = (cmsUInt8Number *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsUInt8Number *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; for (i=0; i < cmsMAXCHANNELS; i++) { @@ -4636,7 +4629,7 @@ cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cm } static -cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckMeasurement(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsICCMeasurementConditions *Pt, m; @@ -4650,11 +4643,11 @@ cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsT m.Geometry = 1; m.IlluminantType = cmsILLUMINANT_TYPE_D50; m.Observer = 1; - return cmsWriteTag(DbgThread(), hProfile, tag, &m); + return cmsWriteTag(ContextID, hProfile, tag, &m); case 2: - Pt = (cmsICCMeasurementConditions *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsICCMeasurementConditions *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; if (!IsGoodFixed15_16("Backing", Pt ->Backing.X, 0.1)) return 0; @@ -4674,7 +4667,7 @@ cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsT static -cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckUcrBg(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsUcrBg *Pt, m; cmsInt32Number rc; @@ -4683,22 +4676,22 @@ cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSign switch (Pass) { case 1: - m.Ucr = cmsBuildGamma(DbgThread(), 2.4); - m.Bg = cmsBuildGamma(DbgThread(), -2.2); - m.Desc = cmsMLUalloc(DbgThread(), 1); - cmsMLUsetASCII(DbgThread(), m.Desc, cmsNoLanguage, cmsNoCountry, "test UCR/BG"); - rc = cmsWriteTag(DbgThread(), hProfile, tag, &m); - cmsMLUfree(DbgThread(), m.Desc); - cmsFreeToneCurve(DbgThread(), m.Bg); - cmsFreeToneCurve(DbgThread(), m.Ucr); + m.Ucr = cmsBuildGamma(ContextID, 2.4); + m.Bg = cmsBuildGamma(ContextID, -2.2); + m.Desc = cmsMLUalloc(ContextID, 1); + cmsMLUsetASCII(ContextID, m.Desc, cmsNoLanguage, cmsNoCountry, "test UCR/BG"); + rc = cmsWriteTag(ContextID, hProfile, tag, &m); + cmsMLUfree(ContextID, m.Desc); + cmsFreeToneCurve(ContextID, m.Bg); + cmsFreeToneCurve(ContextID, m.Ucr); return rc; case 2: - Pt = (cmsUcrBg *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsUcrBg *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; - cmsMLUgetASCII(DbgThread(), Pt ->Desc, cmsNoLanguage, cmsNoCountry, Buffer, 256); + cmsMLUgetASCII(ContextID, Pt ->Desc, cmsNoLanguage, cmsNoCountry, Buffer, 256); if (strcmp(Buffer, "test UCR/BG") != 0) return 0; return 1; @@ -4709,7 +4702,7 @@ cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSign static -cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckCRDinfo(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsMLU *mlu; char Buffer[256]; @@ -4718,41 +4711,41 @@ cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSi switch (Pass) { case 1: - mlu = cmsMLUalloc(DbgThread(), 5); - - cmsMLUsetWide(DbgThread(), mlu, "PS", "nm", L"test postscript"); - cmsMLUsetWide(DbgThread(), mlu, "PS", "#0", L"perceptual"); - cmsMLUsetWide(DbgThread(), mlu, "PS", "#1", L"relative_colorimetric"); - cmsMLUsetWide(DbgThread(), mlu, "PS", "#2", L"saturation"); - cmsMLUsetWide(DbgThread(), mlu, "PS", "#3", L"absolute_colorimetric"); - rc = cmsWriteTag(DbgThread(), hProfile, tag, mlu); - cmsMLUfree(DbgThread(), mlu); + mlu = cmsMLUalloc(ContextID, 5); + + cmsMLUsetWide(ContextID, mlu, "PS", "nm", L"test postscript"); + cmsMLUsetWide(ContextID, mlu, "PS", "#0", L"perceptual"); + cmsMLUsetWide(ContextID, mlu, "PS", "#1", L"relative_colorimetric"); + cmsMLUsetWide(ContextID, mlu, "PS", "#2", L"saturation"); + cmsMLUsetWide(ContextID, mlu, "PS", "#3", L"absolute_colorimetric"); + rc = cmsWriteTag(ContextID, hProfile, tag, mlu); + cmsMLUfree(ContextID, mlu); return rc; case 2: - mlu = (cmsMLU*) cmsReadTag(DbgThread(), hProfile, tag); + mlu = (cmsMLU*) cmsReadTag(ContextID, hProfile, tag); if (mlu == NULL) return 0; - cmsMLUgetASCII(DbgThread(), mlu, "PS", "nm", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "PS", "nm", Buffer, 256); if (strcmp(Buffer, "test postscript") != 0) return 0; - cmsMLUgetASCII(DbgThread(), mlu, "PS", "#0", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "PS", "#0", Buffer, 256); if (strcmp(Buffer, "perceptual") != 0) return 0; - cmsMLUgetASCII(DbgThread(), mlu, "PS", "#1", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "PS", "#1", Buffer, 256); if (strcmp(Buffer, "relative_colorimetric") != 0) return 0; - cmsMLUgetASCII(DbgThread(), mlu, "PS", "#2", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "PS", "#2", Buffer, 256); if (strcmp(Buffer, "saturation") != 0) return 0; - cmsMLUgetASCII(DbgThread(), mlu, "PS", "#3", Buffer, 256); + cmsMLUgetASCII(ContextID, mlu, "PS", "#3", Buffer, 256); if (strcmp(Buffer, "absolute_colorimetric") != 0) return 0; return 1; @@ -4763,7 +4756,7 @@ cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSi static -cmsToneCurve *CreateSegmentedCurve(void) +cmsToneCurve *CreateSegmentedCurve(cmsContext ContextID) { cmsCurveSegment Seg[3]; cmsFloat32Number Sampled[2] = { 0, 1}; @@ -4790,12 +4783,12 @@ cmsToneCurve *CreateSegmentedCurve(void) Seg[2].x0 = 1; Seg[2].x1 = 1E22F; - return cmsBuildSegmentedToneCurve(DbgThread(), 3, Seg); + return cmsBuildSegmentedToneCurve(ContextID, 3, Seg); } static -cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckMPE(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsPipeline* Lut, *Pt; cmsToneCurve* G[3]; @@ -4805,24 +4798,24 @@ cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat case 1: - Lut = cmsPipelineAlloc(DbgThread(), 3, 3); + Lut = cmsPipelineAlloc(ContextID, 3, 3); - cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4(DbgThread())); - cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_END, _cmsStageAllocLabV4ToV2(DbgThread())); - AddIdentityCLUTfloat(Lut); + cmsPipelineInsertStage(ContextID, Lut, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4(ContextID)); + cmsPipelineInsertStage(ContextID, Lut, cmsAT_END, _cmsStageAllocLabV4ToV2(ContextID)); + AddIdentityCLUTfloat(ContextID, Lut); - G[0] = G[1] = G[2] = CreateSegmentedCurve(); - cmsPipelineInsertStage(DbgThread(), Lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, G)); - cmsFreeToneCurve(DbgThread(), G[0]); + G[0] = G[1] = G[2] = CreateSegmentedCurve(ContextID); + cmsPipelineInsertStage(ContextID, Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, G)); + cmsFreeToneCurve(ContextID, G[0]); - rc = cmsWriteTag(DbgThread(), hProfile, tag, Lut); - cmsPipelineFree(DbgThread(), Lut); + rc = cmsWriteTag(ContextID, hProfile, tag, Lut); + cmsPipelineFree(ContextID, Lut); return rc; case 2: - Pt = (cmsPipeline *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsPipeline *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; - return CheckFloatLUT(Pt); + return CheckFloatLUT(ContextID, Pt); default: return 0; @@ -4831,7 +4824,7 @@ cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat static -cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) +cmsInt32Number CheckScreening(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsScreening *Pt, sc; cmsInt32Number rc; @@ -4846,12 +4839,12 @@ cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag sc.Channels[0].ScreenAngle = 3.0; sc.Channels[0].SpotShape = cmsSPOT_ELLIPSE; - rc = cmsWriteTag(DbgThread(), hProfile, tag, &sc); + rc = cmsWriteTag(ContextID, hProfile, tag, &sc); return rc; case 2: - Pt = (cmsScreening *) cmsReadTag(DbgThread(), hProfile, tag); + Pt = (cmsScreening *) cmsReadTag(ContextID, hProfile, tag); if (Pt == NULL) return 0; if (Pt ->nChannels != 1) return 0; @@ -4868,17 +4861,17 @@ cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag static -cmsBool CheckOneStr(cmsMLU* mlu, cmsInt32Number n) +cmsBool CheckOneStr(cmsContext ContextID, cmsMLU* mlu, cmsInt32Number n) { char Buffer[256], Buffer2[256]; - cmsMLUgetASCII(DbgThread(), mlu, "en", "US", Buffer, 255); + cmsMLUgetASCII(ContextID, mlu, "en", "US", Buffer, 255); sprintf(Buffer2, "Hello, world %d", n); if (strcmp(Buffer, Buffer2) != 0) return FALSE; - cmsMLUgetASCII(DbgThread(), mlu, "es", "ES", Buffer, 255); + cmsMLUgetASCII(ContextID, mlu, "es", "ES", Buffer, 255); sprintf(Buffer2, "Hola, mundo %d", n); if (strcmp(Buffer, Buffer2) != 0) return FALSE; @@ -4887,16 +4880,16 @@ cmsBool CheckOneStr(cmsMLU* mlu, cmsInt32Number n) static -void SetOneStr(cmsMLU** mlu, wchar_t* s1, wchar_t* s2) +void SetOneStr(cmsContext ContextID, cmsMLU** mlu, wchar_t* s1, wchar_t* s2) { - *mlu = cmsMLUalloc(DbgThread(), 0); - cmsMLUsetWide(DbgThread(), *mlu, "en", "US", s1); - cmsMLUsetWide(DbgThread(), *mlu, "es", "ES", s2); + *mlu = cmsMLUalloc(ContextID, 0); + cmsMLUsetWide(ContextID, *mlu, "en", "US", s1); + cmsMLUsetWide(ContextID, *mlu, "es", "ES", s2); } static -cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfile) +cmsInt32Number CheckProfileSequenceTag(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsSEQ* s; cmsInt32Number i; @@ -4905,15 +4898,15 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil case 1: - s = cmsAllocProfileSequenceDescription(DbgThread(), 3); + s = cmsAllocProfileSequenceDescription(ContextID, 3); if (s == NULL) return 0; - SetOneStr(&s -> seq[0].Manufacturer, L"Hello, world 0", L"Hola, mundo 0"); - SetOneStr(&s -> seq[0].Model, L"Hello, world 0", L"Hola, mundo 0"); - SetOneStr(&s -> seq[1].Manufacturer, L"Hello, world 1", L"Hola, mundo 1"); - SetOneStr(&s -> seq[1].Model, L"Hello, world 1", L"Hola, mundo 1"); - SetOneStr(&s -> seq[2].Manufacturer, L"Hello, world 2", L"Hola, mundo 2"); - SetOneStr(&s -> seq[2].Model, L"Hello, world 2", L"Hola, mundo 2"); + SetOneStr(ContextID, &s -> seq[0].Manufacturer, L"Hello, world 0", L"Hola, mundo 0"); + SetOneStr(ContextID, &s -> seq[0].Model, L"Hello, world 0", L"Hola, mundo 0"); + SetOneStr(ContextID, &s -> seq[1].Manufacturer, L"Hello, world 1", L"Hola, mundo 1"); + SetOneStr(ContextID, &s -> seq[1].Model, L"Hello, world 1", L"Hola, mundo 1"); + SetOneStr(ContextID, &s -> seq[2].Manufacturer, L"Hello, world 2", L"Hola, mundo 2"); + SetOneStr(ContextID, &s -> seq[2].Model, L"Hello, world 2", L"Hola, mundo 2"); #ifdef CMS_DONT_USE_INT64 @@ -4937,13 +4930,13 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil s ->seq[2].attributes = cmsTransparency|cmsGlossy; #endif - if (!cmsWriteTag(DbgThread(), hProfile, cmsSigProfileSequenceDescTag, s)) return 0; - cmsFreeProfileSequenceDescription(DbgThread(), s); + if (!cmsWriteTag(ContextID, hProfile, cmsSigProfileSequenceDescTag, s)) return 0; + cmsFreeProfileSequenceDescription(ContextID, s); return 1; case 2: - s = (cmsSEQ *) cmsReadTag(DbgThread(), hProfile, cmsSigProfileSequenceDescTag); + s = (cmsSEQ *) cmsReadTag(ContextID, hProfile, cmsSigProfileSequenceDescTag); if (s == NULL) return 0; if (s ->n != 3) return 0; @@ -4972,8 +4965,8 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil // Check MLU for (i=0; i < 3; i++) { - if (!CheckOneStr(s -> seq[i].Manufacturer, i)) return 0; - if (!CheckOneStr(s -> seq[i].Model, i)) return 0; + if (!CheckOneStr(ContextID, s -> seq[i].Manufacturer, i)) return 0; + if (!CheckOneStr(ContextID, s -> seq[i].Model, i)) return 0; } return 1; @@ -4984,7 +4977,7 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil static -cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProfile) +cmsInt32Number CheckProfileSequenceIDTag(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsSEQ* s; cmsInt32Number i; @@ -4993,7 +4986,7 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf case 1: - s = cmsAllocProfileSequenceDescription(DbgThread(), 3); + s = cmsAllocProfileSequenceDescription(ContextID, 3); if (s == NULL) return 0; memcpy(s ->seq[0].ProfileID.ID8, "0123456789ABCDEF", 16); @@ -5001,17 +4994,17 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf memcpy(s ->seq[2].ProfileID.ID8, "2222222222222222", 16); - SetOneStr(&s -> seq[0].Description, L"Hello, world 0", L"Hola, mundo 0"); - SetOneStr(&s -> seq[1].Description, L"Hello, world 1", L"Hola, mundo 1"); - SetOneStr(&s -> seq[2].Description, L"Hello, world 2", L"Hola, mundo 2"); + SetOneStr(ContextID, &s -> seq[0].Description, L"Hello, world 0", L"Hola, mundo 0"); + SetOneStr(ContextID, &s -> seq[1].Description, L"Hello, world 1", L"Hola, mundo 1"); + SetOneStr(ContextID, &s -> seq[2].Description, L"Hello, world 2", L"Hola, mundo 2"); - if (!cmsWriteTag(DbgThread(), hProfile, cmsSigProfileSequenceIdTag, s)) return 0; - cmsFreeProfileSequenceDescription(DbgThread(), s); + if (!cmsWriteTag(ContextID, hProfile, cmsSigProfileSequenceIdTag, s)) return 0; + cmsFreeProfileSequenceDescription(ContextID, s); return 1; case 2: - s = (cmsSEQ *) cmsReadTag(DbgThread(), hProfile, cmsSigProfileSequenceIdTag); + s = (cmsSEQ *) cmsReadTag(ContextID, hProfile, cmsSigProfileSequenceIdTag); if (s == NULL) return 0; if (s ->n != 3) return 0; @@ -5022,7 +5015,7 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf for (i=0; i < 3; i++) { - if (!CheckOneStr(s -> seq[i].Description, i)) return 0; + if (!CheckOneStr(ContextID, s -> seq[i].Description, i)) return 0; } return 1; @@ -5034,7 +5027,7 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf static -cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProfile) +cmsInt32Number CheckICCViewingConditions(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsICCViewingConditions* v; cmsICCViewingConditions s; @@ -5050,11 +5043,11 @@ cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProf s.SurroundXYZ.Y = 0.5; s.SurroundXYZ.Z = 0.6; - if (!cmsWriteTag(DbgThread(), hProfile, cmsSigViewingConditionsTag, &s)) return 0; + if (!cmsWriteTag(ContextID, hProfile, cmsSigViewingConditionsTag, &s)) return 0; return 1; case 2: - v = (cmsICCViewingConditions *) cmsReadTag(DbgThread(), hProfile, cmsSigViewingConditionsTag); + v = (cmsICCViewingConditions *) cmsReadTag(ContextID, hProfile, cmsSigViewingConditionsTag); if (v == NULL) return 0; if (v ->IlluminantType != 1) return 0; @@ -5076,7 +5069,7 @@ cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProf static -cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile) +cmsInt32Number CheckVCGT(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsToneCurve* Curves[3]; cmsToneCurve** PtrCurve; @@ -5084,23 +5077,23 @@ cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile) switch (Pass) { case 1: - Curves[0] = cmsBuildGamma(DbgThread(), 1.1); - Curves[1] = cmsBuildGamma(DbgThread(), 2.2); - Curves[2] = cmsBuildGamma(DbgThread(), 3.4); + Curves[0] = cmsBuildGamma(ContextID, 1.1); + Curves[1] = cmsBuildGamma(ContextID, 2.2); + Curves[2] = cmsBuildGamma(ContextID, 3.4); - if (!cmsWriteTag(DbgThread(), hProfile, cmsSigVcgtTag, Curves)) return 0; + if (!cmsWriteTag(ContextID, hProfile, cmsSigVcgtTag, Curves)) return 0; - cmsFreeToneCurveTriple(DbgThread(), Curves); + cmsFreeToneCurveTriple(ContextID, Curves); return 1; case 2: - PtrCurve = (cmsToneCurve **) cmsReadTag(DbgThread(), hProfile, cmsSigVcgtTag); + PtrCurve = (cmsToneCurve **) cmsReadTag(ContextID, hProfile, cmsSigVcgtTag); if (PtrCurve == NULL) return 0; - if (!IsGoodVal("VCGT R", cmsEstimateGamma(DbgThread(), PtrCurve[0], 0.01), 1.1, 0.001)) return 0; - if (!IsGoodVal("VCGT G", cmsEstimateGamma(DbgThread(), PtrCurve[1], 0.01), 2.2, 0.001)) return 0; - if (!IsGoodVal("VCGT B", cmsEstimateGamma(DbgThread(), PtrCurve[2], 0.01), 3.4, 0.001)) return 0; + if (!IsGoodVal("VCGT R", cmsEstimateGamma(ContextID, PtrCurve[0], 0.01), 1.1, 0.001)) return 0; + if (!IsGoodVal("VCGT G", cmsEstimateGamma(ContextID, PtrCurve[1], 0.01), 2.2, 0.001)) return 0; + if (!IsGoodVal("VCGT B", cmsEstimateGamma(ContextID, PtrCurve[2], 0.01), 3.4, 0.001)) return 0; return 1; default:; @@ -5112,38 +5105,38 @@ cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile) // Only one of the two following may be used, as they share the same tag static -cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile) +cmsInt32Number CheckDictionary16(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsHANDLE hDict; const cmsDICTentry* e; switch (Pass) { case 1: - hDict = cmsDictAlloc(DbgThread()); - cmsDictAddEntry(DbgThread(), hDict, L"Name0", NULL, NULL, NULL); - cmsDictAddEntry(DbgThread(), hDict, L"Name1", L"", NULL, NULL); - cmsDictAddEntry(DbgThread(), hDict, L"Name", L"String", NULL, NULL); - cmsDictAddEntry(DbgThread(), hDict, L"Name2", L"12", NULL, NULL); - if (!cmsWriteTag(DbgThread(), hProfile, cmsSigMetaTag, hDict)) return 0; - cmsDictFree(DbgThread(), hDict); + hDict = cmsDictAlloc(ContextID); + cmsDictAddEntry(ContextID, hDict, L"Name0", NULL, NULL, NULL); + cmsDictAddEntry(ContextID, hDict, L"Name1", L"", NULL, NULL); + cmsDictAddEntry(ContextID, hDict, L"Name", L"String", NULL, NULL); + cmsDictAddEntry(ContextID, hDict, L"Name2", L"12", NULL, NULL); + if (!cmsWriteTag(ContextID, hProfile, cmsSigMetaTag, hDict)) return 0; + cmsDictFree(ContextID, hDict); return 1; case 2: - hDict = cmsReadTag(DbgThread(), hProfile, cmsSigMetaTag); + hDict = cmsReadTag(ContextID, hProfile, cmsSigMetaTag); if (hDict == NULL) return 0; - e = cmsDictGetEntryList(DbgThread(), hDict); + e = cmsDictGetEntryList(ContextID, hDict); if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0; if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0; - e = cmsDictNextEntry(DbgThread(), e); + e = cmsDictNextEntry(ContextID, e); if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0; if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0; - e = cmsDictNextEntry(DbgThread(), e); + e = cmsDictNextEntry(ContextID, e); if (memcmp(e ->Name, L"Name1", sizeof(wchar_t) *5) != 0) return 0; if (e ->Value == NULL) return 0; if (*e->Value != 0) return 0; - e = cmsDictNextEntry(DbgThread(), e); + e = cmsDictNextEntry(ContextID, e); if (memcmp(e ->Name, L"Name0", sizeof(wchar_t) * 5) != 0) return 0; if (e ->Value != NULL) return 0; return 1; @@ -5158,7 +5151,7 @@ cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile) static -cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) +cmsInt32Number CheckDictionary24(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsHANDLE hDict; const cmsDICTentry* e; @@ -5169,50 +5162,50 @@ cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) switch (Pass) { case 1: - hDict = cmsDictAlloc(DbgThread()); + hDict = cmsDictAlloc(ContextID); - DisplayName = cmsMLUalloc(DbgThread(), 0); + DisplayName = cmsMLUalloc(ContextID, 0); - cmsMLUsetWide(DbgThread(), DisplayName, "en", "US", L"Hello, world"); - cmsMLUsetWide(DbgThread(), DisplayName, "es", "ES", L"Hola, mundo"); - cmsMLUsetWide(DbgThread(), DisplayName, "fr", "FR", L"Bonjour, le monde"); - cmsMLUsetWide(DbgThread(), DisplayName, "ca", "CA", L"Hola, mon"); + cmsMLUsetWide(ContextID, DisplayName, "en", "US", L"Hello, world"); + cmsMLUsetWide(ContextID, DisplayName, "es", "ES", L"Hola, mundo"); + cmsMLUsetWide(ContextID, DisplayName, "fr", "FR", L"Bonjour, le monde"); + cmsMLUsetWide(ContextID, DisplayName, "ca", "CA", L"Hola, mon"); - cmsDictAddEntry(DbgThread(), hDict, L"Name", L"String", DisplayName, NULL); - cmsMLUfree(DbgThread(), DisplayName); + cmsDictAddEntry(ContextID, hDict, L"Name", L"String", DisplayName, NULL); + cmsMLUfree(ContextID, DisplayName); - cmsDictAddEntry(DbgThread(), hDict, L"Name2", L"12", NULL, NULL); - if (!cmsWriteTag(DbgThread(), hProfile, cmsSigMetaTag, hDict)) return 0; - cmsDictFree(DbgThread(), hDict); + cmsDictAddEntry(ContextID, hDict, L"Name2", L"12", NULL, NULL); + if (!cmsWriteTag(ContextID, hProfile, cmsSigMetaTag, hDict)) return 0; + cmsDictFree(ContextID, hDict); return 1; case 2: - hDict = cmsReadTag(DbgThread(), hProfile, cmsSigMetaTag); + hDict = cmsReadTag(ContextID, hProfile, cmsSigMetaTag); if (hDict == NULL) return 0; - e = cmsDictGetEntryList(DbgThread(), hDict); + e = cmsDictGetEntryList(ContextID, hDict); if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0; if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0; - e = cmsDictNextEntry(DbgThread(), e); + e = cmsDictNextEntry(ContextID, e); if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0; if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0; - cmsMLUgetASCII(DbgThread(), e->DisplayName, "en", "US", Buffer, 256); + cmsMLUgetASCII(ContextID, e->DisplayName, "en", "US", Buffer, 256); if (strcmp(Buffer, "Hello, world") != 0) rc = 0; - cmsMLUgetASCII(DbgThread(), e->DisplayName, "es", "ES", Buffer, 256); + cmsMLUgetASCII(ContextID, e->DisplayName, "es", "ES", Buffer, 256); if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0; - cmsMLUgetASCII(DbgThread(), e->DisplayName, "fr", "FR", Buffer, 256); + cmsMLUgetASCII(ContextID, e->DisplayName, "fr", "FR", Buffer, 256); if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0; - cmsMLUgetASCII(DbgThread(), e->DisplayName, "ca", "CA", Buffer, 256); + cmsMLUgetASCII(ContextID, e->DisplayName, "ca", "CA", Buffer, 256); if (strcmp(Buffer, "Hola, mon") != 0) rc = 0; if (rc == 0) @@ -5226,17 +5219,17 @@ cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) } static -cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile) +cmsInt32Number CheckRAWtags(cmsContext ContextID, cmsInt32Number Pass, cmsHPROFILE hProfile) { char Buffer[7]; switch (Pass) { case 1: - return cmsWriteRawTag(DbgThread(), hProfile, (cmsTagSignature) 0x31323334, "data123", 7); + return cmsWriteRawTag(ContextID, hProfile, (cmsTagSignature) 0x31323334, "data123", 7); case 2: - if (!cmsReadRawTag(DbgThread(), hProfile, (cmsTagSignature) 0x31323334, Buffer, 7)) return 0; + if (!cmsReadRawTag(ContextID, hProfile, (cmsTagSignature) 0x31323334, Buffer, 7)) return 0; if (strncmp(Buffer, "data123", 7) != 0) return 0; return 1; @@ -5249,153 +5242,153 @@ cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile) // This is a very big test that checks every single tag static -cmsInt32Number CheckProfileCreation(void) +cmsInt32Number CheckProfileCreation(cmsContext ContextID) { cmsHPROFILE h; cmsInt32Number Pass; - h = cmsCreateProfilePlaceholder(DbgThread()); + h = cmsCreateProfilePlaceholder(ContextID); if (h == NULL) return 0; - cmsSetProfileVersion(DbgThread(), h, 4.3); - if (cmsGetTagCount(DbgThread(), h) != 0) { Fail("Empty profile with nonzero number of tags"); goto Error; } - if (cmsIsTag(DbgThread(), h, cmsSigAToB0Tag)) { Fail("Found a tag in an empty profile"); goto Error; } + cmsSetProfileVersion(ContextID, h, 4.3); + if (cmsGetTagCount(ContextID, h) != 0) { Fail("Empty profile with nonzero number of tags"); goto Error; } + if (cmsIsTag(ContextID, h, cmsSigAToB0Tag)) { Fail("Found a tag in an empty profile"); goto Error; } - cmsSetColorSpace(DbgThread(), h, cmsSigRgbData); - if (cmsGetColorSpace(DbgThread(), h) != cmsSigRgbData) { Fail("Unable to set colorspace"); goto Error; } + cmsSetColorSpace(ContextID, h, cmsSigRgbData); + if (cmsGetColorSpace(ContextID, h) != cmsSigRgbData) { Fail("Unable to set colorspace"); goto Error; } - cmsSetPCS(DbgThread(), h, cmsSigLabData); - if (cmsGetPCS(DbgThread(), h) != cmsSigLabData) { Fail("Unable to set colorspace"); goto Error; } + cmsSetPCS(ContextID, h, cmsSigLabData); + if (cmsGetPCS(ContextID, h) != cmsSigLabData) { Fail("Unable to set colorspace"); goto Error; } - cmsSetDeviceClass(DbgThread(), h, cmsSigDisplayClass); - if (cmsGetDeviceClass(DbgThread(), h) != cmsSigDisplayClass) { Fail("Unable to set deviceclass"); goto Error; } + cmsSetDeviceClass(ContextID, h, cmsSigDisplayClass); + if (cmsGetDeviceClass(ContextID, h) != cmsSigDisplayClass) { Fail("Unable to set deviceclass"); goto Error; } - cmsSetHeaderRenderingIntent(DbgThread(), h, INTENT_SATURATION); - if (cmsGetHeaderRenderingIntent(DbgThread(), h) != INTENT_SATURATION) { Fail("Unable to set rendering intent"); goto Error; } + cmsSetHeaderRenderingIntent(ContextID, h, INTENT_SATURATION); + if (cmsGetHeaderRenderingIntent(ContextID, h) != INTENT_SATURATION) { Fail("Unable to set rendering intent"); goto Error; } for (Pass = 1; Pass <= 2; Pass++) { SubTest("Tags holding XYZ"); - if (!CheckXYZ(Pass, h, cmsSigBlueColorantTag)) goto Error; - if (!CheckXYZ(Pass, h, cmsSigGreenColorantTag)) goto Error; - if (!CheckXYZ(Pass, h, cmsSigRedColorantTag)) goto Error; - if (!CheckXYZ(Pass, h, cmsSigMediaBlackPointTag)) goto Error; - if (!CheckXYZ(Pass, h, cmsSigMediaWhitePointTag)) goto Error; - if (!CheckXYZ(Pass, h, cmsSigLuminanceTag)) goto Error; + if (!CheckXYZ(ContextID, Pass, h, cmsSigBlueColorantTag)) goto Error; + if (!CheckXYZ(ContextID, Pass, h, cmsSigGreenColorantTag)) goto Error; + if (!CheckXYZ(ContextID, Pass, h, cmsSigRedColorantTag)) goto Error; + if (!CheckXYZ(ContextID, Pass, h, cmsSigMediaBlackPointTag)) goto Error; + if (!CheckXYZ(ContextID, Pass, h, cmsSigMediaWhitePointTag)) goto Error; + if (!CheckXYZ(ContextID, Pass, h, cmsSigLuminanceTag)) goto Error; SubTest("Tags holding curves"); - if (!CheckGamma(Pass, h, cmsSigBlueTRCTag)) goto Error; - if (!CheckGamma(Pass, h, cmsSigGrayTRCTag)) goto Error; - if (!CheckGamma(Pass, h, cmsSigGreenTRCTag)) goto Error; - if (!CheckGamma(Pass, h, cmsSigRedTRCTag)) goto Error; + if (!CheckGamma(ContextID, Pass, h, cmsSigBlueTRCTag)) goto Error; + if (!CheckGamma(ContextID, Pass, h, cmsSigGrayTRCTag)) goto Error; + if (!CheckGamma(ContextID, Pass, h, cmsSigGreenTRCTag)) goto Error; + if (!CheckGamma(ContextID, Pass, h, cmsSigRedTRCTag)) goto Error; SubTest("Tags holding text"); - if (!CheckTextSingle(Pass, h, cmsSigCharTargetTag)) goto Error; - if (!CheckTextSingle(Pass, h, cmsSigScreeningDescTag)) goto Error; + if (!CheckTextSingle(ContextID, Pass, h, cmsSigCharTargetTag)) goto Error; + if (!CheckTextSingle(ContextID, Pass, h, cmsSigScreeningDescTag)) goto Error; - if (!CheckText(Pass, h, cmsSigCopyrightTag)) goto Error; - if (!CheckText(Pass, h, cmsSigProfileDescriptionTag)) goto Error; - if (!CheckText(Pass, h, cmsSigDeviceMfgDescTag)) goto Error; - if (!CheckText(Pass, h, cmsSigDeviceModelDescTag)) goto Error; - if (!CheckText(Pass, h, cmsSigViewingCondDescTag)) goto Error; + if (!CheckText(ContextID, Pass, h, cmsSigCopyrightTag)) goto Error; + if (!CheckText(ContextID, Pass, h, cmsSigProfileDescriptionTag)) goto Error; + if (!CheckText(ContextID, Pass, h, cmsSigDeviceMfgDescTag)) goto Error; + if (!CheckText(ContextID, Pass, h, cmsSigDeviceModelDescTag)) goto Error; + if (!CheckText(ContextID, Pass, h, cmsSigViewingCondDescTag)) goto Error; SubTest("Tags holding cmsICCData"); - if (!CheckData(Pass, h, cmsSigPs2CRD0Tag)) goto Error; - if (!CheckData(Pass, h, cmsSigPs2CRD1Tag)) goto Error; - if (!CheckData(Pass, h, cmsSigPs2CRD2Tag)) goto Error; - if (!CheckData(Pass, h, cmsSigPs2CRD3Tag)) goto Error; - if (!CheckData(Pass, h, cmsSigPs2CSATag)) goto Error; - if (!CheckData(Pass, h, cmsSigPs2RenderingIntentTag)) goto Error; + if (!CheckData(ContextID, Pass, h, cmsSigPs2CRD0Tag)) goto Error; + if (!CheckData(ContextID, Pass, h, cmsSigPs2CRD1Tag)) goto Error; + if (!CheckData(ContextID, Pass, h, cmsSigPs2CRD2Tag)) goto Error; + if (!CheckData(ContextID, Pass, h, cmsSigPs2CRD3Tag)) goto Error; + if (!CheckData(ContextID, Pass, h, cmsSigPs2CSATag)) goto Error; + if (!CheckData(ContextID, Pass, h, cmsSigPs2RenderingIntentTag)) goto Error; SubTest("Tags holding signatures"); - if (!CheckSignature(Pass, h, cmsSigColorimetricIntentImageStateTag)) goto Error; - if (!CheckSignature(Pass, h, cmsSigPerceptualRenderingIntentGamutTag)) goto Error; - if (!CheckSignature(Pass, h, cmsSigSaturationRenderingIntentGamutTag)) goto Error; - if (!CheckSignature(Pass, h, cmsSigTechnologyTag)) goto Error; + if (!CheckSignature(ContextID, Pass, h, cmsSigColorimetricIntentImageStateTag)) goto Error; + if (!CheckSignature(ContextID, Pass, h, cmsSigPerceptualRenderingIntentGamutTag)) goto Error; + if (!CheckSignature(ContextID, Pass, h, cmsSigSaturationRenderingIntentGamutTag)) goto Error; + if (!CheckSignature(ContextID, Pass, h, cmsSigTechnologyTag)) goto Error; SubTest("Tags holding date_time"); - if (!CheckDateTime(Pass, h, cmsSigCalibrationDateTimeTag)) goto Error; - if (!CheckDateTime(Pass, h, cmsSigDateTimeTag)) goto Error; + if (!CheckDateTime(ContextID, Pass, h, cmsSigCalibrationDateTimeTag)) goto Error; + if (!CheckDateTime(ContextID, Pass, h, cmsSigDateTimeTag)) goto Error; SubTest("Tags holding named color lists"); - if (!CheckNamedColor(Pass, h, cmsSigColorantTableTag, 15, FALSE)) goto Error; - if (!CheckNamedColor(Pass, h, cmsSigColorantTableOutTag, 15, FALSE)) goto Error; - if (!CheckNamedColor(Pass, h, cmsSigNamedColor2Tag, 4096, TRUE)) goto Error; + if (!CheckNamedColor(ContextID, Pass, h, cmsSigColorantTableTag, 15, FALSE)) goto Error; + if (!CheckNamedColor(ContextID, Pass, h, cmsSigColorantTableOutTag, 15, FALSE)) goto Error; + if (!CheckNamedColor(ContextID, Pass, h, cmsSigNamedColor2Tag, 4096, TRUE)) goto Error; SubTest("Tags holding LUTs"); - if (!CheckLUT(Pass, h, cmsSigAToB0Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigAToB1Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigAToB2Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigBToA0Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigBToA1Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigBToA2Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigPreview0Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigPreview1Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigPreview2Tag)) goto Error; - if (!CheckLUT(Pass, h, cmsSigGamutTag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigAToB0Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigAToB1Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigAToB2Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigBToA0Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigBToA1Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigBToA2Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigPreview0Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigPreview1Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigPreview2Tag)) goto Error; + if (!CheckLUT(ContextID, Pass, h, cmsSigGamutTag)) goto Error; SubTest("Tags holding CHAD"); - if (!CheckCHAD(Pass, h, cmsSigChromaticAdaptationTag)) goto Error; + if (!CheckCHAD(ContextID, Pass, h, cmsSigChromaticAdaptationTag)) goto Error; SubTest("Tags holding Chromaticity"); - if (!CheckChromaticity(Pass, h, cmsSigChromaticityTag)) goto Error; + if (!CheckChromaticity(ContextID, Pass, h, cmsSigChromaticityTag)) goto Error; SubTest("Tags holding colorant order"); - if (!CheckColorantOrder(Pass, h, cmsSigColorantOrderTag)) goto Error; + if (!CheckColorantOrder(ContextID, Pass, h, cmsSigColorantOrderTag)) goto Error; SubTest("Tags holding measurement"); - if (!CheckMeasurement(Pass, h, cmsSigMeasurementTag)) goto Error; + if (!CheckMeasurement(ContextID, Pass, h, cmsSigMeasurementTag)) goto Error; SubTest("Tags holding CRD info"); - if (!CheckCRDinfo(Pass, h, cmsSigCrdInfoTag)) goto Error; + if (!CheckCRDinfo(ContextID, Pass, h, cmsSigCrdInfoTag)) goto Error; SubTest("Tags holding UCR/BG"); - if (!CheckUcrBg(Pass, h, cmsSigUcrBgTag)) goto Error; + if (!CheckUcrBg(ContextID, Pass, h, cmsSigUcrBgTag)) goto Error; SubTest("Tags holding MPE"); - if (!CheckMPE(Pass, h, cmsSigDToB0Tag)) goto Error; - if (!CheckMPE(Pass, h, cmsSigDToB1Tag)) goto Error; - if (!CheckMPE(Pass, h, cmsSigDToB2Tag)) goto Error; - if (!CheckMPE(Pass, h, cmsSigDToB3Tag)) goto Error; - if (!CheckMPE(Pass, h, cmsSigBToD0Tag)) goto Error; - if (!CheckMPE(Pass, h, cmsSigBToD1Tag)) goto Error; - if (!CheckMPE(Pass, h, cmsSigBToD2Tag)) goto Error; - if (!CheckMPE(Pass, h, cmsSigBToD3Tag)) goto Error; + if (!CheckMPE(ContextID, Pass, h, cmsSigDToB0Tag)) goto Error; + if (!CheckMPE(ContextID, Pass, h, cmsSigDToB1Tag)) goto Error; + if (!CheckMPE(ContextID, Pass, h, cmsSigDToB2Tag)) goto Error; + if (!CheckMPE(ContextID, Pass, h, cmsSigDToB3Tag)) goto Error; + if (!CheckMPE(ContextID, Pass, h, cmsSigBToD0Tag)) goto Error; + if (!CheckMPE(ContextID, Pass, h, cmsSigBToD1Tag)) goto Error; + if (!CheckMPE(ContextID, Pass, h, cmsSigBToD2Tag)) goto Error; + if (!CheckMPE(ContextID, Pass, h, cmsSigBToD3Tag)) goto Error; SubTest("Tags using screening"); - if (!CheckScreening(Pass, h, cmsSigScreeningTag)) goto Error; + if (!CheckScreening(ContextID, Pass, h, cmsSigScreeningTag)) goto Error; SubTest("Tags holding profile sequence description"); - if (!CheckProfileSequenceTag(Pass, h)) goto Error; - if (!CheckProfileSequenceIDTag(Pass, h)) goto Error; + if (!CheckProfileSequenceTag(ContextID, Pass, h)) goto Error; + if (!CheckProfileSequenceIDTag(ContextID, Pass, h)) goto Error; SubTest("Tags holding ICC viewing conditions"); - if (!CheckICCViewingConditions(Pass, h)) goto Error; + if (!CheckICCViewingConditions(ContextID, Pass, h)) goto Error; SubTest("VCGT tags"); - if (!CheckVCGT(Pass, h)) goto Error; + if (!CheckVCGT(ContextID, Pass, h)) goto Error; SubTest("RAW tags"); - if (!CheckRAWtags(Pass, h)) goto Error; + if (!CheckRAWtags(ContextID, Pass, h)) goto Error; SubTest("Dictionary meta tags"); - // if (!CheckDictionary16(Pass, h)) goto Error; - if (!CheckDictionary24(Pass, h)) goto Error; + // if (!CheckDictionary16(ContextID, Pass, h)) goto Error; + if (!CheckDictionary24(ContextID, Pass, h)) goto Error; if (Pass == 1) { - cmsSaveProfileToFile(DbgThread(), h, "alltags.icc"); - cmsCloseProfile(DbgThread(), h); - h = cmsOpenProfileFromFile(DbgThread(), "alltags.icc", "r"); + cmsSaveProfileToFile(ContextID, h, "alltags.icc"); + cmsCloseProfile(ContextID, h); + h = cmsOpenProfileFromFile(ContextID, "alltags.icc", "r"); } } @@ -5409,12 +5402,12 @@ cmsInt32Number CheckProfileCreation(void) cmsSigOutputResponseTag = 0x72657370, // 'resp' -- Possible patent on this */ - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); remove("alltags.icc"); return 1; Error: - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); remove("alltags.icc"); return 0; } @@ -5422,7 +5415,7 @@ Error: // Thanks to Christopher James Halse Rogers for the bugfixing and providing this test static -cmsInt32Number CheckVersionHeaderWriting(void) +cmsInt32Number CheckVersionHeaderWriting(cmsContext ContextID) { cmsHPROFILE h; int index; @@ -5435,24 +5428,24 @@ cmsInt32Number CheckVersionHeaderWriting(void) for (index = 0; index < sizeof(test_versions)/sizeof(test_versions[0]); index++) { - h = cmsCreateProfilePlaceholder(DbgThread()); + h = cmsCreateProfilePlaceholder(ContextID); if (h == NULL) return 0; - cmsSetProfileVersion(DbgThread(), h, test_versions[index]); + cmsSetProfileVersion(ContextID, h, test_versions[index]); - cmsSaveProfileToFile(DbgThread(), h, "versions.icc"); - cmsCloseProfile(DbgThread(), h); + cmsSaveProfileToFile(ContextID, h, "versions.icc"); + cmsCloseProfile(ContextID, h); - h = cmsOpenProfileFromFile(DbgThread(), "versions.icc", "r"); + h = cmsOpenProfileFromFile(ContextID, "versions.icc", "r"); // Only the first 3 digits are significant - if (fabs(cmsGetProfileVersion(DbgThread(), h) - test_versions[index]) > 0.005) { + if (fabs(cmsGetProfileVersion(ContextID, h) - test_versions[index]) > 0.005) { Fail("Version failed to round-trip: wrote %.2f, read %.2f", - test_versions[index], cmsGetProfileVersion(DbgThread(), h)); + test_versions[index], cmsGetProfileVersion(ContextID, h)); return 0; } - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); remove("versions.icc"); } return 1; @@ -5461,21 +5454,21 @@ cmsInt32Number CheckVersionHeaderWriting(void) // Test on Richard Hughes "crayons.icc" static -cmsInt32Number CheckMultilocalizedProfile(void) +cmsInt32Number CheckMultilocalizedProfile(cmsContext ContextID) { cmsHPROFILE hProfile; cmsMLU *Pt; char Buffer[256]; - hProfile = cmsOpenProfileFromFile(DbgThread(), "crayons.icc", "r"); + hProfile = cmsOpenProfileFromFile(ContextID, "crayons.icc", "r"); - Pt = (cmsMLU *) cmsReadTag(DbgThread(), hProfile, cmsSigProfileDescriptionTag); - cmsMLUgetASCII(DbgThread(), Pt, "en", "GB", Buffer, 256); + Pt = (cmsMLU *) cmsReadTag(ContextID, hProfile, cmsSigProfileDescriptionTag); + cmsMLUgetASCII(ContextID, Pt, "en", "GB", Buffer, 256); if (strcmp(Buffer, "Crayon Colours") != 0) return FALSE; - cmsMLUgetASCII(DbgThread(), Pt, "en", "US", Buffer, 256); + cmsMLUgetASCII(ContextID, Pt, "en", "US", Buffer, 256); if (strcmp(Buffer, "Crayon Colors") != 0) return FALSE; - cmsCloseProfile(DbgThread(), hProfile); + cmsCloseProfile(ContextID, hProfile); return TRUE; } @@ -5497,62 +5490,62 @@ void ErrorReportingFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, con static -cmsInt32Number CheckBadProfiles(void) +cmsInt32Number CheckBadProfiles(cmsContext ContextID) { cmsHPROFILE h; - h = cmsOpenProfileFromFile(DbgThread(), "IDoNotExist.icc", "r"); + h = cmsOpenProfileFromFile(ContextID, "IDoNotExist.icc", "r"); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } - h = cmsOpenProfileFromFile(DbgThread(), "IAmIllFormed*.icc", "r"); + h = cmsOpenProfileFromFile(ContextID, "IAmIllFormed*.icc", "r"); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } // No profile name given - h = cmsOpenProfileFromFile(DbgThread(), "", "r"); + h = cmsOpenProfileFromFile(ContextID, "", "r"); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } - h = cmsOpenProfileFromFile(DbgThread(), "..", "r"); + h = cmsOpenProfileFromFile(ContextID, "..", "r"); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } - h = cmsOpenProfileFromFile(DbgThread(), "IHaveBadAccessMode.icc", "@"); + h = cmsOpenProfileFromFile(ContextID, "IHaveBadAccessMode.icc", "@"); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } - h = cmsOpenProfileFromFile(DbgThread(), "bad.icc", "r"); + h = cmsOpenProfileFromFile(ContextID, "bad.icc", "r"); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } - h = cmsOpenProfileFromFile(DbgThread(), "toosmall.icc", "r"); + h = cmsOpenProfileFromFile(ContextID, "toosmall.icc", "r"); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } - h = cmsOpenProfileFromMem(DbgThread(), NULL, 3); + h = cmsOpenProfileFromMem(ContextID, NULL, 3); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } - h = cmsOpenProfileFromMem(DbgThread(), "123", 3); + h = cmsOpenProfileFromMem(ContextID, "123", 3); if (h != NULL) { - cmsCloseProfile(DbgThread(), h); + cmsCloseProfile(ContextID, h); return 0; } @@ -5563,13 +5556,13 @@ cmsInt32Number CheckBadProfiles(void) static -cmsInt32Number CheckErrReportingOnBadProfiles(void) +cmsInt32Number CheckErrReportingOnBadProfiles(cmsContext ContextID) { cmsInt32Number rc; - cmsSetLogErrorHandler(DbgThread(), ErrorReportingFunction); - rc = CheckBadProfiles(); - cmsSetLogErrorHandler(DbgThread(), FatalErrorQuit); + cmsSetLogErrorHandler(ContextID, ErrorReportingFunction); + rc = CheckBadProfiles(ContextID); + cmsSetLogErrorHandler(ContextID, FatalErrorQuit); // Reset the error state TrappedError = FALSE; @@ -5578,57 +5571,57 @@ cmsInt32Number CheckErrReportingOnBadProfiles(void) static -cmsInt32Number CheckBadTransforms(void) +cmsInt32Number CheckBadTransforms(cmsContext ContextID) { - cmsHPROFILE h1 = cmsCreate_sRGBProfile(DbgThread()); + cmsHPROFILE h1 = cmsCreate_sRGBProfile(ContextID); cmsHTRANSFORM x1; - x1 = cmsCreateTransform(DbgThread(), NULL, 0, NULL, 0, 0, 0); + x1 = cmsCreateTransform(ContextID, NULL, 0, NULL, 0, 0, 0); if (x1 != NULL) { - cmsDeleteTransform(DbgThread(), x1); + cmsDeleteTransform(ContextID, x1); return 0; } - x1 = cmsCreateTransform(DbgThread(), h1, TYPE_RGB_8, h1, TYPE_RGB_8, 12345, 0); + x1 = cmsCreateTransform(ContextID, h1, TYPE_RGB_8, h1, TYPE_RGB_8, 12345, 0); if (x1 != NULL) { - cmsDeleteTransform(DbgThread(), x1); + cmsDeleteTransform(ContextID, x1); return 0; } - x1 = cmsCreateTransform(DbgThread(), h1, TYPE_CMYK_8, h1, TYPE_RGB_8, 0, 0); + x1 = cmsCreateTransform(ContextID, h1, TYPE_CMYK_8, h1, TYPE_RGB_8, 0, 0); if (x1 != NULL) { - cmsDeleteTransform(DbgThread(), x1); + cmsDeleteTransform(ContextID, x1); return 0; } - x1 = cmsCreateTransform(DbgThread(), h1, TYPE_RGB_8, h1, TYPE_CMYK_8, 1, 0); + x1 = cmsCreateTransform(ContextID, h1, TYPE_RGB_8, h1, TYPE_CMYK_8, 1, 0); if (x1 != NULL) { - cmsDeleteTransform(DbgThread(), x1); + cmsDeleteTransform(ContextID, x1); return 0; } // sRGB does its output as XYZ! - x1 = cmsCreateTransform(DbgThread(), h1, TYPE_RGB_8, NULL, TYPE_Lab_8, 1, 0); + x1 = cmsCreateTransform(ContextID, h1, TYPE_RGB_8, NULL, TYPE_Lab_8, 1, 0); if (x1 != NULL) { - cmsDeleteTransform(DbgThread(), x1); + cmsDeleteTransform(ContextID, x1); return 0; } - cmsCloseProfile(DbgThread(), h1); + cmsCloseProfile(ContextID, h1); { - cmsHPROFILE hp1 = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"); - cmsHPROFILE hp2 = cmsCreate_sRGBProfile(DbgThread()); + cmsHPROFILE hp1 = cmsOpenProfileFromFile(ContextID, "test1.icc", "r"); + cmsHPROFILE hp2 = cmsCreate_sRGBProfile(ContextID); - x1 = cmsCreateTransform(DbgThread(), hp1, TYPE_BGR_8, hp2, TYPE_BGR_8, INTENT_PERCEPTUAL, 0); + x1 = cmsCreateTransform(ContextID, hp1, TYPE_BGR_8, hp2, TYPE_BGR_8, INTENT_PERCEPTUAL, 0); - cmsCloseProfile(DbgThread(), hp1); cmsCloseProfile(DbgThread(), hp2); + cmsCloseProfile(ContextID, hp1); cmsCloseProfile(ContextID, hp2); if (x1 != NULL) { - cmsDeleteTransform(DbgThread(), x1); + cmsDeleteTransform(ContextID, x1); return 0; } } @@ -5638,13 +5631,13 @@ cmsInt32Number CheckBadTransforms(void) } static -cmsInt32Number CheckErrReportingOnBadTransforms(void) +cmsInt32Number CheckErrReportingOnBadTransforms(cmsContext ContextID) { cmsInt32Number rc; - cmsSetLogErrorHandler(DbgThread(), ErrorReportingFunction); - rc = CheckBadTransforms(); - cmsSetLogErrorHandler(DbgThread(), FatalErrorQuit); + cmsSetLogErrorHandler(ContextID, ErrorReportingFunction); + rc = CheckBadTransforms(ContextID); + cmsSetLogErrorHandler(ContextID, FatalErrorQuit); // Reset the error state TrappedError = FALSE; @@ -5658,7 +5651,7 @@ cmsInt32Number CheckErrReportingOnBadTransforms(void) // Check a linear xform static -cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) +cmsInt32Number Check8linearXFORM(cmsContext ContextID, cmsHTRANSFORM xform, cmsInt32Number nChan) { cmsInt32Number n2, i, j; cmsUInt8Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS]; @@ -5668,7 +5661,7 @@ cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) for (j=0; j < 0xFF; j++) { memset(Inw, j, sizeof(Inw)); - cmsDoTransform(DbgThread(), xform, Inw, Outw, 1); + cmsDoTransform(ContextID, xform, Inw, Outw, 1); for (i=0; i < nChan; i++) { @@ -5689,7 +5682,7 @@ cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) } static -cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) +cmsInt32Number Compare8bitXFORM(cmsContext ContextID, cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) { cmsInt32Number n2, i, j; cmsUInt8Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];; @@ -5699,8 +5692,8 @@ cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsI for (j=0; j < 0xFF; j++) { memset(Inw, j, sizeof(Inw)); - cmsDoTransform(DbgThread(), xform1, Inw, Outw1, 1); - cmsDoTransform(DbgThread(), xform2, Inw, Outw2, 1); + cmsDoTransform(ContextID, xform1, Inw, Outw1, 1); + cmsDoTransform(ContextID, xform2, Inw, Outw2, 1); for (i=0; i < nChan; i++) { @@ -5724,7 +5717,7 @@ cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsI // Check a linear xform static -cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) +cmsInt32Number Check16linearXFORM(cmsContext ContextID, cmsHTRANSFORM xform, cmsInt32Number nChan) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS]; @@ -5734,7 +5727,7 @@ cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j; - cmsDoTransform(DbgThread(), xform, Inw, Outw, 1); + cmsDoTransform(ContextID, xform, Inw, Outw, 1); for (i=0; i < nChan; i++) { @@ -5756,7 +5749,7 @@ cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) } static -cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) +cmsInt32Number Compare16bitXFORM(cmsContext ContextID, cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];; @@ -5767,8 +5760,8 @@ cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j; - cmsDoTransform(DbgThread(), xform1, Inw, Outw1, 1); - cmsDoTransform(DbgThread(), xform2, Inw, Outw2, 1); + cmsDoTransform(ContextID, xform1, Inw, Outw1, 1); + cmsDoTransform(ContextID, xform2, Inw, Outw2, 1); for (i=0; i < nChan; i++) { @@ -5792,7 +5785,7 @@ cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms // Check a linear xform static -cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) +cmsInt32Number CheckFloatlinearXFORM(cmsContext ContextID, cmsHTRANSFORM xform, cmsInt32Number nChan) { cmsInt32Number i, j; cmsFloat32Number In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS]; @@ -5801,7 +5794,7 @@ cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);; - cmsDoTransform(DbgThread(), xform, In, Out, 1); + cmsDoTransform(ContextID, xform, In, Out, 1); for (i=0; i < nChan; i++) { @@ -5817,7 +5810,7 @@ cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) // Check a linear xform static -cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) +cmsInt32Number CompareFloatXFORM(cmsContext ContextID, cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) { cmsInt32Number i, j; cmsFloat32Number In[cmsMAXCHANNELS], Out1[cmsMAXCHANNELS], Out2[cmsMAXCHANNELS]; @@ -5826,8 +5819,8 @@ cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);; - cmsDoTransform(DbgThread(), xform1, In, Out1, 1); - cmsDoTransform(DbgThread(), xform2, In, Out2, 1); + cmsDoTransform(ContextID, xform1, In, Out1, 1); + cmsDoTransform(ContextID, xform2, In, Out2, 1); for (i=0; i < nChan; i++) { @@ -5845,7 +5838,7 @@ cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms // Curves only transforms ---------------------------------------------------------------------------------------- static -cmsInt32Number CheckCurvesOnlyTransforms(void) +cmsInt32Number CheckCurvesOnlyTransforms(cmsContext ContextID) { cmsHTRANSFORM xform1, xform2; @@ -5854,64 +5847,64 @@ cmsInt32Number CheckCurvesOnlyTransforms(void) cmsInt32Number rc = 1; - c1 = cmsBuildGamma(DbgThread(), 2.2); - c2 = cmsBuildGamma(DbgThread(), 1/2.2); - c3 = cmsBuildGamma(DbgThread(), 4.84); + c1 = cmsBuildGamma(ContextID, 2.2); + c2 = cmsBuildGamma(ContextID, 1/2.2); + c3 = cmsBuildGamma(ContextID, 4.84); - h1 = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigGrayData, &c1); - h2 = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigGrayData, &c2); - h3 = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigGrayData, &c3); + h1 = cmsCreateLinearizationDeviceLink(ContextID, cmsSigGrayData, &c1); + h2 = cmsCreateLinearizationDeviceLink(ContextID, cmsSigGrayData, &c2); + h3 = cmsCreateLinearizationDeviceLink(ContextID, cmsSigGrayData, &c3); SubTest("Gray float optimizeable transform"); - xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_FLT, h2, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); - rc &= CheckFloatlinearXFORM(xform1, 1); - cmsDeleteTransform(DbgThread(), xform1); + xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_FLT, h2, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + rc &= CheckFloatlinearXFORM(ContextID, xform1, 1); + cmsDeleteTransform(ContextID, xform1); if (rc == 0) goto Error; SubTest("Gray 8 optimizeable transform"); - xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); - rc &= Check8linearXFORM(xform1, 1); - cmsDeleteTransform(DbgThread(), xform1); + xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + rc &= Check8linearXFORM(ContextID, xform1, 1); + cmsDeleteTransform(ContextID, xform1); if (rc == 0) goto Error; SubTest("Gray 16 optimizeable transform"); - xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_16, h2, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); - rc &= Check16linearXFORM(xform1, 1); - cmsDeleteTransform(DbgThread(), xform1); + xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_16, h2, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + rc &= Check16linearXFORM(ContextID, xform1, 1); + cmsDeleteTransform(ContextID, xform1); if (rc == 0) goto Error; SubTest("Gray float non-optimizeable transform"); - xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_FLT, h1, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); - xform2 = cmsCreateTransform(DbgThread(), h3, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_FLT, h1, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(ContextID, h3, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); - rc &= CompareFloatXFORM(xform1, xform2, 1); - cmsDeleteTransform(DbgThread(), xform1); - cmsDeleteTransform(DbgThread(), xform2); + rc &= CompareFloatXFORM(ContextID, xform1, xform2, 1); + cmsDeleteTransform(ContextID, xform1); + cmsDeleteTransform(ContextID, xform2); if (rc == 0) goto Error; SubTest("Gray 8 non-optimizeable transform"); - xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_8, h1, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); - xform2 = cmsCreateTransform(DbgThread(), h3, TYPE_GRAY_8, NULL, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_8, h1, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(ContextID, h3, TYPE_GRAY_8, NULL, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); - rc &= Compare8bitXFORM(xform1, xform2, 1); - cmsDeleteTransform(DbgThread(), xform1); - cmsDeleteTransform(DbgThread(), xform2); + rc &= Compare8bitXFORM(ContextID, xform1, xform2, 1); + cmsDeleteTransform(ContextID, xform1); + cmsDeleteTransform(ContextID, xform2); if (rc == 0) goto Error; SubTest("Gray 16 non-optimizeable transform"); - xform1 = cmsCreateTransform(DbgThread(), h1, TYPE_GRAY_16, h1, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); - xform2 = cmsCreateTransform(DbgThread(), h3, TYPE_GRAY_16, NULL, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(ContextID, h1, TYPE_GRAY_16, h1, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(ContextID, h3, TYPE_GRAY_16, NULL, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); - rc &= Compare16bitXFORM(xform1, xform2, 1); - cmsDeleteTransform(DbgThread(), xform1); - cmsDeleteTransform(DbgThread(), xform2); + rc &= Compare16bitXFORM(ContextID, xform1, xform2, 1); + cmsDeleteTransform(ContextID, xform1); + cmsDeleteTransform(ContextID, xform2); if (rc == 0) goto Error; Error: - cmsCloseProfile(DbgThread(), h1); cmsCloseProfile(DbgThread(), h2); cmsCloseProfile(DbgThread(), h3); - cmsFreeToneCurve(DbgThread(), c1); cmsFreeToneCurve(DbgThread(), c2); cmsFreeToneCurve(DbgThread(), c3); + cmsCloseProfile(ContextID, h1); cmsCloseProfile(ContextID, h2); cmsCloseProfile(ContextID, h3); + cmsFreeToneCurve(ContextID, c1); cmsFreeToneCurve(ContextID, c2); cmsFreeToneCurve(ContextID, c3); return rc; } @@ -5923,21 +5916,21 @@ Error: static cmsFloat64Number MaxDE; static -cmsInt32Number CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cmsFloat64Number b) +cmsInt32Number CheckOneLab(cmsContext ContextID, cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cmsFloat64Number b) { cmsCIELab In, Out; cmsFloat64Number dE; In.L = L; In.a = a; In.b = b; - cmsDoTransform(DbgThread(), xform, &In, &Out, 1); + cmsDoTransform(ContextID, xform, &In, &Out, 1); - dE = cmsDeltaE(DbgThread(), &In, &Out); + dE = cmsDeltaE(ContextID, &In, &Out); if (dE > MaxDE) MaxDE = dE; if (MaxDE > 0.003) { Fail("dE=%f Lab1=(%f, %f, %f)\n\tLab2=(%f %f %f)", MaxDE, In.L, In.a, In.b, Out.L, Out.a, Out.b); - cmsDoTransform(DbgThread(), xform, &In, &Out, 1); + cmsDoTransform(ContextID, xform, &In, &Out, 1); return 0; } @@ -5946,7 +5939,7 @@ cmsInt32Number CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Nu // Check several Lab, slicing at non-exact values. Precision should be 16 bits. 50x50x50 checks aprox. static -cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform) +cmsInt32Number CheckSeveralLab(cmsContext ContextID, cmsHTRANSFORM xform) { cmsInt32Number L, a, b; @@ -5957,7 +5950,7 @@ cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform) for (b = 0; b < 65536; b += 1111) { - if (!CheckOneLab(xform, (L * 100.0) / 65535.0, + if (!CheckOneLab(ContextID, xform, (L * 100.0) / 65535.0, (a / 257.0) - 128, (b / 257.0) - 128)) return 0; } @@ -5970,171 +5963,171 @@ cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform) static -cmsInt32Number OneTrivialLab(cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt) +cmsInt32Number OneTrivialLab(cmsContext ContextID, cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt) { cmsHTRANSFORM xform; cmsInt32Number rc; SubTest(txt); - xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2); + xform = cmsCreateTransform(ContextID, hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2); - rc = CheckSeveralLab(xform); - cmsDeleteTransform(DbgThread(), xform); + rc = CheckSeveralLab(ContextID, xform); + cmsDeleteTransform(ContextID, xform); return rc; } static -cmsInt32Number CheckFloatLabTransforms(void) +cmsInt32Number CheckFloatLabTransforms(cmsContext ContextID) { - return OneTrivialLab(cmsCreateLab4Profile(DbgThread(), NULL), cmsCreateLab4Profile(DbgThread(), NULL), "Lab4/Lab4") && - OneTrivialLab(cmsCreateLab2Profile(DbgThread(), NULL), cmsCreateLab2Profile(DbgThread(), NULL), "Lab2/Lab2") && - OneTrivialLab(cmsCreateLab4Profile(DbgThread(), NULL), cmsCreateLab2Profile(DbgThread(), NULL), "Lab4/Lab2") && - OneTrivialLab(cmsCreateLab2Profile(DbgThread(), NULL), cmsCreateLab4Profile(DbgThread(), NULL), "Lab2/Lab4"); + return OneTrivialLab(ContextID, cmsCreateLab4Profile(ContextID, NULL), cmsCreateLab4Profile(ContextID, NULL), "Lab4/Lab4") && + OneTrivialLab(ContextID, cmsCreateLab2Profile(ContextID, NULL), cmsCreateLab2Profile(ContextID, NULL), "Lab2/Lab2") && + OneTrivialLab(ContextID, cmsCreateLab4Profile(ContextID, NULL), cmsCreateLab2Profile(ContextID, NULL), "Lab4/Lab2") && + OneTrivialLab(ContextID, cmsCreateLab2Profile(ContextID, NULL), cmsCreateLab4Profile(ContextID, NULL), "Lab2/Lab4"); } static -cmsInt32Number CheckEncodedLabTransforms(void) +cmsInt32Number CheckEncodedLabTransforms(cmsContext ContextID) { cmsHTRANSFORM xform; cmsUInt16Number In[3]; cmsCIELab Lab; cmsCIELab White = { 100, 0, 0 }; - cmsHPROFILE hLab1 = cmsCreateLab4Profile(DbgThread(), NULL); - cmsHPROFILE hLab2 = cmsCreateLab4Profile(DbgThread(), NULL); + cmsHPROFILE hLab1 = cmsCreateLab4Profile(ContextID, NULL); + cmsHPROFILE hLab2 = cmsCreateLab4Profile(ContextID, NULL); - xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_Lab_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2); + xform = cmsCreateTransform(ContextID, hLab1, TYPE_Lab_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2); In[0] = 0xFFFF; In[1] = 0x8080; In[2] = 0x8080; - cmsDoTransform(DbgThread(), xform, In, &Lab, 1); + cmsDoTransform(ContextID, xform, In, &Lab, 1); - if (cmsDeltaE(DbgThread(), &Lab, &White) > 0.0001) return 0; - cmsDeleteTransform(DbgThread(), xform); + if (cmsDeltaE(ContextID, &Lab, &White) > 0.0001) return 0; + cmsDeleteTransform(ContextID, xform); - hLab1 = cmsCreateLab2Profile(DbgThread(), NULL); - hLab2 = cmsCreateLab4Profile(DbgThread(), NULL); + hLab1 = cmsCreateLab2Profile(ContextID, NULL); + hLab2 = cmsCreateLab4Profile(ContextID, NULL); - xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_LabV2_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2); + xform = cmsCreateTransform(ContextID, hLab1, TYPE_LabV2_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2); In[0] = 0xFF00; In[1] = 0x8000; In[2] = 0x8000; - cmsDoTransform(DbgThread(), xform, In, &Lab, 1); + cmsDoTransform(ContextID, xform, In, &Lab, 1); - if (cmsDeltaE(DbgThread(), &Lab, &White) > 0.0001) return 0; + if (cmsDeltaE(ContextID, &Lab, &White) > 0.0001) return 0; - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); - hLab2 = cmsCreateLab2Profile(DbgThread(), NULL); - hLab1 = cmsCreateLab4Profile(DbgThread(), NULL); + hLab2 = cmsCreateLab2Profile(ContextID, NULL); + hLab1 = cmsCreateLab4Profile(ContextID, NULL); - xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_LabV2_16, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2); + xform = cmsCreateTransform(ContextID, hLab1, TYPE_Lab_DBL, hLab2, TYPE_LabV2_16, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2); Lab.L = 100; Lab.a = 0; Lab.b = 0; - cmsDoTransform(DbgThread(), xform, &Lab, In, 1); + cmsDoTransform(ContextID, xform, &Lab, In, 1); if (In[0] != 0xFF00 || In[1] != 0x8000 || In[2] != 0x8000) return 0; - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); - hLab1 = cmsCreateLab4Profile(DbgThread(), NULL); - hLab2 = cmsCreateLab4Profile(DbgThread(), NULL); + hLab1 = cmsCreateLab4Profile(ContextID, NULL); + hLab2 = cmsCreateLab4Profile(ContextID, NULL); - xform = cmsCreateTransform(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_16, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hLab1); cmsCloseProfile(DbgThread(), hLab2); + xform = cmsCreateTransform(ContextID, hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_16, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hLab1); cmsCloseProfile(ContextID, hLab2); Lab.L = 100; Lab.a = 0; Lab.b = 0; - cmsDoTransform(DbgThread(), xform, &Lab, In, 1); + cmsDoTransform(ContextID, xform, &Lab, In, 1); if (In[0] != 0xFFFF || In[1] != 0x8080 || In[2] != 0x8080) return 0; - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); return 1; } static -cmsInt32Number CheckStoredIdentities(void) +cmsInt32Number CheckStoredIdentities(cmsContext ContextID) { cmsHPROFILE hLab, hLink, h4, h2; cmsHTRANSFORM xform; cmsInt32Number rc = 1; - hLab = cmsCreateLab4Profile(DbgThread(), NULL); - xform = cmsCreateTransform(DbgThread(), hLab, TYPE_Lab_8, hLab, TYPE_Lab_8, 0, 0); + hLab = cmsCreateLab4Profile(ContextID, NULL); + xform = cmsCreateTransform(ContextID, hLab, TYPE_Lab_8, hLab, TYPE_Lab_8, 0, 0); - hLink = cmsTransform2DeviceLink(NULL, xform, 3.4, 0); - cmsSaveProfileToFile(DbgThread(), hLink, "abstractv2.icc"); - cmsCloseProfile(DbgThread(), hLink); + hLink = cmsTransform2DeviceLink(ContextID, xform, 3.4, 0); + cmsSaveProfileToFile(ContextID, hLink, "abstractv2.icc"); + cmsCloseProfile(ContextID, hLink); - hLink = cmsTransform2DeviceLink(NULL, xform, 4.3, 0); - cmsSaveProfileToFile(DbgThread(), hLink, "abstractv4.icc"); - cmsCloseProfile(DbgThread(), hLink); + hLink = cmsTransform2DeviceLink(ContextID, xform, 4.3, 0); + cmsSaveProfileToFile(ContextID, hLink, "abstractv4.icc"); + cmsCloseProfile(ContextID, hLink); - cmsDeleteTransform(DbgThread(), xform); - cmsCloseProfile(DbgThread(), hLab); + cmsDeleteTransform(ContextID, xform); + cmsCloseProfile(ContextID, hLab); - h4 = cmsOpenProfileFromFile(DbgThread(), "abstractv4.icc", "r"); + h4 = cmsOpenProfileFromFile(ContextID, "abstractv4.icc", "r"); - xform = cmsCreateTransform(DbgThread(), h4, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + xform = cmsCreateTransform(ContextID, h4, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); SubTest("V4"); - rc &= CheckSeveralLab(xform); + rc &= CheckSeveralLab(ContextID, xform); - cmsDeleteTransform(DbgThread(), xform); - cmsCloseProfile(DbgThread(), h4); + cmsDeleteTransform(ContextID, xform); + cmsCloseProfile(ContextID, h4); if (!rc) goto Error; SubTest("V2"); - h2 = cmsOpenProfileFromFile(DbgThread(), "abstractv2.icc", "r"); + h2 = cmsOpenProfileFromFile(ContextID, "abstractv2.icc", "r"); - xform = cmsCreateTransform(DbgThread(), h2, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - rc &= CheckSeveralLab(xform); - cmsDeleteTransform(DbgThread(), xform); - cmsCloseProfile(DbgThread(), h2); + xform = cmsCreateTransform(ContextID, h2, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + rc &= CheckSeveralLab(ContextID, xform); + cmsDeleteTransform(ContextID, xform); + cmsCloseProfile(ContextID, h2); if (!rc) goto Error; SubTest("V2 -> V4"); - h2 = cmsOpenProfileFromFile(DbgThread(), "abstractv2.icc", "r"); - h4 = cmsOpenProfileFromFile(DbgThread(), "abstractv4.icc", "r"); + h2 = cmsOpenProfileFromFile(ContextID, "abstractv2.icc", "r"); + h4 = cmsOpenProfileFromFile(ContextID, "abstractv4.icc", "r"); - xform = cmsCreateTransform(DbgThread(), h4, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - rc &= CheckSeveralLab(xform); - cmsDeleteTransform(DbgThread(), xform); - cmsCloseProfile(DbgThread(), h2); - cmsCloseProfile(DbgThread(), h4); + xform = cmsCreateTransform(ContextID, h4, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + rc &= CheckSeveralLab(ContextID, xform); + cmsDeleteTransform(ContextID, xform); + cmsCloseProfile(ContextID, h2); + cmsCloseProfile(ContextID, h4); SubTest("V4 -> V2"); - h2 = cmsOpenProfileFromFile(DbgThread(), "abstractv2.icc", "r"); - h4 = cmsOpenProfileFromFile(DbgThread(), "abstractv4.icc", "r"); + h2 = cmsOpenProfileFromFile(ContextID, "abstractv2.icc", "r"); + h4 = cmsOpenProfileFromFile(ContextID, "abstractv4.icc", "r"); - xform = cmsCreateTransform(DbgThread(), h2, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - rc &= CheckSeveralLab(xform); - cmsDeleteTransform(DbgThread(), xform); - cmsCloseProfile(DbgThread(), h2); - cmsCloseProfile(DbgThread(), h4); + xform = cmsCreateTransform(ContextID, h2, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + rc &= CheckSeveralLab(ContextID, xform); + cmsDeleteTransform(ContextID, xform); + cmsCloseProfile(ContextID, h2); + cmsCloseProfile(ContextID, h4); Error: remove("abstractv2.icc"); @@ -6147,23 +6140,23 @@ Error: // Check a simple xform from a matrix profile to itself. Test floating point accuracy. static -cmsInt32Number CheckMatrixShaperXFORMFloat(void) +cmsInt32Number CheckMatrixShaperXFORMFloat(cmsContext ContextID) { cmsHPROFILE hAbove, hSRGB; cmsHTRANSFORM xform; cmsInt32Number rc1, rc2; - hAbove = Create_AboveRGB(); - xform = cmsCreateTransform(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hAbove); - rc1 = CheckFloatlinearXFORM(xform, 3); - cmsDeleteTransform(DbgThread(), xform); + hAbove = Create_AboveRGB(ContextID); + xform = cmsCreateTransform(ContextID, hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hAbove); + rc1 = CheckFloatlinearXFORM(ContextID, xform, 3); + cmsDeleteTransform(ContextID, xform); - hSRGB = cmsCreate_sRGBProfile(DbgThread()); - xform = cmsCreateTransform(DbgThread(), hSRGB, TYPE_RGB_FLT, hSRGB, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hSRGB); - rc2 = CheckFloatlinearXFORM(xform, 3); - cmsDeleteTransform(DbgThread(), xform); + hSRGB = cmsCreate_sRGBProfile(ContextID); + xform = cmsCreateTransform(ContextID, hSRGB, TYPE_RGB_FLT, hSRGB, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hSRGB); + rc2 = CheckFloatlinearXFORM(ContextID, xform, 3); + cmsDeleteTransform(ContextID, xform); return rc1 && rc2; @@ -6171,24 +6164,24 @@ cmsInt32Number CheckMatrixShaperXFORMFloat(void) // Check a simple xform from a matrix profile to itself. Test 16 bits accuracy. static -cmsInt32Number CheckMatrixShaperXFORM16(void) +cmsInt32Number CheckMatrixShaperXFORM16(cmsContext ContextID) { cmsHPROFILE hAbove, hSRGB; cmsHTRANSFORM xform; cmsInt32Number rc1, rc2; - hAbove = Create_AboveRGB(); - xform = cmsCreateTransform(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hAbove); + hAbove = Create_AboveRGB(ContextID); + xform = cmsCreateTransform(ContextID, hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hAbove); - rc1 = Check16linearXFORM(xform, 3); - cmsDeleteTransform(DbgThread(), xform); + rc1 = Check16linearXFORM(ContextID, xform, 3); + cmsDeleteTransform(ContextID, xform); - hSRGB = cmsCreate_sRGBProfile(DbgThread()); - xform = cmsCreateTransform(DbgThread(), hSRGB, TYPE_RGB_16, hSRGB, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hSRGB); - rc2 = Check16linearXFORM(xform, 3); - cmsDeleteTransform(DbgThread(), xform); + hSRGB = cmsCreate_sRGBProfile(ContextID); + xform = cmsCreateTransform(ContextID, hSRGB, TYPE_RGB_16, hSRGB, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hSRGB); + rc2 = Check16linearXFORM(ContextID, xform, 3); + cmsDeleteTransform(ContextID, xform); return rc1 && rc2; @@ -6197,23 +6190,23 @@ cmsInt32Number CheckMatrixShaperXFORM16(void) // Check a simple xform from a matrix profile to itself. Test 8 bits accuracy. static -cmsInt32Number CheckMatrixShaperXFORM8(void) +cmsInt32Number CheckMatrixShaperXFORM8(cmsContext ContextID) { cmsHPROFILE hAbove, hSRGB; cmsHTRANSFORM xform; cmsInt32Number rc1, rc2; - hAbove = Create_AboveRGB(); - xform = cmsCreateTransform(DbgThread(), hAbove, TYPE_RGB_8, hAbove, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hAbove); - rc1 = Check8linearXFORM(xform, 3); - cmsDeleteTransform(DbgThread(), xform); + hAbove = Create_AboveRGB(ContextID); + xform = cmsCreateTransform(ContextID, hAbove, TYPE_RGB_8, hAbove, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hAbove); + rc1 = Check8linearXFORM(ContextID, xform, 3); + cmsDeleteTransform(ContextID, xform); - hSRGB = cmsCreate_sRGBProfile(DbgThread()); - xform = cmsCreateTransform(DbgThread(), hSRGB, TYPE_RGB_8, hSRGB, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hSRGB); - rc2 = Check8linearXFORM(xform, 3); - cmsDeleteTransform(DbgThread(), xform); + hSRGB = cmsCreate_sRGBProfile(ContextID); + xform = cmsCreateTransform(ContextID, hSRGB, TYPE_RGB_8, hSRGB, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hSRGB); + rc2 = Check8linearXFORM(ContextID, xform, 3); + cmsDeleteTransform(ContextID, xform); return rc1 && rc2; @@ -6232,7 +6225,7 @@ cmsInt32Number CheckMatrixShaperXFORM8(void) // Check known values going from sRGB to XYZ static -cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Number G, cmsInt32Number B, cmsFloat64Number X, cmsFloat64Number Y, cmsFloat64Number Z, cmsFloat64Number err) +cmsInt32Number CheckOneRGB_f(cmsContext ContextID, cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Number G, cmsInt32Number B, cmsFloat64Number X, cmsFloat64Number Y, cmsFloat64Number Z, cmsFloat64Number err) { cmsFloat32Number RGB[3]; cmsFloat64Number Out[3]; @@ -6241,7 +6234,7 @@ cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Numb RGB[1] = (cmsFloat32Number) (G / 255.0); RGB[2] = (cmsFloat32Number) (B / 255.0); - cmsDoTransform(DbgThread(), xform, RGB, Out, 1); + cmsDoTransform(ContextID, xform, RGB, Out, 1); return IsGoodVal("X", X , Out[0], err) && IsGoodVal("Y", Y , Out[1], err) && @@ -6249,43 +6242,43 @@ cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Numb } static -cmsInt32Number Chack_sRGB_Float(void) +cmsInt32Number Chack_sRGB_Float(cmsContext ContextID) { cmsHPROFILE hsRGB, hXYZ, hLab; cmsHTRANSFORM xform1, xform2; cmsInt32Number rc; - hsRGB = cmsCreate_sRGBProfile(DbgThread()); - hXYZ = cmsCreateXYZProfile(DbgThread()); - hLab = cmsCreateLab4Profile(DbgThread(), NULL); + hsRGB = cmsCreate_sRGBProfile(ContextID); + hXYZ = cmsCreateXYZProfile(ContextID); + hLab = cmsCreateLab4Profile(ContextID, NULL); - xform1 = cmsCreateTransform(DbgThread(), hsRGB, TYPE_RGB_FLT, hXYZ, TYPE_XYZ_DBL, + xform1 = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_FLT, hXYZ, TYPE_XYZ_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - xform2 = cmsCreateTransform(DbgThread(), hsRGB, TYPE_RGB_FLT, hLab, TYPE_Lab_DBL, + xform2 = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_FLT, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hsRGB); - cmsCloseProfile(DbgThread(), hXYZ); - cmsCloseProfile(DbgThread(), hLab); + cmsCloseProfile(ContextID, hsRGB); + cmsCloseProfile(ContextID, hXYZ); + cmsCloseProfile(ContextID, hLab); MaxErr = 0; // Xform 1 goes from 8 bits to XYZ, - rc = CheckOneRGB_f(xform1, 1, 1, 1, 0.0002927, 0.0003035, 0.000250, 0.0001); - rc &= CheckOneRGB_f(xform1, 127, 127, 127, 0.2046329, 0.212230, 0.175069, 0.0001); - rc &= CheckOneRGB_f(xform1, 12, 13, 15, 0.0038364, 0.0039928, 0.003853, 0.0001); - rc &= CheckOneRGB_f(xform1, 128, 0, 0, 0.0941240, 0.0480256, 0.003005, 0.0001); - rc &= CheckOneRGB_f(xform1, 190, 25, 210, 0.3204592, 0.1605926, 0.468213, 0.0001); + rc = CheckOneRGB_f(ContextID, xform1, 1, 1, 1, 0.0002927, 0.0003035, 0.000250, 0.0001); + rc &= CheckOneRGB_f(ContextID, xform1, 127, 127, 127, 0.2046329, 0.212230, 0.175069, 0.0001); + rc &= CheckOneRGB_f(ContextID, xform1, 12, 13, 15, 0.0038364, 0.0039928, 0.003853, 0.0001); + rc &= CheckOneRGB_f(ContextID, xform1, 128, 0, 0, 0.0941240, 0.0480256, 0.003005, 0.0001); + rc &= CheckOneRGB_f(ContextID, xform1, 190, 25, 210, 0.3204592, 0.1605926, 0.468213, 0.0001); // Xform 2 goes from 8 bits to Lab, we allow 0.01 error max - rc &= CheckOneRGB_f(xform2, 1, 1, 1, 0.2741748, 0, 0, 0.01); - rc &= CheckOneRGB_f(xform2, 127, 127, 127, 53.192776, 0, 0, 0.01); - rc &= CheckOneRGB_f(xform2, 190, 25, 210, 47.052136, 74.565610, -56.883274, 0.01); - rc &= CheckOneRGB_f(xform2, 128, 0, 0, 26.164701, 48.478171, 39.4384713, 0.01); + rc &= CheckOneRGB_f(ContextID, xform2, 1, 1, 1, 0.2741748, 0, 0, 0.01); + rc &= CheckOneRGB_f(ContextID, xform2, 127, 127, 127, 53.192776, 0, 0, 0.01); + rc &= CheckOneRGB_f(ContextID, xform2, 190, 25, 210, 47.052136, 74.565610, -56.883274, 0.01); + rc &= CheckOneRGB_f(ContextID, xform2, 128, 0, 0, 26.164701, 48.478171, 39.4384713, 0.01); - cmsDeleteTransform(DbgThread(), xform1); - cmsDeleteTransform(DbgThread(), xform2); + cmsDeleteTransform(ContextID, xform1); + cmsDeleteTransform(ContextID, xform2); return rc; } @@ -6293,7 +6286,8 @@ cmsInt32Number Chack_sRGB_Float(void) // --------------------------------------------------- static -cmsBool GetProfileRGBPrimaries(cmsHPROFILE hProfile, +cmsBool GetProfileRGBPrimaries(cmsContext ContextID, + cmsHPROFILE hProfile, cmsCIEXYZTRIPLE *result, cmsUInt32Number intent) { @@ -6303,41 +6297,41 @@ cmsBool GetProfileRGBPrimaries(cmsHPROFILE hProfile, {0., 1., 0.}, {0., 0., 1.}}; - hXYZ = cmsCreateXYZProfile(DbgThread()); + hXYZ = cmsCreateXYZProfile(ContextID); if (hXYZ == NULL) return FALSE; - hTransform = cmsCreateTransform(DbgThread(), hProfile, TYPE_RGB_DBL, hXYZ, TYPE_XYZ_DBL, + hTransform = cmsCreateTransform(ContextID, hProfile, TYPE_RGB_DBL, hXYZ, TYPE_XYZ_DBL, intent, cmsFLAGS_NOCACHE | cmsFLAGS_NOOPTIMIZE); - cmsCloseProfile(DbgThread(), hXYZ); + cmsCloseProfile(ContextID, hXYZ); if (hTransform == NULL) return FALSE; - cmsDoTransform(DbgThread(), hTransform, rgb, result, 3); - cmsDeleteTransform(DbgThread(), hTransform); + cmsDoTransform(ContextID, hTransform, rgb, result, 3); + cmsDeleteTransform(ContextID, hTransform); return TRUE; } static -int CheckRGBPrimaries(void) +int CheckRGBPrimaries(cmsContext ContextID) { cmsHPROFILE hsRGB; cmsCIEXYZTRIPLE tripXYZ; cmsCIExyYTRIPLE tripxyY; cmsBool result; - cmsSetAdaptationState(DbgThread(), 0); - hsRGB = cmsCreate_sRGBProfile(DbgThread()); + cmsSetAdaptationState(ContextID, 0); + hsRGB = cmsCreate_sRGBProfile(ContextID); if (!hsRGB) return 0; - result = GetProfileRGBPrimaries(hsRGB, &tripXYZ, + result = GetProfileRGBPrimaries(ContextID, hsRGB, &tripXYZ, INTENT_ABSOLUTE_COLORIMETRIC); - cmsCloseProfile(DbgThread(), hsRGB); + cmsCloseProfile(ContextID, hsRGB); if (!result) return 0; - cmsXYZ2xyY(DbgThread(), &tripxyY.Red, &tripXYZ.Red); - cmsXYZ2xyY(DbgThread(), &tripxyY.Green, &tripXYZ.Green); - cmsXYZ2xyY(DbgThread(), &tripxyY.Blue, &tripXYZ.Blue); + cmsXYZ2xyY(ContextID, &tripxyY.Red, &tripXYZ.Red); + cmsXYZ2xyY(ContextID, &tripxyY.Green, &tripXYZ.Green); + cmsXYZ2xyY(ContextID, &tripxyY.Blue, &tripXYZ.Blue); /* valus were taken from http://en.wikipedia.org/wiki/RGB_color_spaces#Specifications */ @@ -6361,10 +6355,10 @@ int CheckRGBPrimaries(void) // This function will check CMYK -> CMYK transforms. It uses FOGRA29 and SWOP ICC profiles static -cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char* Profile2) +cmsInt32Number CheckCMYK(cmsContext ContextID, cmsInt32Number Intent, const char *Profile1, const char* Profile2) { - cmsHPROFILE hSWOP = cmsOpenProfileFromFile(DbgThread(), Profile1, "r"); - cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(DbgThread(), Profile2, "r"); + cmsHPROFILE hSWOP = cmsOpenProfileFromFile(ContextID, Profile1, "r"); + cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(ContextID, Profile2, "r"); cmsHTRANSFORM xform, swop_lab, fogra_lab; cmsFloat32Number CMYK1[4], CMYK2[4]; cmsCIELab Lab1, Lab2; @@ -6372,12 +6366,12 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char cmsFloat64Number DeltaL, Max; cmsInt32Number i; - hLab = cmsCreateLab4Profile(DbgThread(), NULL); + hLab = cmsCreateLab4Profile(ContextID, NULL); - xform = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, Intent, 0); + xform = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, Intent, 0); - swop_lab = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0); - fogra_lab = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0); + swop_lab = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0); + fogra_lab = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0); Max = 0; for (i=0; i <= 100; i++) { @@ -6387,9 +6381,9 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char CMYK1[2] = 30; CMYK1[3] = (cmsFloat32Number) i; - cmsDoTransform(DbgThread(), swop_lab, CMYK1, &Lab1, 1); - cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1); - cmsDoTransform(DbgThread(), fogra_lab, CMYK2, &Lab2, 1); + cmsDoTransform(ContextID, swop_lab, CMYK1, &Lab1, 1); + cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1); + cmsDoTransform(ContextID, fogra_lab, CMYK2, &Lab2, 1); DeltaL = fabs(Lab1.L - Lab2.L); @@ -6397,10 +6391,10 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char } - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); - xform = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, Intent, 0); + xform = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, Intent, 0); for (i=0; i <= 100; i++) { CMYK1[0] = 10; @@ -6408,9 +6402,9 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char CMYK1[2] = 30; CMYK1[3] = (cmsFloat32Number) i; - cmsDoTransform(DbgThread(), fogra_lab, CMYK1, &Lab1, 1); - cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1); - cmsDoTransform(DbgThread(), swop_lab, CMYK2, &Lab2, 1); + cmsDoTransform(ContextID, fogra_lab, CMYK1, &Lab1, 1); + cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1); + cmsDoTransform(ContextID, swop_lab, CMYK2, &Lab2, 1); DeltaL = fabs(Lab1.L - Lab2.L); @@ -6418,45 +6412,45 @@ cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char } - cmsCloseProfile(DbgThread(), hSWOP); - cmsCloseProfile(DbgThread(), hFOGRA); - cmsCloseProfile(DbgThread(), hLab); + cmsCloseProfile(ContextID, hSWOP); + cmsCloseProfile(ContextID, hFOGRA); + cmsCloseProfile(ContextID, hLab); - cmsDeleteTransform(DbgThread(), xform); - cmsDeleteTransform(DbgThread(), swop_lab); - cmsDeleteTransform(DbgThread(), fogra_lab); + cmsDeleteTransform(ContextID, xform); + cmsDeleteTransform(ContextID, swop_lab); + cmsDeleteTransform(ContextID, fogra_lab); return Max < 3.0; } static -cmsInt32Number CheckCMYKRoundtrip(void) +cmsInt32Number CheckCMYKRoundtrip(cmsContext ContextID) { - return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test1.icc"); + return CheckCMYK(ContextID, INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test1.icc"); } static -cmsInt32Number CheckCMYKPerceptual(void) +cmsInt32Number CheckCMYKPerceptual(cmsContext ContextID) { - return CheckCMYK(INTENT_PERCEPTUAL, "test1.icc", "test2.icc"); + return CheckCMYK(ContextID, INTENT_PERCEPTUAL, "test1.icc", "test2.icc"); } static -cmsInt32Number CheckCMYKRelCol(void) +cmsInt32Number CheckCMYKRelCol(cmsContext ContextID) { - return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test2.icc"); + return CheckCMYK(ContextID, INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test2.icc"); } static -cmsInt32Number CheckKOnlyBlackPreserving(void) +cmsInt32Number CheckKOnlyBlackPreserving(cmsContext ContextID) { - cmsHPROFILE hSWOP = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"); - cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r"); + cmsHPROFILE hSWOP = cmsOpenProfileFromFile(ContextID, "test1.icc", "r"); + cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(ContextID, "test2.icc", "r"); cmsHTRANSFORM xform, swop_lab, fogra_lab; cmsFloat32Number CMYK1[4], CMYK2[4]; cmsCIELab Lab1, Lab2; @@ -6464,12 +6458,12 @@ cmsInt32Number CheckKOnlyBlackPreserving(void) cmsFloat64Number DeltaL, Max; cmsInt32Number i; - hLab = cmsCreateLab4Profile(DbgThread(), NULL); + hLab = cmsCreateLab4Profile(ContextID, NULL); - xform = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0); + xform = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0); - swop_lab = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); - fogra_lab = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); + swop_lab = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); + fogra_lab = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); Max = 0; @@ -6480,13 +6474,13 @@ cmsInt32Number CheckKOnlyBlackPreserving(void) CMYK1[3] = (cmsFloat32Number) i; // SWOP CMYK to Lab1 - cmsDoTransform(DbgThread(), swop_lab, CMYK1, &Lab1, 1); + cmsDoTransform(ContextID, swop_lab, CMYK1, &Lab1, 1); // SWOP To FOGRA using black preservation - cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1); + cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1); // Obtained FOGRA CMYK to Lab2 - cmsDoTransform(DbgThread(), fogra_lab, CMYK2, &Lab2, 1); + cmsDoTransform(ContextID, fogra_lab, CMYK2, &Lab2, 1); // We care only on L* DeltaL = fabs(Lab1.L - Lab2.L); @@ -6495,13 +6489,13 @@ cmsInt32Number CheckKOnlyBlackPreserving(void) } - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); // dL should be below 3.0 // Same, but FOGRA to SWOP - xform = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0); + xform = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0); for (i=0; i <= 100; i++) { CMYK1[0] = 0; @@ -6509,9 +6503,9 @@ cmsInt32Number CheckKOnlyBlackPreserving(void) CMYK1[2] = 0; CMYK1[3] = (cmsFloat32Number) i; - cmsDoTransform(DbgThread(), fogra_lab, CMYK1, &Lab1, 1); - cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1); - cmsDoTransform(DbgThread(), swop_lab, CMYK2, &Lab2, 1); + cmsDoTransform(ContextID, fogra_lab, CMYK1, &Lab1, 1); + cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1); + cmsDoTransform(ContextID, swop_lab, CMYK2, &Lab2, 1); DeltaL = fabs(Lab1.L - Lab2.L); @@ -6519,22 +6513,22 @@ cmsInt32Number CheckKOnlyBlackPreserving(void) } - cmsCloseProfile(DbgThread(), hSWOP); - cmsCloseProfile(DbgThread(), hFOGRA); - cmsCloseProfile(DbgThread(), hLab); + cmsCloseProfile(ContextID, hSWOP); + cmsCloseProfile(ContextID, hFOGRA); + cmsCloseProfile(ContextID, hLab); - cmsDeleteTransform(DbgThread(), xform); - cmsDeleteTransform(DbgThread(), swop_lab); - cmsDeleteTransform(DbgThread(), fogra_lab); + cmsDeleteTransform(ContextID, xform); + cmsDeleteTransform(ContextID, swop_lab); + cmsDeleteTransform(ContextID, fogra_lab); return Max < 3.0; } static -cmsInt32Number CheckKPlaneBlackPreserving(void) +cmsInt32Number CheckKPlaneBlackPreserving(cmsContext ContextID) { - cmsHPROFILE hSWOP = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"); - cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r"); + cmsHPROFILE hSWOP = cmsOpenProfileFromFile(ContextID, "test1.icc", "r"); + cmsHPROFILE hFOGRA = cmsOpenProfileFromFile(ContextID, "test2.icc", "r"); cmsHTRANSFORM xform, swop_lab, fogra_lab; cmsFloat32Number CMYK1[4], CMYK2[4]; cmsCIELab Lab1, Lab2; @@ -6542,12 +6536,12 @@ cmsInt32Number CheckKPlaneBlackPreserving(void) cmsFloat64Number DeltaE, Max; cmsInt32Number i; - hLab = cmsCreateLab4Profile(DbgThread(), NULL); + hLab = cmsCreateLab4Profile(ContextID, NULL); - xform = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, 0); + xform = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, 0); - swop_lab = cmsCreateTransform(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); - fogra_lab = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); + swop_lab = cmsCreateTransform(ContextID, hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); + fogra_lab = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); Max = 0; @@ -6557,19 +6551,19 @@ cmsInt32Number CheckKPlaneBlackPreserving(void) CMYK1[2] = 0; CMYK1[3] = (cmsFloat32Number) i; - cmsDoTransform(DbgThread(), swop_lab, CMYK1, &Lab1, 1); - cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1); - cmsDoTransform(DbgThread(), fogra_lab, CMYK2, &Lab2, 1); + cmsDoTransform(ContextID, swop_lab, CMYK1, &Lab1, 1); + cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1); + cmsDoTransform(ContextID, fogra_lab, CMYK2, &Lab2, 1); - DeltaE = cmsDeltaE(DbgThread(), &Lab1, &Lab2); + DeltaE = cmsDeltaE(ContextID, &Lab1, &Lab2); if (DeltaE > Max) Max = DeltaE; } - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); - xform = cmsCreateTransform(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_PLANE_PERCEPTUAL, 0); + xform = cmsCreateTransform(ContextID, hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_PLANE_PERCEPTUAL, 0); for (i=0; i <= 100; i++) { CMYK1[0] = 30; @@ -6577,26 +6571,26 @@ cmsInt32Number CheckKPlaneBlackPreserving(void) CMYK1[2] = 10; CMYK1[3] = (cmsFloat32Number) i; - cmsDoTransform(DbgThread(), fogra_lab, CMYK1, &Lab1, 1); - cmsDoTransform(DbgThread(), xform, CMYK1, CMYK2, 1); - cmsDoTransform(DbgThread(), swop_lab, CMYK2, &Lab2, 1); + cmsDoTransform(ContextID, fogra_lab, CMYK1, &Lab1, 1); + cmsDoTransform(ContextID, xform, CMYK1, CMYK2, 1); + cmsDoTransform(ContextID, swop_lab, CMYK2, &Lab2, 1); - DeltaE = cmsDeltaE(DbgThread(), &Lab1, &Lab2); + DeltaE = cmsDeltaE(ContextID, &Lab1, &Lab2); if (DeltaE > Max) Max = DeltaE; } - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); - cmsCloseProfile(DbgThread(), hSWOP); - cmsCloseProfile(DbgThread(), hFOGRA); - cmsCloseProfile(DbgThread(), hLab); + cmsCloseProfile(ContextID, hSWOP); + cmsCloseProfile(ContextID, hFOGRA); + cmsCloseProfile(ContextID, hLab); - cmsDeleteTransform(DbgThread(), swop_lab); - cmsDeleteTransform(DbgThread(), fogra_lab); + cmsDeleteTransform(ContextID, swop_lab); + cmsDeleteTransform(ContextID, fogra_lab); return Max < 30.0; } @@ -6606,40 +6600,40 @@ cmsInt32Number CheckKPlaneBlackPreserving(void) static -cmsInt32Number CheckProofingXFORMFloat(void) +cmsInt32Number CheckProofingXFORMFloat(cmsContext ContextID) { cmsHPROFILE hAbove; cmsHTRANSFORM xform; cmsInt32Number rc; - hAbove = Create_AboveRGB(); - xform = cmsCreateProofingTransform(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, + hAbove = Create_AboveRGB(ContextID); + xform = cmsCreateProofingTransform(ContextID, hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING); - cmsCloseProfile(DbgThread(), hAbove); - rc = CheckFloatlinearXFORM(xform, 3); - cmsDeleteTransform(DbgThread(), xform); + cmsCloseProfile(ContextID, hAbove); + rc = CheckFloatlinearXFORM(ContextID, xform, 3); + cmsDeleteTransform(ContextID, xform); return rc; } static -cmsInt32Number CheckProofingXFORM16(void) +cmsInt32Number CheckProofingXFORM16(cmsContext ContextID) { cmsHPROFILE hAbove; cmsHTRANSFORM xform; cmsInt32Number rc; - hAbove = Create_AboveRGB(); - xform = cmsCreateProofingTransform(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, + hAbove = Create_AboveRGB(ContextID); + xform = cmsCreateProofingTransform(ContextID, hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING|cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hAbove); - rc = Check16linearXFORM(xform, 3); - cmsDeleteTransform(DbgThread(), xform); + cmsCloseProfile(ContextID, hAbove); + rc = Check16linearXFORM(ContextID, xform, 3); + cmsDeleteTransform(ContextID, xform); return rc; } static -cmsInt32Number CheckGamutCheck(void) +cmsInt32Number CheckGamutCheck(cmsContext ContextID) { cmsHPROFILE hSRGB, hAbove; cmsHTRANSFORM xform; @@ -6647,42 +6641,42 @@ cmsInt32Number CheckGamutCheck(void) cmsUInt16Number Alarm[16] = { 0xDEAD, 0xBABE, 0xFACE }; // Set alarm codes to fancy values so we could check the out of gamut condition - cmsSetAlarmCodes(DbgThread(), Alarm); + cmsSetAlarmCodes(ContextID, Alarm); // Create the profiles - hSRGB = cmsCreate_sRGBProfile(DbgThread()); - hAbove = Create_AboveRGB(); + hSRGB = cmsCreate_sRGBProfile(ContextID); + hAbove = Create_AboveRGB(ContextID); if (hSRGB == NULL || hAbove == NULL) return 0; // Failed SubTest("Gamut check on floating point"); // Create a gamut checker in the same space. No value should be out of gamut - xform = cmsCreateProofingTransform(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, + xform = cmsCreateProofingTransform(ContextID, hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK); - if (!CheckFloatlinearXFORM(xform, 3)) { - cmsCloseProfile(DbgThread(), hSRGB); - cmsCloseProfile(DbgThread(), hAbove); - cmsDeleteTransform(DbgThread(), xform); + if (!CheckFloatlinearXFORM(ContextID, xform, 3)) { + cmsCloseProfile(ContextID, hSRGB); + cmsCloseProfile(ContextID, hAbove); + cmsDeleteTransform(ContextID, xform); Fail("Gamut check on same profile failed"); return 0; } - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); SubTest("Gamut check on 16 bits"); - xform = cmsCreateProofingTransform(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hSRGB, + xform = cmsCreateProofingTransform(ContextID, hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hSRGB, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK); - cmsCloseProfile(DbgThread(), hSRGB); - cmsCloseProfile(DbgThread(), hAbove); + cmsCloseProfile(ContextID, hSRGB); + cmsCloseProfile(ContextID, hAbove); - rc = Check16linearXFORM(xform, 3); + rc = Check16linearXFORM(ContextID, xform, 3); - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); return rc; } @@ -6692,54 +6686,54 @@ cmsInt32Number CheckGamutCheck(void) // ------------------------------------------------------------------------------------------------------------------- static -cmsInt32Number CheckBlackPoint(void) +cmsInt32Number CheckBlackPoint(cmsContext ContextID) { cmsHPROFILE hProfile; cmsCIEXYZ Black; cmsCIELab Lab; - hProfile = cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"); - cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hProfile); + hProfile = cmsOpenProfileFromFile(ContextID, "test5.icc", "r"); + cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hProfile); - hProfile = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"); - cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsXYZ2Lab(DbgThread(), NULL, &Lab, &Black); - cmsCloseProfile(DbgThread(), hProfile); + hProfile = cmsOpenProfileFromFile(ContextID, "test1.icc", "r"); + cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsXYZ2Lab(ContextID, NULL, &Lab, &Black); + cmsCloseProfile(ContextID, hProfile); - hProfile = cmsOpenProfileFromFile(DbgThread(), "lcms2cmyk.icc", "r"); - cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsXYZ2Lab(DbgThread(), NULL, &Lab, &Black); - cmsCloseProfile(DbgThread(), hProfile); + hProfile = cmsOpenProfileFromFile(ContextID, "lcms2cmyk.icc", "r"); + cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsXYZ2Lab(ContextID, NULL, &Lab, &Black); + cmsCloseProfile(ContextID, hProfile); - hProfile = cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r"); - cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsXYZ2Lab(DbgThread(), NULL, &Lab, &Black); - cmsCloseProfile(DbgThread(), hProfile); + hProfile = cmsOpenProfileFromFile(ContextID, "test2.icc", "r"); + cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsXYZ2Lab(ContextID, NULL, &Lab, &Black); + cmsCloseProfile(ContextID, hProfile); - hProfile = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"); - cmsDetectDestinationBlackPoint(DbgThread(), &Black, hProfile, INTENT_PERCEPTUAL, 0); - cmsXYZ2Lab(DbgThread(), NULL, &Lab, &Black); - cmsCloseProfile(DbgThread(), hProfile); + hProfile = cmsOpenProfileFromFile(ContextID, "test1.icc", "r"); + cmsDetectDestinationBlackPoint(ContextID, &Black, hProfile, INTENT_PERCEPTUAL, 0); + cmsXYZ2Lab(ContextID, NULL, &Lab, &Black); + cmsCloseProfile(ContextID, hProfile); return 1; } static -cmsInt32Number CheckOneTAC(cmsFloat64Number InkLimit) +cmsInt32Number CheckOneTAC(cmsContext ContextID, cmsFloat64Number InkLimit) { cmsHPROFILE h; cmsFloat64Number d; - h =CreateFakeCMYK(InkLimit, TRUE); - cmsSaveProfileToFile(DbgThread(), h, "lcmstac.icc"); - cmsCloseProfile(DbgThread(), h); + h =CreateFakeCMYK(ContextID, InkLimit, TRUE); + cmsSaveProfileToFile(ContextID, h, "lcmstac.icc"); + cmsCloseProfile(ContextID, h); - h = cmsOpenProfileFromFile(DbgThread(), "lcmstac.icc", "r"); - d = cmsDetectTAC(DbgThread(), h); - cmsCloseProfile(DbgThread(), h); + h = cmsOpenProfileFromFile(ContextID, "lcmstac.icc", "r"); + d = cmsDetectTAC(ContextID, h); + cmsCloseProfile(ContextID, h); remove("lcmstac.icc"); @@ -6750,13 +6744,13 @@ cmsInt32Number CheckOneTAC(cmsFloat64Number InkLimit) static -cmsInt32Number CheckTAC(void) +cmsInt32Number CheckTAC(cmsContext ContextID) { - 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(ContextID, 180)) return 0; + if (!CheckOneTAC(ContextID, 220)) return 0; + if (!CheckOneTAC(ContextID, 286)) return 0; + if (!CheckOneTAC(ContextID, 310)) return 0; + if (!CheckOneTAC(ContextID, 330)) return 0; return 1; } @@ -6767,30 +6761,30 @@ cmsInt32Number CheckTAC(void) #define NPOINTS_IT8 10 // (17*17*17*17) static -cmsInt32Number CheckCGATS(void) +cmsInt32Number CheckCGATS(cmsContext ContextID) { cmsHANDLE it8; cmsInt32Number i; SubTest("IT8 creation"); - it8 = cmsIT8Alloc(DbgThread()); + it8 = cmsIT8Alloc(ContextID); if (it8 == NULL) return 0; - cmsIT8SetSheetType(DbgThread(), it8, "LCMS/TESTING"); - cmsIT8SetPropertyStr(DbgThread(), it8, "ORIGINATOR", "1 2 3 4"); - cmsIT8SetPropertyUncooked(DbgThread(), it8, "DESCRIPTOR", "1234"); - cmsIT8SetPropertyStr(DbgThread(), it8, "MANUFACTURER", "3"); - cmsIT8SetPropertyDbl(DbgThread(), it8, "CREATED", 4); - cmsIT8SetPropertyDbl(DbgThread(), it8, "SERIAL", 5); - cmsIT8SetPropertyHex(DbgThread(), it8, "MATERIAL", 0x123); + cmsIT8SetSheetType(ContextID, it8, "LCMS/TESTING"); + cmsIT8SetPropertyStr(ContextID, it8, "ORIGINATOR", "1 2 3 4"); + cmsIT8SetPropertyUncooked(ContextID, it8, "DESCRIPTOR", "1234"); + cmsIT8SetPropertyStr(ContextID, it8, "MANUFACTURER", "3"); + cmsIT8SetPropertyDbl(ContextID, it8, "CREATED", 4); + cmsIT8SetPropertyDbl(ContextID, it8, "SERIAL", 5); + cmsIT8SetPropertyHex(ContextID, it8, "MATERIAL", 0x123); - cmsIT8SetPropertyDbl(DbgThread(), it8, "NUMBER_OF_SETS", NPOINTS_IT8); - cmsIT8SetPropertyDbl(DbgThread(), it8, "NUMBER_OF_FIELDS", 4); + cmsIT8SetPropertyDbl(ContextID, it8, "NUMBER_OF_SETS", NPOINTS_IT8); + cmsIT8SetPropertyDbl(ContextID, it8, "NUMBER_OF_FIELDS", 4); - cmsIT8SetDataFormat(DbgThread(), it8, 0, "SAMPLE_ID"); - cmsIT8SetDataFormat(DbgThread(), it8, 1, "RGB_R"); - cmsIT8SetDataFormat(DbgThread(), it8, 2, "RGB_G"); - cmsIT8SetDataFormat(DbgThread(), it8, 3, "RGB_B"); + cmsIT8SetDataFormat(ContextID, it8, 0, "SAMPLE_ID"); + cmsIT8SetDataFormat(ContextID, it8, 1, "RGB_R"); + cmsIT8SetDataFormat(ContextID, it8, 2, "RGB_G"); + cmsIT8SetDataFormat(ContextID, it8, 3, "RGB_B"); SubTest("Table creation"); for (i=0; i < NPOINTS_IT8; i++) { @@ -6799,73 +6793,73 @@ cmsInt32Number CheckCGATS(void) sprintf(Patch, "P%d", i); - cmsIT8SetDataRowCol(DbgThread(), it8, i, 0, Patch); - cmsIT8SetDataRowColDbl(DbgThread(), it8, i, 1, i); - cmsIT8SetDataRowColDbl(DbgThread(), it8, i, 2, i); - cmsIT8SetDataRowColDbl(DbgThread(), it8, i, 3, i); + cmsIT8SetDataRowCol(ContextID, it8, i, 0, Patch); + cmsIT8SetDataRowColDbl(ContextID, it8, i, 1, i); + cmsIT8SetDataRowColDbl(ContextID, it8, i, 2, i); + cmsIT8SetDataRowColDbl(ContextID, it8, i, 3, i); } SubTest("Save to file"); - cmsIT8SaveToFile(DbgThread(), it8, "TEST.IT8"); - cmsIT8Free(DbgThread(), it8); + cmsIT8SaveToFile(ContextID, it8, "TEST.IT8"); + cmsIT8Free(ContextID, it8); SubTest("Load from file"); - it8 = cmsIT8LoadFromFile(DbgThread(), "TEST.IT8"); + it8 = cmsIT8LoadFromFile(ContextID, "TEST.IT8"); if (it8 == NULL) return 0; SubTest("Save again file"); - cmsIT8SaveToFile(DbgThread(), it8, "TEST.IT8"); - cmsIT8Free(DbgThread(), it8); + cmsIT8SaveToFile(ContextID, it8, "TEST.IT8"); + cmsIT8Free(ContextID, it8); SubTest("Load from file (II)"); - it8 = cmsIT8LoadFromFile(DbgThread(), "TEST.IT8"); + it8 = cmsIT8LoadFromFile(ContextID, "TEST.IT8"); if (it8 == NULL) return 0; SubTest("Change prop value"); - if (cmsIT8GetPropertyDbl(DbgThread(), it8, "DESCRIPTOR") != 1234) { + if (cmsIT8GetPropertyDbl(ContextID, it8, "DESCRIPTOR") != 1234) { return 0; } - cmsIT8SetPropertyDbl(DbgThread(), it8, "DESCRIPTOR", 5678); - if (cmsIT8GetPropertyDbl(DbgThread(), it8, "DESCRIPTOR") != 5678) { + cmsIT8SetPropertyDbl(ContextID, it8, "DESCRIPTOR", 5678); + if (cmsIT8GetPropertyDbl(ContextID, it8, "DESCRIPTOR") != 5678) { return 0; } SubTest("Positive numbers"); - if (cmsIT8GetDataDbl(DbgThread(), it8, "P3", "RGB_G") != 3) { + if (cmsIT8GetDataDbl(ContextID, it8, "P3", "RGB_G") != 3) { return 0; } SubTest("Positive exponent numbers"); - cmsIT8SetPropertyDbl(DbgThread(), it8, "DBL_PROP", 123E+12); - if ((cmsIT8GetPropertyDbl(DbgThread(), it8, "DBL_PROP") - 123E+12) > 1 ) { + cmsIT8SetPropertyDbl(ContextID, it8, "DBL_PROP", 123E+12); + if ((cmsIT8GetPropertyDbl(ContextID, it8, "DBL_PROP") - 123E+12) > 1 ) { return 0; } SubTest("Negative exponent numbers"); - cmsIT8SetPropertyDbl(DbgThread(), it8, "DBL_PROP_NEG", 123E-45); - if ((cmsIT8GetPropertyDbl(DbgThread(), it8, "DBL_PROP_NEG") - 123E-45) > 1E-45 ) { + cmsIT8SetPropertyDbl(ContextID, it8, "DBL_PROP_NEG", 123E-45); + if ((cmsIT8GetPropertyDbl(ContextID, it8, "DBL_PROP_NEG") - 123E-45) > 1E-45 ) { return 0; } SubTest("Negative numbers"); - cmsIT8SetPropertyDbl(DbgThread(), it8, "DBL_NEG_VAL", -123); - if ((cmsIT8GetPropertyDbl(DbgThread(), it8, "DBL_NEG_VAL")) != -123 ) { + cmsIT8SetPropertyDbl(ContextID, it8, "DBL_NEG_VAL", -123); + if ((cmsIT8GetPropertyDbl(ContextID, it8, "DBL_NEG_VAL")) != -123 ) { return 0; } - cmsIT8Free(DbgThread(), it8); + cmsIT8Free(ContextID, it8); remove("TEST.IT8"); return 1; @@ -6874,28 +6868,28 @@ cmsInt32Number CheckCGATS(void) static -cmsInt32Number CheckCGATS2(void) +cmsInt32Number CheckCGATS2(cmsContext ContextID) { cmsHANDLE handle; const cmsUInt8Number junk[] = { 0x0, 0xd, 0xd, 0xa, 0x20, 0xd, 0x20, 0x20, 0x20, 0x3a, 0x31, 0x3d, 0x3d, 0x3d, 0x3d }; - handle = cmsIT8LoadFromMem(0, (const void*)junk, sizeof(junk)); + handle = cmsIT8LoadFromMem(ContextID, (const void*)junk, sizeof(junk)); if (handle) - cmsIT8Free(DbgThread(), handle); + cmsIT8Free(ContextID, handle); return 1; } static -cmsInt32Number CheckCGATS_Overflow(void) +cmsInt32Number CheckCGATS_Overflow(cmsContext ContextID) { cmsHANDLE handle; const cmsUInt8Number junk[] = { "@\nA 1.e2147483648\n" }; - handle = cmsIT8LoadFromMem(0, (const void*)junk, sizeof(junk)); + handle = cmsIT8LoadFromMem(ContextID, (const void*)junk, sizeof(junk)); if (handle) - cmsIT8Free(DbgThread(), handle); + cmsIT8Free(ContextID, handle); return 1; } @@ -6903,25 +6897,24 @@ cmsInt32Number CheckCGATS_Overflow(void) // Create CSA/CRD static -void GenerateCSA(const char* cInProf, const char* FileName) +void GenerateCSA(cmsContext BuffThread, const char* cInProf, const char* FileName) { cmsHPROFILE hProfile; cmsUInt32Number n; char* Buffer; - cmsContext BuffThread = DbgThread(); FILE* o; if (cInProf == NULL) - hProfile = cmsCreateLab4Profile(DbgThread(), NULL); + hProfile = cmsCreateLab4Profile(BuffThread, NULL); else - hProfile = cmsOpenProfileFromFile(DbgThread(), cInProf, "r"); + hProfile = cmsOpenProfileFromFile(BuffThread, cInProf, "r"); - n = cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, NULL, 0); + n = cmsGetPostScriptCSA(BuffThread, hProfile, 0, 0, NULL, 0); if (n == 0) return; Buffer = (char*) _cmsMalloc(BuffThread, n + 1); - cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, Buffer, n); + cmsGetPostScriptCSA(BuffThread, hProfile, 0, 0, Buffer, n); Buffer[n] = 0; if (FileName != NULL) { @@ -6931,32 +6924,31 @@ void GenerateCSA(const char* cInProf, const char* FileName) } _cmsFree(BuffThread, Buffer); - cmsCloseProfile(DbgThread(), hProfile); + cmsCloseProfile(BuffThread, hProfile); if (FileName != NULL) remove(FileName); } static -void GenerateCRD(const char* cOutProf, const char* FileName) +void GenerateCRD(cmsContext BuffThread, const char* cOutProf, const char* FileName) { cmsHPROFILE hProfile; cmsUInt32Number n; char* Buffer; cmsUInt32Number dwFlags = 0; - cmsContext BuffThread = DbgThread(); if (cOutProf == NULL) - hProfile = cmsCreateLab4Profile(DbgThread(), NULL); + hProfile = cmsCreateLab4Profile(BuffThread, NULL); else - hProfile = cmsOpenProfileFromFile(DbgThread(), cOutProf, "r"); + hProfile = cmsOpenProfileFromFile(BuffThread, cOutProf, "r"); - n = cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, NULL, 0); + n = cmsGetPostScriptCRD(BuffThread, hProfile, 0, dwFlags, NULL, 0); if (n == 0) return; Buffer = (char*) _cmsMalloc(BuffThread, n + 1); - cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, Buffer, n); + cmsGetPostScriptCRD(BuffThread, hProfile, 0, dwFlags, Buffer, n); Buffer[n] = 0; if (FileName != NULL) { @@ -6966,38 +6958,38 @@ void GenerateCRD(const char* cOutProf, const char* FileName) } _cmsFree(BuffThread, Buffer); - cmsCloseProfile(DbgThread(), hProfile); + cmsCloseProfile(BuffThread, hProfile); if (FileName != NULL) remove(FileName); } static -cmsInt32Number CheckPostScript(void) +cmsInt32Number CheckPostScript(cmsContext ContextID) { - GenerateCSA("test5.icc", "sRGB_CSA.ps"); - GenerateCSA("aRGBlcms2.icc", "aRGB_CSA.ps"); - GenerateCSA("test4.icc", "sRGBV4_CSA.ps"); - GenerateCSA("test1.icc", "SWOP_CSA.ps"); - GenerateCSA(NULL, "Lab_CSA.ps"); - GenerateCSA("graylcms2.icc", "gray_CSA.ps"); + GenerateCSA(ContextID, "test5.icc", "sRGB_CSA.ps"); + GenerateCSA(ContextID, "aRGBlcms2.icc", "aRGB_CSA.ps"); + GenerateCSA(ContextID, "test4.icc", "sRGBV4_CSA.ps"); + GenerateCSA(ContextID, "test1.icc", "SWOP_CSA.ps"); + GenerateCSA(ContextID, NULL, "Lab_CSA.ps"); + GenerateCSA(ContextID, "graylcms2.icc", "gray_CSA.ps"); - GenerateCRD("test5.icc", "sRGB_CRD.ps"); - GenerateCRD("aRGBlcms2.icc", "aRGB_CRD.ps"); - GenerateCRD(NULL, "Lab_CRD.ps"); - GenerateCRD("test1.icc", "SWOP_CRD.ps"); - GenerateCRD("test4.icc", "sRGBV4_CRD.ps"); - GenerateCRD("graylcms2.icc", "gray_CRD.ps"); + GenerateCRD(ContextID, "test5.icc", "sRGB_CRD.ps"); + GenerateCRD(ContextID, "aRGBlcms2.icc", "aRGB_CRD.ps"); + GenerateCRD(ContextID, NULL, "Lab_CRD.ps"); + GenerateCRD(ContextID, "test1.icc", "SWOP_CRD.ps"); + GenerateCRD(ContextID, "test4.icc", "sRGBV4_CRD.ps"); + GenerateCRD(ContextID, "graylcms2.icc", "gray_CRD.ps"); return 1; } static -cmsInt32Number CheckGray(cmsHTRANSFORM xform, cmsUInt8Number g, double L) +cmsInt32Number CheckGray(cmsContext ContextID, cmsHTRANSFORM xform, cmsUInt8Number g, double L) { cmsCIELab Lab; - cmsDoTransform(DbgThread(), xform, &g, &Lab, 1); + cmsDoTransform(ContextID, xform, &g, &Lab, 1); 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; @@ -7006,50 +6998,50 @@ cmsInt32Number CheckGray(cmsHTRANSFORM xform, cmsUInt8Number g, double L) } static -cmsInt32Number CheckInputGray(void) +cmsInt32Number CheckInputGray(cmsContext ContextID) { - cmsHPROFILE hGray = Create_Gray22(); - cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL); + cmsHPROFILE hGray = Create_Gray22(ContextID); + cmsHPROFILE hLab = cmsCreateLab4Profile(ContextID, NULL); cmsHTRANSFORM xform; if (hGray == NULL || hLab == NULL) return 0; - xform = cmsCreateTransform(DbgThread(), hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hGray); cmsCloseProfile(DbgThread(), hLab); + xform = cmsCreateTransform(ContextID, hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hGray); cmsCloseProfile(ContextID, 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(ContextID, xform, 0, 0)) return 0; + if (!CheckGray(ContextID, xform, 125, 52.768)) return 0; + if (!CheckGray(ContextID, xform, 200, 81.069)) return 0; + if (!CheckGray(ContextID, xform, 255, 100.0)) return 0; - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); return 1; } static -cmsInt32Number CheckLabInputGray(void) +cmsInt32Number CheckLabInputGray(cmsContext ContextID) { - cmsHPROFILE hGray = Create_GrayLab(); - cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL); + cmsHPROFILE hGray = Create_GrayLab(ContextID); + cmsHPROFILE hLab = cmsCreateLab4Profile(ContextID, NULL); cmsHTRANSFORM xform; if (hGray == NULL || hLab == NULL) return 0; - xform = cmsCreateTransform(DbgThread(), hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hGray); cmsCloseProfile(DbgThread(), hLab); + xform = cmsCreateTransform(ContextID, hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hGray); cmsCloseProfile(ContextID, 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; + if (!CheckGray(ContextID, xform, 0, 0)) return 0; + if (!CheckGray(ContextID, xform, 125, 49.019)) return 0; + if (!CheckGray(ContextID, xform, 200, 78.431)) return 0; + if (!CheckGray(ContextID, xform, 255, 100.0)) return 0; - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); return 1; } static -cmsInt32Number CheckOutGray(cmsHTRANSFORM xform, double L, cmsUInt8Number g) +cmsInt32Number CheckOutGray(cmsContext ContextID, cmsHTRANSFORM xform, double L, cmsUInt8Number g) { cmsCIELab Lab; cmsUInt8Number g_out; @@ -7058,50 +7050,50 @@ cmsInt32Number CheckOutGray(cmsHTRANSFORM xform, double L, cmsUInt8Number g) Lab.a = 0; Lab.b = 0; - cmsDoTransform(DbgThread(), xform, &Lab, &g_out, 1); + cmsDoTransform(ContextID, xform, &Lab, &g_out, 1); return IsGoodVal("Gray value", g, (double) g_out, 0.01); } static -cmsInt32Number CheckOutputGray(void) +cmsInt32Number CheckOutputGray(cmsContext ContextID) { - cmsHPROFILE hGray = Create_Gray22(); - cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL); + cmsHPROFILE hGray = Create_Gray22(ContextID); + cmsHPROFILE hLab = cmsCreateLab4Profile(ContextID, NULL); cmsHTRANSFORM xform; if (hGray == NULL || hLab == NULL) return 0; - xform = cmsCreateTransform(DbgThread(), hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hGray); cmsCloseProfile(DbgThread(), hLab); + xform = cmsCreateTransform(ContextID, hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hGray); cmsCloseProfile(ContextID, hLab); - if (!CheckOutGray(xform, 0, 0)) return 0; - if (!CheckOutGray(xform, 100, 255)) return 0; + if (!CheckOutGray(ContextID, xform, 0, 0)) return 0; + if (!CheckOutGray(ContextID, xform, 100, 255)) return 0; - if (!CheckOutGray(xform, 20, 52)) return 0; - if (!CheckOutGray(xform, 50, 118)) return 0; + if (!CheckOutGray(ContextID, xform, 20, 52)) return 0; + if (!CheckOutGray(ContextID, xform, 50, 118)) return 0; - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); return 1; } static -cmsInt32Number CheckLabOutputGray(void) +cmsInt32Number CheckLabOutputGray(cmsContext ContextID) { - cmsHPROFILE hGray = Create_GrayLab(); - cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL); + cmsHPROFILE hGray = Create_GrayLab(ContextID); + cmsHPROFILE hLab = cmsCreateLab4Profile(ContextID, NULL); cmsHTRANSFORM xform; cmsInt32Number i; if (hGray == NULL || hLab == NULL) return 0; - xform = cmsCreateTransform(DbgThread(), hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), hGray); cmsCloseProfile(DbgThread(), hLab); + xform = cmsCreateTransform(ContextID, hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ContextID, hGray); cmsCloseProfile(ContextID, hLab); - if (!CheckOutGray(xform, 0, 0)) return 0; - if (!CheckOutGray(xform, 100, 255)) return 0; + if (!CheckOutGray(ContextID, xform, 0, 0)) return 0; + if (!CheckOutGray(ContextID, xform, 100, 255)) return 0; for (i=0; i < 100; i++) { @@ -7109,32 +7101,32 @@ cmsInt32Number CheckLabOutputGray(void) g = (cmsUInt8Number) floor(i * 255.0 / 100.0 + 0.5); - if (!CheckOutGray(xform, i, g)) return 0; + if (!CheckOutGray(ContextID, xform, i, g)) return 0; } - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); return 1; } static -cmsInt32Number CheckV4gamma(void) +cmsInt32Number CheckV4gamma(cmsContext ContextID) { cmsHPROFILE h; cmsUInt16Number Lin[] = {0, 0xffff}; - cmsToneCurve*g = cmsBuildTabulatedToneCurve16(DbgThread(), 2, Lin); + cmsToneCurve*g = cmsBuildTabulatedToneCurve16(ContextID, 2, Lin); - h = cmsOpenProfileFromFile(DbgThread(), "v4gamma.icc", "w"); + h = cmsOpenProfileFromFile(ContextID, "v4gamma.icc", "w"); if (h == NULL) return 0; - cmsSetProfileVersion(DbgThread(), h, 4.3); + cmsSetProfileVersion(ContextID, h, 4.3); - if (!cmsWriteTag(DbgThread(), h, cmsSigGrayTRCTag, g)) return 0; - cmsCloseProfile(DbgThread(), h); + if (!cmsWriteTag(ContextID, h, cmsSigGrayTRCTag, g)) return 0; + cmsCloseProfile(ContextID, h); - cmsFreeToneCurve(DbgThread(), g); + cmsFreeToneCurve(ContextID, g); remove("v4gamma.icc"); return 1; } @@ -7143,7 +7135,7 @@ cmsInt32Number CheckV4gamma(void) // Gamut descriptor routines static -cmsInt32Number CheckGBD(void) +cmsInt32Number CheckGBD(cmsContext ContextID) { cmsCIELab Lab; cmsHANDLE h; @@ -7152,7 +7144,7 @@ cmsInt32Number CheckGBD(void) cmsHPROFILE hLab, hsRGB; cmsHTRANSFORM xform; - h = cmsGBDAlloc(DbgThread()); + h = cmsGBDAlloc(ContextID); if (h == NULL) return 0; // Fill all Lab gamut as valid @@ -7165,12 +7157,12 @@ cmsInt32Number CheckGBD(void) Lab.L = L; Lab.a = a; Lab.b = b; - if (!cmsGDBAddPoint(DbgThread(), h, &Lab)) return 0; + if (!cmsGDBAddPoint(ContextID, h, &Lab)) return 0; } // Complete boundaries SubTest("computing Lab gamut"); - if (!cmsGDBCompute(DbgThread(), h, 0)) return 0; + if (!cmsGDBCompute(ContextID, h, 0)) return 0; // All points should be inside gamut @@ -7182,21 +7174,21 @@ cmsInt32Number CheckGBD(void) Lab.L = L; Lab.a = a; Lab.b = b; - if (!cmsGDBCheckPoint(DbgThread(), h, &Lab)) { + if (!cmsGDBCheckPoint(ContextID, h, &Lab)) { return 0; } } - cmsGBDFree(DbgThread(), h); + cmsGBDFree(ContextID, h); // Now for sRGB SubTest("checking sRGB gamut"); - h = cmsGBDAlloc(DbgThread()); - hsRGB = cmsCreate_sRGBProfile(DbgThread()); - hLab = cmsCreateLab4Profile(DbgThread(), NULL); + h = cmsGBDAlloc(ContextID); + hsRGB = cmsCreate_sRGBProfile(ContextID); + hLab = cmsCreateLab4Profile(ContextID, NULL); - xform = cmsCreateTransform(DbgThread(), hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hsRGB); cmsCloseProfile(DbgThread(), hLab); + xform = cmsCreateTransform(ContextID, hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE); + cmsCloseProfile(ContextID, hsRGB); cmsCloseProfile(ContextID, hLab); for (r1=0; r1 < 256; r1 += 5) { @@ -7210,12 +7202,12 @@ cmsInt32Number CheckGBD(void) rgb[1] = (cmsUInt8Number) g1; rgb[2] = (cmsUInt8Number) b1; - cmsDoTransform(DbgThread(), xform, rgb, &Lab, 1); + cmsDoTransform(ContextID, xform, rgb, &Lab, 1); // if (fabs(Lab.b) < 20 && Lab.a > 0) continue; - if (!cmsGDBAddPoint(DbgThread(), h, &Lab)) { - cmsGBDFree(DbgThread(), h); + if (!cmsGDBAddPoint(ContextID, h, &Lab)) { + cmsGBDFree(ContextID, h); return 0; } @@ -7224,7 +7216,7 @@ cmsInt32Number CheckGBD(void) } - if (!cmsGDBCompute(DbgThread(), h, 0)) return 0; + if (!cmsGDBCompute(ContextID, h, 0)) return 0; // cmsGBDdumpVRML(h, "c:\\colormaps\\lab.wrl"); for (r1=10; r1 < 200; r1 += 10) { @@ -7238,22 +7230,22 @@ cmsInt32Number CheckGBD(void) rgb[1] = (cmsUInt8Number) g1; rgb[2] = (cmsUInt8Number) b1; - cmsDoTransform(DbgThread(), xform, rgb, &Lab, 1); - if (!cmsGDBCheckPoint(DbgThread(), h, &Lab)) { + cmsDoTransform(ContextID, xform, rgb, &Lab, 1); + if (!cmsGDBCheckPoint(ContextID, h, &Lab)) { - cmsDeleteTransform(DbgThread(), xform); - cmsGBDFree(DbgThread(), h); + cmsDeleteTransform(ContextID, xform); + cmsGBDFree(ContextID, h); return 0; } } } - cmsDeleteTransform(DbgThread(), xform); - cmsGBDFree(DbgThread(), h); + cmsDeleteTransform(ContextID, xform); + cmsGBDFree(ContextID, h); SubTest("checking LCh chroma ring"); - h = cmsGBDAlloc(DbgThread()); + h = cmsGBDAlloc(ContextID); for (r1=0; r1 < 360; r1++) { @@ -7264,43 +7256,43 @@ cmsInt32Number CheckGBD(void) LCh.C = 60; LCh.h = r1; - cmsLCh2Lab(DbgThread(), &Lab, &LCh); - if (!cmsGDBAddPoint(DbgThread(), h, &Lab)) { - cmsGBDFree(DbgThread(), h); + cmsLCh2Lab(ContextID, &Lab, &LCh); + if (!cmsGDBAddPoint(ContextID, h, &Lab)) { + cmsGBDFree(ContextID, h); return 0; } } - if (!cmsGDBCompute(DbgThread(), h, 0)) return 0; + if (!cmsGDBCompute(ContextID, h, 0)) return 0; - cmsGBDFree(DbgThread(), h); + cmsGBDFree(ContextID, h); return 1; } static -int CheckMD5(void) +int CheckMD5(cmsContext ContextID) { _cmsICCPROFILE* h; - cmsHPROFILE pProfile = cmsOpenProfileFromFile(DbgThread(), "sRGBlcms2.icc", "r"); + cmsHPROFILE pProfile = cmsOpenProfileFromFile(ContextID, "sRGBlcms2.icc", "r"); cmsProfileID ProfileID1, ProfileID2, ProfileID3, ProfileID4; h =(_cmsICCPROFILE*) pProfile; - if (cmsMD5computeID(DbgThread(), pProfile)) cmsGetHeaderProfileID(DbgThread(), pProfile, ProfileID1.ID8); - if (cmsMD5computeID(DbgThread(), pProfile)) cmsGetHeaderProfileID(DbgThread(), pProfile,ProfileID2.ID8); + if (cmsMD5computeID(ContextID, pProfile)) cmsGetHeaderProfileID(ContextID, pProfile, ProfileID1.ID8); + if (cmsMD5computeID(ContextID, pProfile)) cmsGetHeaderProfileID(ContextID, pProfile,ProfileID2.ID8); - cmsCloseProfile(DbgThread(), pProfile); + cmsCloseProfile(ContextID, pProfile); - pProfile = cmsOpenProfileFromFile(DbgThread(), "sRGBlcms2.icc", "r"); + pProfile = cmsOpenProfileFromFile(ContextID, "sRGBlcms2.icc", "r"); h =(_cmsICCPROFILE*) pProfile; - if (cmsMD5computeID(DbgThread(), pProfile)) cmsGetHeaderProfileID(DbgThread(), pProfile, ProfileID3.ID8); - if (cmsMD5computeID(DbgThread(), pProfile)) cmsGetHeaderProfileID(DbgThread(), pProfile,ProfileID4.ID8); + if (cmsMD5computeID(ContextID, pProfile)) cmsGetHeaderProfileID(ContextID, pProfile, ProfileID3.ID8); + if (cmsMD5computeID(ContextID, pProfile)) cmsGetHeaderProfileID(ContextID, pProfile,ProfileID4.ID8); - cmsCloseProfile(DbgThread(), pProfile); + cmsCloseProfile(ContextID, pProfile); return ((memcmp(ProfileID1.ID8, ProfileID3.ID8, sizeof(ProfileID1)) == 0) && (memcmp(ProfileID2.ID8, ProfileID4.ID8, sizeof(ProfileID2)) == 0)); @@ -7309,47 +7301,47 @@ int CheckMD5(void) static -int CheckLinking(void) +int CheckLinking(cmsContext ContextID) { cmsHPROFILE h; cmsPipeline * pipeline; cmsStage *stageBegin, *stageEnd; // Create a CLUT based profile - h = cmsCreateInkLimitingDeviceLink(DbgThread(), cmsSigCmykData, 150); + h = cmsCreateInkLimitingDeviceLink(ContextID, cmsSigCmykData, 150); // link a second tag - cmsLinkTag(DbgThread(), h, cmsSigAToB1Tag, cmsSigAToB0Tag); + cmsLinkTag(ContextID, h, cmsSigAToB1Tag, cmsSigAToB0Tag); // Save the linked devicelink - if (!cmsSaveProfileToFile(DbgThread(), h, "lcms2link.icc")) return 0; - cmsCloseProfile(DbgThread(), h); + if (!cmsSaveProfileToFile(ContextID, h, "lcms2link.icc")) return 0; + cmsCloseProfile(ContextID, h); // Now open the profile and read the pipeline - h = cmsOpenProfileFromFile(DbgThread(), "lcms2link.icc", "r"); + h = cmsOpenProfileFromFile(ContextID, "lcms2link.icc", "r"); if (h == NULL) return 0; - pipeline = (cmsPipeline*) cmsReadTag(DbgThread(), h, cmsSigAToB1Tag); + pipeline = (cmsPipeline*) cmsReadTag(ContextID, h, cmsSigAToB1Tag); if (pipeline == NULL) { return 0; } - pipeline = cmsPipelineDup(DbgThread(), pipeline); + pipeline = cmsPipelineDup(ContextID, pipeline); // extract stage from pipe line - cmsPipelineUnlinkStage(DbgThread(), pipeline, cmsAT_BEGIN, &stageBegin); - cmsPipelineUnlinkStage(DbgThread(), pipeline, cmsAT_END, &stageEnd); - cmsPipelineInsertStage(DbgThread(), pipeline, cmsAT_END, stageEnd); - cmsPipelineInsertStage(DbgThread(), pipeline, cmsAT_BEGIN, stageBegin); + cmsPipelineUnlinkStage(ContextID, pipeline, cmsAT_BEGIN, &stageBegin); + cmsPipelineUnlinkStage(ContextID, pipeline, cmsAT_END, &stageEnd); + cmsPipelineInsertStage(ContextID, pipeline, cmsAT_END, stageEnd); + cmsPipelineInsertStage(ContextID, pipeline, cmsAT_BEGIN, stageBegin); - if (cmsTagLinkedTo(DbgThread(), h, cmsSigAToB1Tag) != cmsSigAToB0Tag) return 0; + if (cmsTagLinkedTo(ContextID, h, cmsSigAToB1Tag) != cmsSigAToB0Tag) return 0; - cmsWriteTag(DbgThread(), h, cmsSigAToB0Tag, pipeline); - cmsPipelineFree(DbgThread(), pipeline); + cmsWriteTag(ContextID, h, cmsSigAToB0Tag, pipeline); + cmsPipelineFree(ContextID, pipeline); - if (!cmsSaveProfileToFile(DbgThread(), h, "lcms2link2.icc")) return 0; - cmsCloseProfile(DbgThread(), h); + if (!cmsSaveProfileToFile(ContextID, h, "lcms2link2.icc")) return 0; + cmsCloseProfile(ContextID, h); return 1; @@ -7361,51 +7353,50 @@ int CheckLinking(void) // Created by Paul Miller on 30/08/2016. // static -cmsHPROFILE IdentityMatrixProfile( cmsColorSpaceSignature dataSpace) +cmsHPROFILE IdentityMatrixProfile(cmsContext ctx, cmsColorSpaceSignature dataSpace) { - cmsContext ctx = 0; cmsVEC3 zero = {{0,0,0}}; cmsMAT3 identity; cmsPipeline* forward; cmsPipeline* reverse; - cmsHPROFILE identityProfile = cmsCreateProfilePlaceholder( ctx); + cmsHPROFILE identityProfile = cmsCreateProfilePlaceholder(ctx); - cmsSetProfileVersion(DbgThread(), identityProfile, 4.3); + cmsSetProfileVersion(ctx, identityProfile, 4.3); - cmsSetDeviceClass(DbgThread(), identityProfile, cmsSigColorSpaceClass); - cmsSetColorSpace(DbgThread(), identityProfile, dataSpace); - cmsSetPCS(DbgThread(), identityProfile, cmsSigXYZData); + cmsSetDeviceClass(ctx, identityProfile, cmsSigColorSpaceClass); + cmsSetColorSpace(ctx, identityProfile, dataSpace); + cmsSetPCS(ctx, identityProfile, cmsSigXYZData); - cmsSetHeaderRenderingIntent(DbgThread(), identityProfile, INTENT_RELATIVE_COLORIMETRIC); + cmsSetHeaderRenderingIntent(ctx, identityProfile, INTENT_RELATIVE_COLORIMETRIC); - cmsWriteTag(DbgThread(), identityProfile, cmsSigMediaWhitePointTag, cmsD50_XYZ(DbgThread())); + cmsWriteTag(ctx, identityProfile, cmsSigMediaWhitePointTag, cmsD50_XYZ(ctx)); - _cmsMAT3identity(DbgThread(), &identity); + _cmsMAT3identity(ctx, &identity); // build forward transform.... (RGB to PCS) - forward = cmsPipelineAlloc( 0, 3, 3); - cmsPipelineInsertStage(DbgThread(), forward, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero)); - cmsWriteTag(DbgThread(), identityProfile, cmsSigDToB1Tag, forward); + forward = cmsPipelineAlloc(ctx, 3, 3); + cmsPipelineInsertStage(ctx, forward, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero)); + cmsWriteTag(ctx, identityProfile, cmsSigDToB1Tag, forward); - cmsPipelineFree(DbgThread(), forward); + cmsPipelineFree(ctx, forward); - reverse = cmsPipelineAlloc( 0, 3, 3); - cmsPipelineInsertStage(DbgThread(), reverse, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero)); - cmsWriteTag(DbgThread(), identityProfile, cmsSigBToD1Tag, reverse); + reverse = cmsPipelineAlloc(ctx, 3, 3); + cmsPipelineInsertStage(ctx, reverse, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero)); + cmsWriteTag(ctx, identityProfile, cmsSigBToD1Tag, reverse); - cmsPipelineFree(DbgThread(), reverse); + cmsPipelineFree(ctx, reverse); return identityProfile; } static -cmsInt32Number CheckFloatXYZ(void) +cmsInt32Number CheckFloatXYZ(cmsContext ctx) { cmsHPROFILE input; - cmsHPROFILE xyzProfile = cmsCreateXYZProfile(DbgThread()); + cmsHPROFILE xyzProfile = cmsCreateXYZProfile(ctx); cmsHTRANSFORM xform; cmsFloat32Number in[4]; cmsFloat32Number out[4]; @@ -7416,13 +7407,13 @@ cmsInt32Number CheckFloatXYZ(void) in[3] = 0.5; // RGB to XYZ - input = IdentityMatrixProfile( cmsSigRgbData); + input = IdentityMatrixProfile(ctx, cmsSigRgbData); - xform = cmsCreateTransform(DbgThread(), input, TYPE_RGB_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), input); + xform = cmsCreateTransform(ctx, input, TYPE_RGB_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ctx, input); - cmsDoTransform(DbgThread(), xform, in, out, 1); - cmsDeleteTransform(DbgThread(), xform); + cmsDoTransform(ctx, xform, in, out, 1); + cmsDeleteTransform(ctx, xform); if (!IsGoodVal("Float RGB->XYZ", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->XYZ", in[1], out[1], FLOAT_PRECISSION) || @@ -7431,15 +7422,15 @@ cmsInt32Number CheckFloatXYZ(void) // XYZ to XYZ - input = IdentityMatrixProfile( cmsSigXYZData); + input = IdentityMatrixProfile(ctx, cmsSigXYZData); - xform = cmsCreateTransform(DbgThread(), input, TYPE_XYZ_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), input); + xform = cmsCreateTransform(ctx, input, TYPE_XYZ_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ctx, input); - cmsDoTransform(DbgThread(), xform, in, out, 1); + cmsDoTransform(ctx, xform, in, out, 1); - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ctx, xform); if (!IsGoodVal("Float XYZ->XYZ", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float XYZ->XYZ", in[1], out[1], FLOAT_PRECISSION) || @@ -7447,17 +7438,17 @@ cmsInt32Number CheckFloatXYZ(void) return 0; - input = IdentityMatrixProfile( cmsSigXYZData); + input = IdentityMatrixProfile(ctx, cmsSigXYZData); # define TYPE_XYZA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) - xform = cmsCreateTransform(DbgThread(), input, TYPE_XYZA_FLT, xyzProfile, TYPE_XYZA_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA); - cmsCloseProfile(DbgThread(), input); + xform = cmsCreateTransform(ctx, input, TYPE_XYZA_FLT, xyzProfile, TYPE_XYZA_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA); + cmsCloseProfile(ctx, input); - cmsDoTransform(DbgThread(), xform, in, out, 1); + cmsDoTransform(ctx, xform, in, out, 1); - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ctx, xform); if (!IsGoodVal("Float XYZA->XYZA", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float XYZA->XYZA", in[1], out[1], FLOAT_PRECISSION) || @@ -7467,14 +7458,14 @@ cmsInt32Number CheckFloatXYZ(void) // XYZ to RGB - input = IdentityMatrixProfile( cmsSigRgbData); + input = IdentityMatrixProfile(ctx, cmsSigRgbData); - xform = cmsCreateTransform(DbgThread(), xyzProfile, TYPE_XYZ_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), input); + xform = cmsCreateTransform(ctx, xyzProfile, TYPE_XYZ_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ctx, input); - cmsDoTransform(DbgThread(), xform, in, out, 1); + cmsDoTransform(ctx, xform, in, out, 1); - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ctx, xform); if (!IsGoodVal("Float XYZ->RGB", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float XYZ->RGB", in[1], out[1], FLOAT_PRECISSION) || @@ -7485,21 +7476,21 @@ cmsInt32Number CheckFloatXYZ(void) // Now the optimizer should remove a stage // XYZ to RGB - input = IdentityMatrixProfile( cmsSigRgbData); + input = IdentityMatrixProfile(ctx, cmsSigRgbData); - xform = cmsCreateTransform(DbgThread(), input, TYPE_RGB_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); - cmsCloseProfile(DbgThread(), input); + xform = cmsCreateTransform(ctx, input, TYPE_RGB_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); + cmsCloseProfile(ctx, input); - cmsDoTransform(DbgThread(), xform, in, out, 1); + cmsDoTransform(ctx, xform, in, out, 1); - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ctx, xform); if (!IsGoodVal("Float RGB->RGB", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->RGB", in[1], out[1], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->RGB", in[2], out[2], FLOAT_PRECISSION)) return 0; - cmsCloseProfile(DbgThread(), xyzProfile); + cmsCloseProfile(ctx, xyzProfile); return 1; @@ -7523,13 +7514,13 @@ Bug reported */ static -cmsInt32Number ChecksRGB2LabFLT(void) +cmsInt32Number ChecksRGB2LabFLT(cmsContext ctx) { - cmsHPROFILE hSRGB = cmsCreate_sRGBProfile(DbgThread()); - cmsHPROFILE hLab = cmsCreateLab4Profile(DbgThread(), NULL); + cmsHPROFILE hSRGB = cmsCreate_sRGBProfile(ctx); + cmsHPROFILE hLab = cmsCreateLab4Profile(ctx, NULL); - cmsHTRANSFORM xform1 = cmsCreateTransform(DbgThread(), hSRGB, TYPE_RGBA_FLT, hLab, TYPE_LabA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); - cmsHTRANSFORM xform2 = cmsCreateTransform(DbgThread(), hLab, TYPE_LabA_FLT, hSRGB, TYPE_RGBA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); + cmsHTRANSFORM xform1 = cmsCreateTransform(ctx, hSRGB, TYPE_RGBA_FLT, hLab, TYPE_LabA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); + cmsHTRANSFORM xform2 = cmsCreateTransform(ctx, hLab, TYPE_LabA_FLT, hSRGB, TYPE_RGBA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); cmsFloat32Number RGBA1[4], RGBA2[4], LabA[4]; int i; @@ -7542,8 +7533,8 @@ cmsInt32Number ChecksRGB2LabFLT(void) RGBA1[2] = i / 100.0F; RGBA1[3] = 0; - cmsDoTransform(DbgThread(), xform1, RGBA1, LabA, 1); - cmsDoTransform(DbgThread(), xform2, LabA, RGBA2, 1); + cmsDoTransform(ctx, xform1, RGBA1, LabA, 1); + cmsDoTransform(ctx, xform2, LabA, RGBA2, 1); if (!IsGoodVal("Float RGB->RGB", RGBA1[0], RGBA2[0], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->RGB", RGBA1[1], RGBA2[1], FLOAT_PRECISSION) || @@ -7552,10 +7543,10 @@ cmsInt32Number ChecksRGB2LabFLT(void) } - cmsDeleteTransform(DbgThread(), xform1); - cmsDeleteTransform(DbgThread(), xform2); - cmsCloseProfile(DbgThread(), hSRGB); - cmsCloseProfile(DbgThread(), hLab); + cmsDeleteTransform(ctx, xform1); + cmsDeleteTransform(ctx, xform2); + cmsCloseProfile(ctx, hSRGB); + cmsCloseProfile(ctx, hLab); return 1; } @@ -7578,7 +7569,7 @@ double Rec709(double L) static -cmsInt32Number CheckParametricRec709(void) +cmsInt32Number CheckParametricRec709(cmsContext ContextID) { cmsFloat64Number params[7]; cmsToneCurve* t; @@ -7592,23 +7583,23 @@ cmsInt32Number CheckParametricRec709(void) params[5] = -0.099; /* e */ params[6] = 0.0; /* f */ - t = cmsBuildParametricToneCurve (NULL, 5, params); + t = cmsBuildParametricToneCurve (ContextID, 5, params); for (i=0; i < 256; i++) { cmsFloat32Number n = (cmsFloat32Number) i / 255.0F; - cmsUInt16Number f1 = (cmsUInt16Number) floor(255.0 * cmsEvalToneCurveFloat(DbgThread(), t, n) + 0.5); + cmsUInt16Number f1 = (cmsUInt16Number) floor(255.0 * cmsEvalToneCurveFloat(ContextID, t, n) + 0.5); cmsUInt16Number f2 = (cmsUInt16Number) floor(255.0*Rec709((double) i / 255.0) + 0.5); if (f1 != f2) { - cmsFreeToneCurve(DbgThread(), t); + cmsFreeToneCurve(ContextID, t); return 0; } } - cmsFreeToneCurve(DbgThread(), t); + cmsFreeToneCurve(ContextID, t); return 1; } @@ -7622,7 +7613,7 @@ static cmsFloat32Number StraightLine( cmsFloat32Number x) return (cmsFloat32Number) (0.1 + 0.9 * x); } -static cmsInt32Number TestCurve( const char* label, cmsToneCurve* curve, Function fn) +static cmsInt32Number TestCurve(cmsContext ContextID, const char* label, cmsToneCurve* curve, Function fn) { cmsInt32Number ok = 1; int i; @@ -7630,7 +7621,7 @@ static cmsInt32Number TestCurve( const char* label, cmsToneCurve* curve, Functio cmsFloat32Number x = (cmsFloat32Number)i / (kNumPoints*3 - 1); cmsFloat32Number expectedY = fn(x); - cmsFloat32Number out = cmsEvalToneCurveFloat(DbgThread(), curve, x); + cmsFloat32Number out = cmsEvalToneCurveFloat(ContextID, curve, x); if (!IsGoodVal(label, expectedY, out, FLOAT_PRECISSION)) { ok = 0; @@ -7640,7 +7631,7 @@ static cmsInt32Number TestCurve( const char* label, cmsToneCurve* curve, Functio } static -cmsInt32Number CheckFloatSamples(void) +cmsInt32Number CheckFloatSamples(cmsContext ContextID) { cmsFloat32Number y[kNumPoints]; int i; @@ -7653,15 +7644,15 @@ cmsInt32Number CheckFloatSamples(void) y[i] = StraightLine(x); } - curve = cmsBuildTabulatedToneCurveFloat(NULL, kNumPoints, y); - ok = TestCurve( "Float Samples", curve, StraightLine); - cmsFreeToneCurve(DbgThread(), curve); + curve = cmsBuildTabulatedToneCurveFloat(ContextID, kNumPoints, y); + ok = TestCurve(ContextID, "Float Samples", curve, StraightLine); + cmsFreeToneCurve(ContextID, curve); return ok; } static -cmsInt32Number CheckFloatSegments(void) +cmsInt32Number CheckFloatSegments(cmsContext ContextID) { cmsInt32Number ok = 1; int i; @@ -7706,18 +7697,18 @@ cmsInt32Number CheckFloatSegments(void) Seg[2].Params[3] = 0.1f; Seg[2].Params[4] = 0.0f; - curve = cmsBuildSegmentedToneCurve(0, 3, Seg); + curve = cmsBuildSegmentedToneCurve(ContextID, 3, Seg); - ok = TestCurve( "Float Segmented Curve", curve, StraightLine); + ok = TestCurve(ContextID, "Float Segmented Curve", curve, StraightLine); - cmsFreeToneCurve(DbgThread(), curve); + cmsFreeToneCurve(ContextID, curve); return ok; } static -cmsInt32Number CheckReadRAW(void) +cmsInt32Number CheckReadRAW(cmsContext ContextID) { cmsInt32Number tag_size, tag_size1; char buffer[4]; @@ -7725,15 +7716,15 @@ cmsInt32Number CheckReadRAW(void) SubTest("RAW read on on-disk"); - hProfile = cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"); + hProfile = cmsOpenProfileFromFile(ContextID, "test1.icc", "r"); if (hProfile == NULL) return 0; - tag_size = cmsReadRawTag(DbgThread(), hProfile, cmsSigGamutTag, buffer, 4); - tag_size1 = cmsReadRawTag(DbgThread(), hProfile, cmsSigGamutTag, NULL, 0); + tag_size = cmsReadRawTag(ContextID, hProfile, cmsSigGamutTag, buffer, 4); + tag_size1 = cmsReadRawTag(ContextID, hProfile, cmsSigGamutTag, NULL, 0); - cmsCloseProfile(DbgThread(), hProfile); + cmsCloseProfile(ContextID, hProfile); if (tag_size != 4) return 0; @@ -7742,11 +7733,11 @@ cmsInt32Number CheckReadRAW(void) return 0; SubTest("RAW read on in-memory created profiles"); - hProfile = cmsCreate_sRGBProfile(DbgThread()); - tag_size = cmsReadRawTag(DbgThread(), hProfile, cmsSigGreenColorantTag, buffer, 4); - tag_size1 = cmsReadRawTag(DbgThread(), hProfile, cmsSigGreenColorantTag, NULL, 0); + hProfile = cmsCreate_sRGBProfile(ContextID); + tag_size = cmsReadRawTag(ContextID, hProfile, cmsSigGreenColorantTag, buffer, 4); + tag_size1 = cmsReadRawTag(ContextID, hProfile, cmsSigGreenColorantTag, NULL, 0); - cmsCloseProfile(DbgThread(), hProfile); + cmsCloseProfile(ContextID, hProfile); if (tag_size != 4) return 0; @@ -7758,7 +7749,7 @@ cmsInt32Number CheckReadRAW(void) static -cmsInt32Number CheckMeta(void) +cmsInt32Number CheckMeta(cmsContext ContextID) { char *data; cmsHANDLE dict; @@ -7768,20 +7759,20 @@ cmsInt32Number CheckMeta(void) int rc; /* open file */ - p = cmsOpenProfileFromFile(DbgThread(), "ibm-t61.icc", "r"); + p = cmsOpenProfileFromFile(ContextID, "ibm-t61.icc", "r"); if (p == NULL) return 0; /* read dictionary, but don't do anything with the value */ //COMMENT OUT THE NEXT TWO LINES AND IT WORKS FINE!!! - dict = cmsReadTag(DbgThread(), p, cmsSigMetaTag); + dict = cmsReadTag(ContextID, p, cmsSigMetaTag); if (dict == NULL) return 0; /* serialize profile to memory */ - rc = cmsSaveProfileToMem(DbgThread(), p, NULL, &clen); + rc = cmsSaveProfileToMem(ContextID, p, NULL, &clen); if (!rc) return 0; data = (char*) malloc(clen); - rc = cmsSaveProfileToMem(DbgThread(), p, data, &clen); + rc = cmsSaveProfileToMem(ContextID, p, data, &clen); if (!rc) return 0; /* write the memory blob to a file */ @@ -7791,39 +7782,39 @@ cmsInt32Number CheckMeta(void) fclose(fp); free(data); - cmsCloseProfile(DbgThread(), p); + cmsCloseProfile(ContextID, p); /* open newly created file and read metadata */ - p = cmsOpenProfileFromFile(DbgThread(), "new.icc", "r"); + p = cmsOpenProfileFromFile(ContextID, "new.icc", "r"); //ERROR: Bad dictionary Name/Value //ERROR: Corrupted tag 'meta' //test: test.c:59: main: Assertion `dict' failed. - dict = cmsReadTag(DbgThread(), p, cmsSigMetaTag); + dict = cmsReadTag(ContextID, p, cmsSigMetaTag); if (dict == NULL) return 0; - cmsCloseProfile(DbgThread(), p); + cmsCloseProfile(ContextID, p); return 1; } // Bug on applying null transforms on floating point buffers static -cmsInt32Number CheckFloatNULLxform(void) +cmsInt32Number CheckFloatNULLxform(cmsContext ContextID) { int i; cmsFloat32Number in[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; cmsFloat32Number out[10]; - cmsHTRANSFORM xform = cmsCreateTransform(DbgThread(), NULL, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NULLTRANSFORM); + cmsHTRANSFORM xform = cmsCreateTransform(ContextID, NULL, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NULLTRANSFORM); if (xform == NULL) { Fail("Unable to create float null transform"); return 0; } - cmsDoTransform(DbgThread(), xform, in, out, 10); + cmsDoTransform(ContextID, xform, in, out, 10); - cmsDeleteTransform(DbgThread(), xform); + cmsDeleteTransform(ContextID, xform); for (i=0; i < 10; i++) { if (!IsGoodVal("float nullxform", in[i], out[i], 0.001)) { @@ -7836,36 +7827,36 @@ cmsInt32Number CheckFloatNULLxform(void) } static -cmsInt32Number CheckRemoveTag(void) +cmsInt32Number CheckRemoveTag(cmsContext ContextID) { cmsHPROFILE p; cmsMLU *mlu; int ret; - p = cmsCreate_sRGBProfile(NULL); + p = cmsCreate_sRGBProfile(ContextID); /* set value */ - mlu = cmsMLUalloc (NULL, 1); - ret = cmsMLUsetASCII(DbgThread(), mlu, "en", "US", "bar"); + mlu = cmsMLUalloc (ContextID, 1); + ret = cmsMLUsetASCII(ContextID, mlu, "en", "US", "bar"); if (!ret) return 0; - ret = cmsWriteTag(DbgThread(), p, cmsSigDeviceMfgDescTag, mlu); + ret = cmsWriteTag(ContextID, p, cmsSigDeviceMfgDescTag, mlu); if (!ret) return 0; - cmsMLUfree(DbgThread(), mlu); + cmsMLUfree(ContextID, mlu); /* remove the tag */ - ret = cmsWriteTag(DbgThread(), p, cmsSigDeviceMfgDescTag, NULL); + ret = cmsWriteTag(ContextID, p, cmsSigDeviceMfgDescTag, NULL); if (!ret) return 0; /* THIS EXPLODES */ - cmsCloseProfile(DbgThread(), p); + cmsCloseProfile(ContextID, p); return 1; } static -cmsInt32Number CheckMatrixSimplify(void) +cmsInt32Number CheckMatrixSimplify(cmsContext ContextID) { cmsHPROFILE pIn; @@ -7874,16 +7865,16 @@ cmsInt32Number CheckMatrixSimplify(void) unsigned char buf[3] = { 127, 32, 64 }; - pIn = cmsCreate_sRGBProfile(DbgThread()); - pOut = cmsOpenProfileFromFile(DbgThread(), "ibm-t61.icc", "r"); + pIn = cmsCreate_sRGBProfile(ContextID); + pOut = cmsOpenProfileFromFile(ContextID, "ibm-t61.icc", "r"); if (pIn == NULL || pOut == NULL) return 0; - t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, 0); - cmsDoTransformStride(DbgThread(), t, buf, buf, 1, 1); - cmsDeleteTransform(DbgThread(), t); - cmsCloseProfile(DbgThread(), pIn); - cmsCloseProfile(DbgThread(), pOut); + t = cmsCreateTransform(ContextID, pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, 0); + cmsDoTransformStride(ContextID, t, buf, buf, 1, 1); + cmsDeleteTransform(ContextID, t); + cmsCloseProfile(ContextID, pIn); + cmsCloseProfile(ContextID, pOut); return buf[0] == 144 && buf[1] == 0 && buf[2] == 69; @@ -7892,7 +7883,7 @@ cmsInt32Number CheckMatrixSimplify(void) static -cmsInt32Number CheckTransformLineStride(void) +cmsInt32Number CheckTransformLineStride(cmsContext ContextID) { cmsHPROFILE pIn; @@ -7924,50 +7915,50 @@ cmsInt32Number CheckTransformLineStride(void) memset(out, 0, sizeof(out)); - pIn = cmsCreate_sRGBProfile(DbgThread()); - pOut = cmsOpenProfileFromFile(DbgThread(), "ibm-t61.icc", "r"); + pIn = cmsCreate_sRGBProfile(ContextID); + pOut = cmsOpenProfileFromFile(ContextID, "ibm-t61.icc", "r"); if (pIn == NULL || pOut == NULL) return 0; - t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); + t = cmsCreateTransform(ContextID, pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); - cmsDoTransformLineStride(DbgThread(), t, buf1, out, 2, 4, 7, 7, 0, 0); - cmsDeleteTransform(DbgThread(), t); + cmsDoTransformLineStride(ContextID, t, buf1, out, 2, 4, 7, 7, 0, 0); + cmsDeleteTransform(ContextID, t); if (memcmp(out, buf1, sizeof(buf1)) != 0) { Fail("Failed transform line stride on RGB8"); - cmsCloseProfile(DbgThread(), pIn); - cmsCloseProfile(DbgThread(), pOut); + cmsCloseProfile(ContextID, pIn); + cmsCloseProfile(ContextID, pOut); return 0; } memset(out, 0, sizeof(out)); - t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); + t = cmsCreateTransform(ContextID, pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); - cmsDoTransformLineStride(DbgThread(), t, buf2, out, 2, 4, 9, 9, 0, 0); + cmsDoTransformLineStride(ContextID, t, buf2, out, 2, 4, 9, 9, 0, 0); - cmsDeleteTransform(DbgThread(), t); + cmsDeleteTransform(ContextID, t); if (memcmp(out, buf2, sizeof(buf2)) != 0) { - cmsCloseProfile(DbgThread(), pIn); - cmsCloseProfile(DbgThread(), pOut); + cmsCloseProfile(ContextID, pIn); + cmsCloseProfile(ContextID, pOut); Fail("Failed transform line stride on RGBA8"); return 0; } memset(out, 0, sizeof(out)); - t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGBA_16, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); + t = cmsCreateTransform(ContextID, pIn, TYPE_RGBA_16, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); - cmsDoTransformLineStride(DbgThread(), t, buf3, out, 2, 4, 18, 18, 0, 0); + cmsDoTransformLineStride(ContextID, t, buf3, out, 2, 4, 18, 18, 0, 0); - cmsDeleteTransform(DbgThread(), t); + cmsDeleteTransform(ContextID, t); if (memcmp(out, buf3, sizeof(buf3)) != 0) { - cmsCloseProfile(DbgThread(), pIn); - cmsCloseProfile(DbgThread(), pOut); + cmsCloseProfile(ContextID, pIn); + cmsCloseProfile(ContextID, pOut); Fail("Failed transform line stride on RGBA16"); return 0; } @@ -7977,42 +7968,42 @@ cmsInt32Number CheckTransformLineStride(void) // From 8 to 16 - t = cmsCreateTransform(DbgThread(), pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); + t = cmsCreateTransform(ContextID, pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); - cmsDoTransformLineStride(DbgThread(), t, buf2, out, 2, 4, 9, 18, 0, 0); + cmsDoTransformLineStride(ContextID, t, buf2, out, 2, 4, 9, 18, 0, 0); - cmsDeleteTransform(DbgThread(), t); + cmsDeleteTransform(ContextID, t); if (memcmp(out, buf3, sizeof(buf3)) != 0) { - cmsCloseProfile(DbgThread(), pIn); - cmsCloseProfile(DbgThread(), pOut); + cmsCloseProfile(ContextID, pIn); + cmsCloseProfile(ContextID, pOut); Fail("Failed transform line stride on RGBA16"); return 0; } - cmsCloseProfile(DbgThread(), pIn); - cmsCloseProfile(DbgThread(), pOut); + cmsCloseProfile(ContextID, pIn); + cmsCloseProfile(ContextID, pOut); return 1; } static -int CheckPlanar8opt(void) +int CheckPlanar8opt(cmsContext ContextID) { - cmsHPROFILE aboveRGB = Create_AboveRGB(); - cmsHPROFILE sRGB = cmsCreate_sRGBProfile(DbgThread()); + cmsHPROFILE aboveRGB = Create_AboveRGB(ContextID); + cmsHPROFILE sRGB = cmsCreate_sRGBProfile(ContextID); - cmsHTRANSFORM transform = cmsCreateTransform(DbgThread(), + cmsHTRANSFORM transform = cmsCreateTransform(ContextID, sRGB, TYPE_RGB_8_PLANAR, aboveRGB, TYPE_RGB_8_PLANAR, INTENT_PERCEPTUAL, 0); - cmsDeleteTransform(DbgThread(), transform); - cmsCloseProfile(DbgThread(), aboveRGB); - cmsCloseProfile(DbgThread(), sRGB); + cmsDeleteTransform(ContextID, transform); + cmsCloseProfile(ContextID, aboveRGB); + cmsCloseProfile(ContextID, sRGB); return 1; } @@ -8021,20 +8012,20 @@ int CheckPlanar8opt(void) * Bug reported & fixed. Thanks to Kornel Lesinski for spotting this. */ static -int CheckSE(void) +int CheckSE(cmsContext ContextID) { - cmsHPROFILE input_profile = Create_AboveRGB(); - cmsHPROFILE output_profile = cmsCreate_sRGBProfile(DbgThread()); + cmsHPROFILE input_profile = Create_AboveRGB(ContextID); + cmsHPROFILE output_profile = cmsCreate_sRGBProfile(ContextID); - cmsHTRANSFORM tr = cmsCreateTransform(DbgThread(), input_profile, TYPE_RGBA_8, output_profile, TYPE_RGBA_16_SE, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA); + cmsHTRANSFORM tr = cmsCreateTransform(ContextID, input_profile, TYPE_RGBA_8, output_profile, TYPE_RGBA_16_SE, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA); cmsUInt8Number rgba[4] = { 40, 41, 41, 0xfa }; cmsUInt16Number out[4]; - cmsDoTransform(DbgThread(), tr, rgba, out, 1); - cmsCloseProfile(DbgThread(), input_profile); - cmsCloseProfile(DbgThread(), output_profile); - cmsDeleteTransform(DbgThread(), tr); + cmsDoTransform(ContextID, tr, rgba, out, 1); + cmsCloseProfile(ContextID, input_profile); + cmsCloseProfile(ContextID, output_profile); + cmsDeleteTransform(ContextID, tr); if (out[0] != 0xf622 || out[1] != 0x7f24 || out[2] != 0x7f24) return 0; @@ -8046,7 +8037,7 @@ int CheckSE(void) * Bug reported. */ static -int CheckForgedMPE(void) +int CheckForgedMPE(cmsContext ContextID) { cmsUInt32Number i; cmsHPROFILE srcProfile; @@ -8059,18 +8050,18 @@ int CheckForgedMPE(void) cmsHTRANSFORM hTransform; cmsUInt8Number output[4]; - srcProfile = cmsOpenProfileFromFile(DbgThread(), "bad_mpe.icc", "r"); + srcProfile = cmsOpenProfileFromFile(ContextID, "bad_mpe.icc", "r"); if (!srcProfile) return 0; - dstProfile = cmsCreate_sRGBProfile(DbgThread()); + dstProfile = cmsCreate_sRGBProfile(ContextID); if (!dstProfile) { - cmsCloseProfile(DbgThread(), srcProfile); + cmsCloseProfile(ContextID, srcProfile); return 0; } - srcCS = cmsGetColorSpace(DbgThread(), srcProfile); - nSrcComponents = cmsChannelsOf(DbgThread(), srcCS); + srcCS = cmsGetColorSpace(ContextID, srcProfile); + nSrcComponents = cmsChannelsOf(ContextID, srcCS); if (srcCS == cmsSigLabData) { srcFormat = @@ -8081,14 +8072,14 @@ int CheckForgedMPE(void) COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); } - cmsSetLogErrorHandler(DbgThread(), ErrorReportingFunction); + cmsSetLogErrorHandler(ContextID, ErrorReportingFunction); - hTransform = cmsCreateTransform(DbgThread(), srcProfile, srcFormat, dstProfile, + hTransform = cmsCreateTransform(ContextID, srcProfile, srcFormat, dstProfile, TYPE_BGR_8, intent, flags); - cmsCloseProfile(DbgThread(), srcProfile); - cmsCloseProfile(DbgThread(), dstProfile); + cmsCloseProfile(ContextID, srcProfile); + cmsCloseProfile(ContextID, dstProfile); - cmsSetLogErrorHandler(DbgThread(), FatalErrorQuit); + cmsSetLogErrorHandler(ContextID, FatalErrorQuit); // Should report error if (!TrappedError) return 0; @@ -8103,15 +8094,15 @@ int CheckForgedMPE(void) double input[128]; for (i = 0; i < nSrcComponents; i++) input[i] = 0.5f; - cmsDoTransform(DbgThread(), hTransform, input, output, 1); + cmsDoTransform(ContextID, hTransform, input, output, 1); } else { cmsUInt8Number input[128]; for (i = 0; i < nSrcComponents; i++) input[i] = 128; - cmsDoTransform(DbgThread(), hTransform, input, output, 1); + cmsDoTransform(ContextID, hTransform, input, output, 1); } - cmsDeleteTransform(DbgThread(), hTransform); + cmsDeleteTransform(ContextID, hTransform); return 0; } @@ -8123,16 +8114,16 @@ int CheckForgedMPE(void) * Thanks to Richard Hughes for providing the test */ static -int CheckProofingIntersection(void) +int CheckProofingIntersection(cmsContext ContextID) { cmsHPROFILE profile_null, hnd1, hnd2; cmsHTRANSFORM transform; - hnd1 = cmsCreate_sRGBProfile(DbgThread()); - hnd2 = Create_AboveRGB(); + hnd1 = cmsCreate_sRGBProfile(ContextID); + hnd2 = Create_AboveRGB(ContextID); - profile_null = cmsCreateNULLProfile(DbgThread()); - transform = cmsCreateProofingTransform(DbgThread(), + profile_null = cmsCreateNULLProfile(ContextID); + transform = cmsCreateProofingTransform(ContextID, hnd1, TYPE_RGB_FLT, profile_null, @@ -8143,14 +8134,14 @@ int CheckProofingIntersection(void) cmsFLAGS_GAMUTCHECK | cmsFLAGS_SOFTPROOFING); - cmsCloseProfile(DbgThread(), hnd1); - cmsCloseProfile(DbgThread(), hnd2); - cmsCloseProfile(DbgThread(), profile_null); + cmsCloseProfile(ContextID, hnd1); + cmsCloseProfile(ContextID, hnd2); + cmsCloseProfile(ContextID, profile_null); // Failed? if (transform == NULL) return 0; - cmsDeleteTransform(DbgThread(), transform); + cmsDeleteTransform(ContextID, transform); return 1; } @@ -8185,7 +8176,7 @@ void PrintPerformance(cmsUInt32Number Bytes, cmsUInt32Number SizeOfPixel, cmsFlo static -void SpeedTest32bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +void SpeedTest32bits(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8199,10 +8190,10 @@ void SpeedTest32bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_RGBA_FLT, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_RGBA_FLT, hlcmsProfileOut, TYPE_RGBA_FLT, Intent, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); NumPixels = 256 / Interval * 256 / Interval * 256 / Interval; Mb = NumPixels * sizeof(Scanline_rgba32); @@ -8227,19 +8218,19 @@ void SpeedTest32bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, NumPixels); + cmsDoTransform(ContextID, hlcmsxform, In, In, NumPixels); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(Scanline_rgba32), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +void SpeedTest16bits(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8251,10 +8242,10 @@ void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_RGB_16, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, Intent, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); Mb = 256*256*256 * sizeof(Scanline_rgb16); @@ -8277,19 +8268,19 @@ void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256); + cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(Scanline_rgb16), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) +void SpeedTest32bitsCMYK(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8303,10 +8294,10 @@ void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_CMYK_FLT, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_CMYK_FLT, hlcmsProfileOut, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); NumPixels = 256 / Interval * 256 / Interval * 256 / Interval; Mb = NumPixels * sizeof(Scanline_rgba32); @@ -8331,7 +8322,7 @@ void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, NumPixels); + cmsDoTransform(ContextID, hlcmsxform, In, In, NumPixels); diff = clock() - atime; @@ -8339,13 +8330,13 @@ void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO PrintPerformance(Mb, sizeof(Scanline_rgba32), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) +void SpeedTest16bitsCMYK(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8357,10 +8348,10 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_CMYK_16, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_CMYK_16, hlcmsProfileOut, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); Mb = 256*256*256*sizeof(Scanline_rgba16); @@ -8384,7 +8375,7 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256); + cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256); diff = clock() - atime; @@ -8392,13 +8383,13 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO PrintPerformance(Mb, sizeof(Scanline_rgba16), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +void SpeedTest8bits(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8410,10 +8401,10 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_RGB_8, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_RGB_8, hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); Mb = 256*256*256*sizeof(Scanline_rgb8); @@ -8435,7 +8426,7 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256); + cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256); diff = clock() - atime; @@ -8443,13 +8434,13 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE PrintPerformance(Mb, sizeof(Scanline_rgb8), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) +void SpeedTest8bitsCMYK(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8461,10 +8452,10 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, TYPE_CMYK_8, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_CMYK_8, hlcmsProfileOut, TYPE_CMYK_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); Mb = 256*256*256*sizeof(Scanline_rgba8); @@ -8487,7 +8478,7 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256); + cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256); diff = clock() - atime; @@ -8496,13 +8487,13 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF PrintPerformance(Mb, sizeof(Scanline_rgba8), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -void SpeedTest32bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +void SpeedTest32bitsGray(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8516,10 +8507,10 @@ void SpeedTest32bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_GRAY_FLT, hlcmsProfileOut, TYPE_GRAY_FLT, Intent, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); NumPixels = 256 / Interval * 256 / Interval * 256 / Interval; Mb = NumPixels * sizeof(cmsFloat32Number); @@ -8540,18 +8531,18 @@ void SpeedTest32bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, NumPixels); + cmsDoTransform(ContextID, hlcmsxform, In, In, NumPixels); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(cmsFloat32Number), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -void SpeedTest16bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +void SpeedTest16bitsGray(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8563,10 +8554,10 @@ void SpeedTest16bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_GRAY_16, hlcmsProfileOut, TYPE_GRAY_16, Intent, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); Mb = 256*256*256 * sizeof(cmsUInt16Number); In = (cmsUInt16Number *) malloc(Mb); @@ -8585,18 +8576,18 @@ void SpeedTest16bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256); + cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(cmsUInt16Number), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) +void SpeedTest8bitsGray(cmsContext ContextID, const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; @@ -8609,10 +8600,10 @@ void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransform(DbgThread(), hlcmsProfileIn, + hlcmsxform = cmsCreateTransform(ContextID, hlcmsProfileIn, TYPE_GRAY_8, hlcmsProfileOut, TYPE_GRAY_8, Intent, cmsFLAGS_NOCACHE); - cmsCloseProfile(DbgThread(), hlcmsProfileIn); - cmsCloseProfile(DbgThread(), hlcmsProfileOut); + cmsCloseProfile(ContextID, hlcmsProfileIn); + cmsCloseProfile(ContextID, hlcmsProfileOut); Mb = 256*256*256; In = (cmsUInt8Number*) malloc(Mb); @@ -8631,191 +8622,191 @@ void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF atime = clock(); - cmsDoTransform(DbgThread(), hlcmsxform, In, In, 256*256*256); + cmsDoTransform(ContextID, hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(cmsUInt8Number), diff); - cmsDeleteTransform(DbgThread(), hlcmsxform); + cmsDeleteTransform(ContextID, hlcmsxform); } static -cmsHPROFILE CreateCurves(void) +cmsHPROFILE CreateCurves(cmsContext ContextID) { - cmsToneCurve* Gamma = cmsBuildGamma(DbgThread(), 1.1); + cmsToneCurve* Gamma = cmsBuildGamma(ContextID, 1.1); cmsToneCurve* Transfer[3]; cmsHPROFILE h; Transfer[0] = Transfer[1] = Transfer[2] = Gamma; - h = cmsCreateLinearizationDeviceLink(DbgThread(), cmsSigRgbData, Transfer); + h = cmsCreateLinearizationDeviceLink(ContextID, cmsSigRgbData, Transfer); - cmsFreeToneCurve(DbgThread(), Gamma); + cmsFreeToneCurve(ContextID, Gamma); return h; } static -void SpeedTest(void) +void SpeedTest(cmsContext ContextID) { printf("\n\nP E R F O R M A N C E T E S T S\n"); printf( "=================================\n\n"); fflush(stdout); - SpeedTest8bits("8 bits on CLUT profiles", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "test3.icc", "r"), + SpeedTest8bits(ContextID, "8 bits on CLUT profiles", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "test3.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest16bits("16 bits on CLUT profiles", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "test3.icc", "r"), INTENT_PERCEPTUAL); + SpeedTest16bits(ContextID, "16 bits on CLUT profiles", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "test3.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest32bits("32 bits on CLUT profiles", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "test3.icc", "r"), INTENT_PERCEPTUAL); + SpeedTest32bits(ContextID, "32 bits on CLUT profiles", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "test3.icc", "r"), INTENT_PERCEPTUAL); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bits("8 bits on Matrix-Shaper profiles", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), + SpeedTest8bits(ContextID, "8 bits on Matrix-Shaper profiles", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest16bits("16 bits on Matrix-Shaper profiles", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), + SpeedTest16bits(ContextID, "16 bits on Matrix-Shaper profiles", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest32bits("32 bits on Matrix-Shaper profiles", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), + SpeedTest32bits(ContextID, "32 bits on Matrix-Shaper profiles", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bits("8 bits on SAME Matrix-Shaper profiles", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), + SpeedTest8bits(ContextID, "8 bits on SAME Matrix-Shaper profiles", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest16bits("16 bits on SAME Matrix-Shaper profiles", - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), + SpeedTest16bits(ContextID, "16 bits on SAME Matrix-Shaper profiles", + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest32bits("32 bits on SAME Matrix-Shaper profiles", - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), + SpeedTest32bits(ContextID, "32 bits on SAME Matrix-Shaper profiles", + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bits("8 bits on Matrix-Shaper profiles (AbsCol)", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), + SpeedTest8bits(ContextID, "8 bits on Matrix-Shaper profiles (AbsCol)", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), INTENT_ABSOLUTE_COLORIMETRIC); - SpeedTest16bits("16 bits on Matrix-Shaper profiles (AbsCol)", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), + SpeedTest16bits(ContextID, "16 bits on Matrix-Shaper profiles (AbsCol)", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), INTENT_ABSOLUTE_COLORIMETRIC); - SpeedTest32bits("32 bits on Matrix-Shaper profiles (AbsCol)", - cmsOpenProfileFromFile(DbgThread(), "test5.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "aRGBlcms2.icc", "r"), + SpeedTest32bits(ContextID, "32 bits on Matrix-Shaper profiles (AbsCol)", + cmsOpenProfileFromFile(ContextID, "test5.icc", "r"), + cmsOpenProfileFromFile(ContextID, "aRGBlcms2.icc", "r"), INTENT_ABSOLUTE_COLORIMETRIC); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bits("8 bits on curves", - CreateCurves(), - CreateCurves(), + SpeedTest8bits(ContextID, "8 bits on curves", + CreateCurves(ContextID), + CreateCurves(ContextID), INTENT_PERCEPTUAL); - SpeedTest16bits("16 bits on curves", - CreateCurves(), - CreateCurves(), + SpeedTest16bits(ContextID, "16 bits on curves", + CreateCurves(ContextID), + CreateCurves(ContextID), INTENT_PERCEPTUAL); - SpeedTest32bits("32 bits on curves", - CreateCurves(), - CreateCurves(), + SpeedTest32bits(ContextID, "32 bits on curves", + CreateCurves(ContextID), + CreateCurves(ContextID), INTENT_PERCEPTUAL); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bitsCMYK("8 bits on CMYK profiles", - cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r")); + SpeedTest8bitsCMYK(ContextID, "8 bits on CMYK profiles", + cmsOpenProfileFromFile(ContextID, "test1.icc", "r"), + cmsOpenProfileFromFile(ContextID, "test2.icc", "r")); - SpeedTest16bitsCMYK("16 bits on CMYK profiles", - cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r")); + SpeedTest16bitsCMYK(ContextID, "16 bits on CMYK profiles", + cmsOpenProfileFromFile(ContextID, "test1.icc", "r"), + cmsOpenProfileFromFile(ContextID, "test2.icc", "r")); - SpeedTest32bitsCMYK("32 bits on CMYK profiles", - cmsOpenProfileFromFile(DbgThread(), "test1.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "test2.icc", "r")); + SpeedTest32bitsCMYK(ContextID, "32 bits on CMYK profiles", + cmsOpenProfileFromFile(ContextID, "test1.icc", "r"), + cmsOpenProfileFromFile(ContextID, "test2.icc", "r")); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bitsGray("8 bits on gray-to gray", - cmsOpenProfileFromFile(DbgThread(), "gray3lcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); + SpeedTest8bitsGray(ContextID, "8 bits on gray-to gray", + cmsOpenProfileFromFile(ContextID, "gray3lcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); - SpeedTest16bitsGray("16 bits on gray-to gray", - cmsOpenProfileFromFile(DbgThread(), "gray3lcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); + SpeedTest16bitsGray(ContextID, "16 bits on gray-to gray", + cmsOpenProfileFromFile(ContextID, "gray3lcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); - SpeedTest32bitsGray("32 bits on gray-to gray", - cmsOpenProfileFromFile(DbgThread(), "gray3lcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); + SpeedTest32bitsGray(ContextID, "32 bits on gray-to gray", + cmsOpenProfileFromFile(ContextID, "gray3lcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bitsGray("8 bits on gray-to-lab gray", - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); + SpeedTest8bitsGray(ContextID, "8 bits on gray-to-lab gray", + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); - SpeedTest16bitsGray("16 bits on gray-to-lab gray", - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); + SpeedTest16bitsGray(ContextID, "16 bits on gray-to-lab gray", + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); - SpeedTest32bitsGray("32 bits on gray-to-lab gray", - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); + SpeedTest32bitsGray(ContextID, "32 bits on gray-to-lab gray", + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bitsGray("8 bits on SAME gray-to-gray", - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_PERCEPTUAL); + SpeedTest8bitsGray(ContextID, "8 bits on SAME gray-to-gray", + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest16bitsGray("16 bits on SAME gray-to-gray", - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_PERCEPTUAL); + SpeedTest16bitsGray(ContextID, "16 bits on SAME gray-to-gray", + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest32bitsGray("32 bits on SAME gray-to-gray", - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), - cmsOpenProfileFromFile(DbgThread(), "graylcms2.icc", "r"), INTENT_PERCEPTUAL); + SpeedTest32bitsGray(ContextID, "32 bits on SAME gray-to-gray", + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), + cmsOpenProfileFromFile(ContextID, "graylcms2.icc", "r"), INTENT_PERCEPTUAL); printf("\n"); } @@ -8856,6 +8847,7 @@ int main(int argc, char* argv[]) cmsInt32Number DoCheckTests = 1; cmsInt32Number DoPluginTests = 1; cmsInt32Number DoZooTests = 0; + cmsContext ctx; #ifdef _MSC_VER _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); @@ -8881,250 +8873,251 @@ int main(int argc, char* argv[]) printf("done.\n"); #endif - printf("Installing debug memory plug-in ... "); - cmsPlugin(DbgThread(), &DebugMemHandler); + cmsPlugin(NULL, &DebugMemHandler); printf("done.\n"); + ctx = NULL;//cmsCreateContext(NULL, NULL); + printf("Installing error logger ... "); - cmsSetLogErrorHandler(DbgThread(), FatalErrorQuit); + cmsSetLogErrorHandler(NULL, FatalErrorQuit); printf("done.\n"); PrintSupportedIntents(); - Check("Base types", CheckBaseTypes); - Check("endianness", CheckEndianness); - Check("quick floor", CheckQuickFloor); - Check("quick floor word", CheckQuickFloorWord); - Check("Fixed point 15.16 representation", CheckFixedPoint15_16); - Check("Fixed point 8.8 representation", CheckFixedPoint8_8); - Check("D50 roundtrip", CheckD50Roundtrip); + Check(ctx, "Base types", CheckBaseTypes); + Check(ctx, "endianness", CheckEndianness); + Check(ctx, "quick floor", CheckQuickFloor); + Check(ctx, "quick floor word", CheckQuickFloorWord); + Check(ctx, "Fixed point 15.16 representation", CheckFixedPoint15_16); + Check(ctx, "Fixed point 8.8 representation", CheckFixedPoint8_8); + Check(ctx, "D50 roundtrip", CheckD50Roundtrip); // Create utility profiles if (DoCheckTests || DoSpeedTests) - Check("Creation of test profiles", CreateTestProfiles); + Check(ctx, "Creation of test profiles", CreateTestProfiles); if (DoCheckTests) { // Forward 1D interpolation - Check("1D interpolation in 2pt tables", Check1DLERP2); - Check("1D interpolation in 3pt tables", Check1DLERP3); - Check("1D interpolation in 4pt tables", Check1DLERP4); - Check("1D interpolation in 6pt tables", Check1DLERP6); - Check("1D interpolation in 18pt tables", Check1DLERP18); - Check("1D interpolation in descending 2pt tables", Check1DLERP2Down); - Check("1D interpolation in descending 3pt tables", Check1DLERP3Down); - Check("1D interpolation in descending 6pt tables", Check1DLERP6Down); - Check("1D interpolation in descending 18pt tables", Check1DLERP18Down); + Check(ctx, "1D interpolation in 2pt tables", Check1DLERP2); + Check(ctx, "1D interpolation in 3pt tables", Check1DLERP3); + Check(ctx, "1D interpolation in 4pt tables", Check1DLERP4); + Check(ctx, "1D interpolation in 6pt tables", Check1DLERP6); + Check(ctx, "1D interpolation in 18pt tables", Check1DLERP18); + Check(ctx, "1D interpolation in descending 2pt tables", Check1DLERP2Down); + Check(ctx, "1D interpolation in descending 3pt tables", Check1DLERP3Down); + Check(ctx, "1D interpolation in descending 6pt tables", Check1DLERP6Down); + Check(ctx, "1D interpolation in descending 18pt tables", Check1DLERP18Down); if (Exhaustive) { - Check("1D interpolation in n tables", ExhaustiveCheck1DLERP); - Check("1D interpolation in descending tables", ExhaustiveCheck1DLERPDown); + Check(ctx, "1D interpolation in n tables", ExhaustiveCheck1DLERP); + Check(ctx, "1D interpolation in descending tables", ExhaustiveCheck1DLERPDown); } // Forward 3D interpolation - Check("3D interpolation Tetrahedral (float) ", Check3DinterpolationFloatTetrahedral); - Check("3D interpolation Trilinear (float) ", Check3DinterpolationFloatTrilinear); - Check("3D interpolation Tetrahedral (16) ", Check3DinterpolationTetrahedral16); - Check("3D interpolation Trilinear (16) ", Check3DinterpolationTrilinear16); + Check(ctx, "3D interpolation Tetrahedral (float) ", Check3DinterpolationFloatTetrahedral); + Check(ctx, "3D interpolation Trilinear (float) ", Check3DinterpolationFloatTrilinear); + Check(ctx, "3D interpolation Tetrahedral (16) ", Check3DinterpolationTetrahedral16); + Check(ctx, "3D interpolation Trilinear (16) ", Check3DinterpolationTrilinear16); if (Exhaustive) { - Check("Exhaustive 3D interpolation Tetrahedral (float) ", ExaustiveCheck3DinterpolationFloatTetrahedral); - Check("Exhaustive 3D interpolation Trilinear (float) ", ExaustiveCheck3DinterpolationFloatTrilinear); - Check("Exhaustive 3D interpolation Tetrahedral (16) ", ExhaustiveCheck3DinterpolationTetrahedral16); - Check("Exhaustive 3D interpolation Trilinear (16) ", ExhaustiveCheck3DinterpolationTrilinear16); + Check(ctx, "Exhaustive 3D interpolation Tetrahedral (float) ", ExaustiveCheck3DinterpolationFloatTetrahedral); + Check(ctx, "Exhaustive 3D interpolation Trilinear (float) ", ExaustiveCheck3DinterpolationFloatTrilinear); + Check(ctx, "Exhaustive 3D interpolation Tetrahedral (16) ", ExhaustiveCheck3DinterpolationTetrahedral16); + Check(ctx, "Exhaustive 3D interpolation Trilinear (16) ", ExhaustiveCheck3DinterpolationTrilinear16); } - Check("Reverse interpolation 3 -> 3", CheckReverseInterpolation3x3); - Check("Reverse interpolation 4 -> 3", CheckReverseInterpolation4x3); + Check(ctx, "Reverse interpolation 3 -> 3", CheckReverseInterpolation3x3); + Check(ctx, "Reverse interpolation 4 -> 3", CheckReverseInterpolation4x3); // High dimensionality interpolation - Check("3D interpolation", Check3Dinterp); - Check("3D interpolation with granularity", Check3DinterpGranular); - Check("4D interpolation", Check4Dinterp); - Check("4D interpolation with granularity", Check4DinterpGranular); - Check("5D interpolation with granularity", Check5DinterpGranular); - Check("6D interpolation with granularity", Check6DinterpGranular); - Check("7D interpolation with granularity", Check7DinterpGranular); - Check("8D interpolation with granularity", Check8DinterpGranular); + Check(ctx, "3D interpolation", Check3Dinterp); + Check(ctx, "3D interpolation with granularity", Check3DinterpGranular); + Check(ctx, "4D interpolation", Check4Dinterp); + Check(ctx, "4D interpolation with granularity", Check4DinterpGranular); + Check(ctx, "5D interpolation with granularity", Check5DinterpGranular); + Check(ctx, "6D interpolation with granularity", Check6DinterpGranular); + Check(ctx, "7D interpolation with granularity", Check7DinterpGranular); + Check(ctx, "8D interpolation with granularity", Check8DinterpGranular); // 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 V2 encoding", CheckLabV2encoding); - Check("Lab V4 encoding", CheckLabV4encoding); + Check(ctx, "Lab to LCh and back (float only) ", CheckLab2LCh); + Check(ctx, "Lab to XYZ and back (float only) ", CheckLab2XYZ); + Check(ctx, "Lab to xyY and back (float only) ", CheckLab2xyY); + Check(ctx, "Lab V2 encoding", CheckLabV2encoding); + Check(ctx, "Lab V4 encoding", CheckLabV4encoding); // BlackBody - Check("Blackbody radiator", CheckTemp2CHRM); + Check(ctx, "Blackbody radiator", CheckTemp2CHRM); // Tone curves - Check("Linear gamma curves (16 bits)", CheckGammaCreation16); - Check("Linear gamma curves (float)", CheckGammaCreationFlt); + Check(ctx, "Linear gamma curves (16 bits)", CheckGammaCreation16); + Check(ctx, "Linear gamma curves (float)", CheckGammaCreationFlt); - Check("Curve 1.8 (float)", CheckGamma18); - Check("Curve 2.2 (float)", CheckGamma22); - Check("Curve 3.0 (float)", CheckGamma30); + Check(ctx, "Curve 1.8 (float)", CheckGamma18); + Check(ctx, "Curve 2.2 (float)", CheckGamma22); + Check(ctx, "Curve 3.0 (float)", CheckGamma30); - Check("Curve 1.8 (table)", CheckGamma18Table); - Check("Curve 2.2 (table)", CheckGamma22Table); - Check("Curve 3.0 (table)", CheckGamma30Table); + Check(ctx, "Curve 1.8 (table)", CheckGamma18Table); + Check(ctx, "Curve 2.2 (table)", CheckGamma22Table); + Check(ctx, "Curve 3.0 (table)", CheckGamma30Table); - Check("Curve 1.8 (word table)", CheckGamma18TableWord); - Check("Curve 2.2 (word table)", CheckGamma22TableWord); - Check("Curve 3.0 (word table)", CheckGamma30TableWord); + Check(ctx, "Curve 1.8 (word table)", CheckGamma18TableWord); + Check(ctx, "Curve 2.2 (word table)", CheckGamma22TableWord); + Check(ctx, "Curve 3.0 (word table)", CheckGamma30TableWord); - Check("Parametric curves", CheckParametricToneCurves); + Check(ctx, "Parametric curves", CheckParametricToneCurves); - Check("Join curves", CheckJointCurves); - Check("Join curves descending", CheckJointCurvesDescending); - Check("Join curves degenerated", CheckReverseDegenerated); - Check("Join curves sRGB (Float)", CheckJointFloatCurves_sRGB); - Check("Join curves sRGB (16 bits)", CheckJoint16Curves_sRGB); - Check("Join curves sigmoidal", CheckJointCurvesSShaped); + Check(ctx, "Join curves", CheckJointCurves); + Check(ctx, "Join curves descending", CheckJointCurvesDescending); + Check(ctx, "Join curves degenerated", CheckReverseDegenerated); + Check(ctx, "Join curves sRGB (Float)", CheckJointFloatCurves_sRGB); + Check(ctx, "Join curves sRGB (16 bits)", CheckJoint16Curves_sRGB); + Check(ctx, "Join curves sigmoidal", CheckJointCurvesSShaped); // LUT basics - Check("LUT creation & dup", CheckLUTcreation); - Check("1 Stage LUT ", Check1StageLUT); - Check("2 Stage LUT ", Check2StageLUT); - Check("2 Stage LUT (16 bits)", Check2Stage16LUT); - Check("3 Stage LUT ", Check3StageLUT); - Check("3 Stage LUT (16 bits)", Check3Stage16LUT); - Check("4 Stage LUT ", Check4StageLUT); - Check("4 Stage LUT (16 bits)", Check4Stage16LUT); - Check("5 Stage LUT ", Check5StageLUT); - Check("5 Stage LUT (16 bits) ", Check5Stage16LUT); - Check("6 Stage LUT ", Check6StageLUT); - Check("6 Stage LUT (16 bits) ", Check6Stage16LUT); + Check(ctx, "LUT creation & dup", CheckLUTcreation); + Check(ctx, "1 Stage LUT ", Check1StageLUT); + Check(ctx, "2 Stage LUT ", Check2StageLUT); + Check(ctx, "2 Stage LUT (16 bits)", Check2Stage16LUT); + Check(ctx, "3 Stage LUT ", Check3StageLUT); + Check(ctx, "3 Stage LUT (16 bits)", Check3Stage16LUT); + Check(ctx, "4 Stage LUT ", Check4StageLUT); + Check(ctx, "4 Stage LUT (16 bits)", Check4Stage16LUT); + Check(ctx, "5 Stage LUT ", Check5StageLUT); + Check(ctx, "5 Stage LUT (16 bits) ", Check5Stage16LUT); + Check(ctx, "6 Stage LUT ", Check6StageLUT); + Check(ctx, "6 Stage LUT (16 bits) ", Check6Stage16LUT); // LUT operation - Check("Lab to Lab LUT (float only) ", CheckLab2LabLUT); - Check("XYZ to XYZ LUT (float only) ", CheckXYZ2XYZLUT); - Check("Lab to Lab MAT LUT (float only) ", CheckLab2LabMatLUT); - Check("Named Color LUT", CheckNamedColorLUT); - Check("Usual formatters", CheckFormatters16); - Check("Floating point formatters", CheckFormattersFloat); + Check(ctx, "Lab to Lab LUT (float only) ", CheckLab2LabLUT); + Check(ctx, "XYZ to XYZ LUT (float only) ", CheckXYZ2XYZLUT); + Check(ctx, "Lab to Lab MAT LUT (float only) ", CheckLab2LabMatLUT); + Check(ctx, "Named Color LUT", CheckNamedColorLUT); + Check(ctx, "Usual formatters", CheckFormatters16); + Check(ctx, "Floating point formatters", CheckFormattersFloat); #ifndef CMS_NO_HALF_SUPPORT - Check("HALF formatters", CheckFormattersHalf); + Check(ctx, "HALF formatters", CheckFormattersHalf); #endif // ChangeBuffersFormat - Check("ChangeBuffersFormat", CheckChangeBufferFormat); + Check(ctx, "ChangeBuffersFormat", CheckChangeBufferFormat); // MLU - Check("Multilocalized Unicode", CheckMLU); + Check(ctx, "Multilocalized Unicode", CheckMLU); // Named color - Check("Named color lists", CheckNamedColorList); + Check(ctx, "Named color lists", CheckNamedColorList); // Profile I/O (this one is huge!) - Check("Profile creation", CheckProfileCreation); - Check("Header version", CheckVersionHeaderWriting); - Check("Multilocalized profile", CheckMultilocalizedProfile); + Check(ctx, "Profile creation", CheckProfileCreation); + Check(ctx, "Header version", CheckVersionHeaderWriting); + Check(ctx, "Multilocalized profile", CheckMultilocalizedProfile); // Error reporting - Check("Error reporting on bad profiles", CheckErrReportingOnBadProfiles); - Check("Error reporting on bad transforms", CheckErrReportingOnBadTransforms); + Check(ctx, "Error reporting on bad profiles", CheckErrReportingOnBadProfiles); + Check(ctx, "Error reporting on bad transforms", CheckErrReportingOnBadTransforms); // Transforms - Check("Curves only transforms", CheckCurvesOnlyTransforms); - Check("Float Lab->Lab transforms", CheckFloatLabTransforms); - Check("Encoded Lab->Lab transforms", CheckEncodedLabTransforms); - Check("Stored identities", CheckStoredIdentities); + Check(ctx, "Curves only transforms", CheckCurvesOnlyTransforms); + Check(ctx, "Float Lab->Lab transforms", CheckFloatLabTransforms); + Check(ctx, "Encoded Lab->Lab transforms", CheckEncodedLabTransforms); + Check(ctx, "Stored identities", CheckStoredIdentities); - Check("Matrix-shaper transform (float)", CheckMatrixShaperXFORMFloat); - Check("Matrix-shaper transform (16 bits)", CheckMatrixShaperXFORM16); - Check("Matrix-shaper transform (8 bits)", CheckMatrixShaperXFORM8); + Check(ctx, "Matrix-shaper transform (float)", CheckMatrixShaperXFORMFloat); + Check(ctx, "Matrix-shaper transform (16 bits)", CheckMatrixShaperXFORM16); + Check(ctx, "Matrix-shaper transform (8 bits)", CheckMatrixShaperXFORM8); - Check("Primaries of sRGB", CheckRGBPrimaries); + Check(ctx, "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 output profile", CheckOutputGray); - Check("Gray Lab output profile", CheckLabOutputGray); + Check(ctx, "Known values across matrix-shaper", Chack_sRGB_Float); + Check(ctx, "Gray input profile", CheckInputGray); + Check(ctx, "Gray Lab input profile", CheckLabInputGray); + Check(ctx, "Gray output profile", CheckOutputGray); + Check(ctx, "Gray Lab output profile", CheckLabOutputGray); - Check("Matrix-shaper proofing transform (float)", CheckProofingXFORMFloat); - Check("Matrix-shaper proofing transform (16 bits)", CheckProofingXFORM16); + Check(ctx, "Matrix-shaper proofing transform (float)", CheckProofingXFORMFloat); + Check(ctx, "Matrix-shaper proofing transform (16 bits)", CheckProofingXFORM16); - Check("Gamut check", CheckGamutCheck); + Check(ctx, "Gamut check", CheckGamutCheck); - Check("CMYK roundtrip on perceptual transform", CheckCMYKRoundtrip); + Check(ctx, "CMYK roundtrip on perceptual transform", CheckCMYKRoundtrip); - Check("CMYK perceptual transform", CheckCMYKPerceptual); + Check(ctx, "CMYK perceptual transform", CheckCMYKPerceptual); // Check("CMYK rel.col. transform", CheckCMYKRelCol); - Check("Black ink only preservation", CheckKOnlyBlackPreserving); - Check("Black plane preservation", CheckKPlaneBlackPreserving); - - - Check("Deciding curve types", CheckV4gamma); - - Check("Black point detection", CheckBlackPoint); - Check("TAC detection", CheckTAC); - - Check("CGATS parser", CheckCGATS); - Check("CGATS parser on junk", CheckCGATS2); - Check("CGATS parser on overflow", CheckCGATS_Overflow); - Check("PostScript generator", CheckPostScript); - Check("Segment maxima GBD", CheckGBD); - Check("MD5 digest", CheckMD5); - Check("Linking", CheckLinking); - Check("floating point tags on XYZ", CheckFloatXYZ); - Check("RGB->Lab->RGB with alpha on FLT", ChecksRGB2LabFLT); - Check("Parametric curve on Rec709", CheckParametricRec709); - Check("Floating Point sampled curve with non-zero start", CheckFloatSamples); - Check("Floating Point segmented curve with short sampled segment", CheckFloatSegments); - Check("Read RAW portions", CheckReadRAW); - Check("Check MetaTag", CheckMeta); - Check("Null transform on floats", CheckFloatNULLxform); - Check("Set free a tag", CheckRemoveTag); - Check("Matrix simplification", CheckMatrixSimplify); - Check("Planar 8 optimization", CheckPlanar8opt); - Check("Swap endian feature", CheckSE); - Check("Transform line stride RGB", CheckTransformLineStride); - Check("Forged MPE profile", CheckForgedMPE); - Check("Proofing intersection", CheckProofingIntersection); + Check(ctx, "Black ink only preservation", CheckKOnlyBlackPreserving); + Check(ctx, "Black plane preservation", CheckKPlaneBlackPreserving); + + + Check(ctx, "Deciding curve types", CheckV4gamma); + + Check(ctx, "Black point detection", CheckBlackPoint); + Check(ctx, "TAC detection", CheckTAC); + + Check(ctx, "CGATS parser", CheckCGATS); + Check(ctx, "CGATS parser on junk", CheckCGATS2); + Check(ctx, "CGATS parser on overflow", CheckCGATS_Overflow); + Check(ctx, "PostScript generator", CheckPostScript); + Check(ctx, "Segment maxima GBD", CheckGBD); + Check(ctx, "MD5 digest", CheckMD5); + Check(ctx, "Linking", CheckLinking); + Check(ctx, "floating point tags on XYZ", CheckFloatXYZ); + Check(ctx, "RGB->Lab->RGB with alpha on FLT", ChecksRGB2LabFLT); + Check(ctx, "Parametric curve on Rec709", CheckParametricRec709); + Check(ctx, "Floating Point sampled curve with non-zero start", CheckFloatSamples); + Check(ctx, "Floating Point segmented curve with short sampled segment", CheckFloatSegments); + Check(ctx, "Read RAW portions", CheckReadRAW); + Check(ctx, "Check MetaTag", CheckMeta); + Check(ctx, "Null transform on floats", CheckFloatNULLxform); + Check(ctx, "Set free a tag", CheckRemoveTag); + Check(ctx, "Matrix simplification", CheckMatrixSimplify); + Check(ctx, "Planar 8 optimization", CheckPlanar8opt); + Check(ctx, "Swap endian feature", CheckSE); + Check(ctx, "Transform line stride RGB", CheckTransformLineStride); + Check(ctx, "Forged MPE profile", CheckForgedMPE); + Check(ctx, "Proofing intersection", CheckProofingIntersection); } if (DoPluginTests) { - Check("Context memory handling", CheckAllocContext); - Check("Simple context functionality", CheckSimpleContext); - Check("Alarm codes context", CheckAlarmColorsContext); - Check("Adaptation state context", CheckAdaptationStateContext); - Check("1D interpolation plugin", CheckInterp1DPlugin); - Check("3D interpolation plugin", CheckInterp3DPlugin); - Check("Parametric curve plugin", CheckParametricCurvePlugin); - Check("Formatters plugin", CheckFormattersPlugin); - Check("Tag type plugin", CheckTagTypePlugin); - Check("MPE type plugin", CheckMPEPlugin); - Check("Optimization plugin", CheckOptimizationPlugin); - Check("Rendering intent plugin", CheckIntentPlugin); - Check("Full transform plugin", CheckTransformPlugin); - Check("Mutex plugin", CheckMutexPlugin); + Check(ctx, "Context memory handling", CheckAllocContext); + Check(ctx, "Simple context functionality", CheckSimpleContext); + Check(ctx, "Alarm codes context", CheckAlarmColorsContext); + Check(ctx, "Adaptation state context", CheckAdaptationStateContext); + Check(ctx, "1D interpolation plugin", CheckInterp1DPlugin); + Check(ctx, "3D interpolation plugin", CheckInterp3DPlugin); + Check(ctx, "Parametric curve plugin", CheckParametricCurvePlugin); + Check(ctx, "Formatters plugin", CheckFormattersPlugin); + Check(ctx, "Tag type plugin", CheckTagTypePlugin); + Check(ctx, "MPE type plugin", CheckMPEPlugin); + Check(ctx, "Optimization plugin", CheckOptimizationPlugin); + Check(ctx, "Rendering intent plugin", CheckIntentPlugin); + Check(ctx, "Full transform plugin", CheckTransformPlugin); + Check(ctx, "Mutex plugin", CheckMutexPlugin); } if (DoSpeedTests) - SpeedTest(); + SpeedTest(ctx); #ifdef CMS_IS_WINDOWS_ if (DoZooTests) - CheckProfileZOO(NULL); + CheckProfileZOO(ctx); #endif DebugMemPrintTotals(); - cmsUnregisterPlugins(DbgThread()); + cmsUnregisterPlugins(NULL); // Cleanup if (DoCheckTests || DoSpeedTests) |