From 8b13ad6a80ce0f2e19301083c4313988ae0f8c38 Mon Sep 17 00:00:00 2001 From: Marti Maria Date: Mon, 16 Jul 2012 17:19:12 +0200 Subject: Added support for several floating point variants --- AUTHORS | 1 + include/lcms2.h | 7 + src/cmspack.c | 497 ++++++++++++--------- testbed/testcms2.c | 1234 +++++++++++++++++++++++++++------------------------- 4 files changed, 931 insertions(+), 808 deletions(-) diff --git a/AUTHORS b/AUTHORS index 7825298..7d79539 100644 --- a/AUTHORS +++ b/AUTHORS @@ -35,3 +35,4 @@ Harald Schneider (Maxon) Christian Albrecht Dimitrios Anastassakis Lemke Software +Tim Zaman \ No newline at end of file diff --git a/include/lcms2.h b/include/lcms2.h index b753405..e86098d 100644 --- a/include/lcms2.h +++ b/include/lcms2.h @@ -860,7 +860,13 @@ typedef void* cmsHTRANSFORM; #define TYPE_LabA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) #define TYPE_GRAY_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(4)) #define TYPE_RGB_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)) + #define TYPE_RGBA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) +#define TYPE_ARGB_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|SWAPFIRST_SH(1)) +#define TYPE_BGR_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)) +#define TYPE_BGRA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) +#define TYPE_ABGR_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)) + #define TYPE_CMYK_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(4)) // Floating point formatters. @@ -869,6 +875,7 @@ typedef void* cmsHTRANSFORM; #define TYPE_Lab_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(0)) #define TYPE_GRAY_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(0)) #define TYPE_RGB_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)) +#define TYPE_BGR_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)|DOSWAP_SH(1)) #define TYPE_CMYK_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(0)) // IEEE 754-2008 "half" diff --git a/src/cmspack.c b/src/cmspack.c index f72c472..8c468e5 100644 --- a/src/cmspack.c +++ b/src/cmspack.c @@ -89,6 +89,7 @@ typedef struct { // Unpacking routines (16 bits) ---------------------------------------------------------------------------------------- + // Does almost everything but is slow static cmsUInt8Number* UnrollChunkyBytes(register _cmsTRANSFORM* info, @@ -101,7 +102,7 @@ cmsUInt8Number* UnrollChunkyBytes(register _cmsTRANSFORM* info, int Reverse = T_FLAVOR(info ->InputFormat); int SwapFirst = T_SWAPFIRST(info -> InputFormat); int Extra = T_EXTRA(info -> InputFormat); - int ExtraFirst = DoSwap && !SwapFirst; + int ExtraFirst = DoSwap ^ SwapFirst; cmsUInt16Number v; int i; @@ -462,7 +463,7 @@ cmsUInt8Number* UnrollAnyWords(register _cmsTRANSFORM* info, int Reverse = T_FLAVOR(info ->InputFormat); int SwapFirst = T_SWAPFIRST(info -> InputFormat); int Extra = T_EXTRA(info -> InputFormat); - int ExtraFirst = DoSwap && !SwapFirst; + int ExtraFirst = DoSwap ^ SwapFirst; int i; if (ExtraFirst) { @@ -828,65 +829,117 @@ cmsINLINE cmsBool IsInkSpace(cmsUInt32Number Type) // Inks does come in percentage, remaining cases are between 0..1.0, again to 16 bits static cmsUInt8Number* UnrollDoubleTo16(register _cmsTRANSFORM* info, - register cmsUInt16Number wIn[], - register cmsUInt8Number* accum, - register cmsUInt32Number Stride) + register cmsUInt16Number wIn[], + register cmsUInt8Number* accum, + register cmsUInt32Number Stride) { - cmsFloat64Number* Inks = (cmsFloat64Number*) accum; - int nChan = T_CHANNELS(info -> InputFormat); - int Planar = T_PLANAR(info -> InputFormat); - int i; + + int nChan = T_CHANNELS(info -> InputFormat); + int DoSwap = T_DOSWAP(info ->InputFormat); + int Reverse = T_FLAVOR(info ->InputFormat); + int SwapFirst = T_SWAPFIRST(info -> InputFormat); + int Extra = T_EXTRA(info -> InputFormat); + int ExtraFirst = DoSwap ^ SwapFirst; + int Planar = T_PLANAR(info -> InputFormat); cmsFloat64Number v; - cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 655.35 : 65535.0; + cmsUInt16Number vi; + int i, start = 0; + cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 655.35 : 65535.0; + + + if (ExtraFirst) + start = Extra; for (i=0; i < nChan; i++) { - if (Planar) + int index = DoSwap ? (nChan - i - 1) : i; - v = Inks[i * Stride]; + if (Planar) + v = (cmsFloat32Number) ((cmsFloat64Number*) accum)[(i + start) * Stride]; else - v = Inks[i]; + v = (cmsFloat32Number) ((cmsFloat64Number*) accum)[i + start]; + + vi = _cmsQuickSaturateWord(v * maximum); - wIn[i] = _cmsQuickSaturateWord(v * maximum); + if (Reverse) + vi = REVERSE_FLAVOR_16(vi); + + wIn[index] = vi; + } + + + if (Extra == 0 && SwapFirst) { + cmsUInt16Number tmp = wIn[0]; + + memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); + wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsFloat64Number); else - return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat64Number); + return accum + (nChan + Extra) * sizeof(cmsFloat64Number); } + + static cmsUInt8Number* UnrollFloatTo16(register _cmsTRANSFORM* info, register cmsUInt16Number wIn[], register cmsUInt8Number* accum, register cmsUInt32Number Stride) { - cmsFloat32Number* Inks = (cmsFloat32Number*) accum; - int nChan = T_CHANNELS(info -> InputFormat); - int Planar = T_PLANAR(info -> InputFormat); - int i; + + int nChan = T_CHANNELS(info -> InputFormat); + int DoSwap = T_DOSWAP(info ->InputFormat); + int Reverse = T_FLAVOR(info ->InputFormat); + int SwapFirst = T_SWAPFIRST(info -> InputFormat); + int Extra = T_EXTRA(info -> InputFormat); + int ExtraFirst = DoSwap ^ SwapFirst; + int Planar = T_PLANAR(info -> InputFormat); cmsFloat32Number v; - cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 655.35 : 65535.0; + cmsUInt16Number vi; + int i, start = 0; + cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 655.35 : 65535.0; + + + if (ExtraFirst) + start = Extra; for (i=0; i < nChan; i++) { - if (Planar) + int index = DoSwap ? (nChan - i - 1) : i; - v = Inks[i * Stride]; + if (Planar) + v = (cmsFloat32Number) ((cmsFloat32Number*) accum)[(i + start) * Stride]; else - v = Inks[i]; + v = (cmsFloat32Number) ((cmsFloat32Number*) accum)[i + start]; - wIn[i] = _cmsQuickSaturateWord(v * maximum); + vi = _cmsQuickSaturateWord(v * maximum); + + if (Reverse) + vi = REVERSE_FLAVOR_16(vi); + + wIn[index] = vi; + } + + + if (Extra == 0 && SwapFirst) { + cmsUInt16Number tmp = wIn[0]; + + memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); + wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsFloat32Number); else - return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat32Number); + return accum + (nChan + Extra) * sizeof(cmsFloat32Number); } + + // For 1 channel, we need to duplicate data (it comes in 0..1.0 range) static cmsUInt8Number* UnrollDouble1Chan(register _cmsTRANSFORM* info, @@ -906,8 +959,6 @@ cmsUInt8Number* UnrollDouble1Chan(register _cmsTRANSFORM* info, //------------------------------------------------------------------------------------------------------------------- -// True float transformation. - // For anything going from cmsFloat32Number static cmsUInt8Number* UnrollFloatsToFloat(_cmsTRANSFORM* info, @@ -915,57 +966,104 @@ cmsUInt8Number* UnrollFloatsToFloat(_cmsTRANSFORM* info, cmsUInt8Number* accum, cmsUInt32Number Stride) { - cmsFloat32Number* Inks = (cmsFloat32Number*) accum; - int nChan = T_CHANNELS(info -> InputFormat); - int Planar = T_PLANAR(info -> InputFormat); - int i; - cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 100.0 : 1.0; + int nChan = T_CHANNELS(info -> InputFormat); + int DoSwap = T_DOSWAP(info ->InputFormat); + int Reverse = T_FLAVOR(info ->InputFormat); + int SwapFirst = T_SWAPFIRST(info -> InputFormat); + int Extra = T_EXTRA(info -> InputFormat); + int ExtraFirst = DoSwap ^ SwapFirst; + int Planar = T_PLANAR(info -> InputFormat); + cmsFloat32Number v; + int i, start = 0; + cmsFloat32Number maximum = IsInkSpace(info ->InputFormat) ? 100.0F : 1.0F; - for (i=0; i < nChan; i++) { + + if (ExtraFirst) + start = Extra; + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; if (Planar) - wIn[i] = (cmsFloat32Number) (Inks[i * Stride] / maximum); + v = (cmsFloat32Number) ((cmsFloat32Number*) accum)[(i + start) * Stride]; else - wIn[i] = (cmsFloat32Number) (Inks[i] / maximum); + v = (cmsFloat32Number) ((cmsFloat32Number*) accum)[i + start]; + + v /= maximum; + + wIn[index] = Reverse ? 1 - v : v; + } + + + if (Extra == 0 && SwapFirst) { + cmsFloat32Number tmp = wIn[0]; + + memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsFloat32Number)); + wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsFloat32Number); else - return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat32Number); + return accum + (nChan + Extra) * sizeof(cmsFloat32Number); } // For anything going from double + static cmsUInt8Number* UnrollDoublesToFloat(_cmsTRANSFORM* info, - cmsFloat32Number wIn[], - cmsUInt8Number* accum, - cmsUInt32Number Stride) + cmsFloat32Number wIn[], + cmsUInt8Number* accum, + cmsUInt32Number Stride) { - cmsFloat64Number* Inks = (cmsFloat64Number*) accum; - int nChan = T_CHANNELS(info -> InputFormat); - int Planar = T_PLANAR(info -> InputFormat); - int i; + + int nChan = T_CHANNELS(info -> InputFormat); + int DoSwap = T_DOSWAP(info ->InputFormat); + int Reverse = T_FLAVOR(info ->InputFormat); + int SwapFirst = T_SWAPFIRST(info -> InputFormat); + int Extra = T_EXTRA(info -> InputFormat); + int ExtraFirst = DoSwap ^ SwapFirst; + int Planar = T_PLANAR(info -> InputFormat); + cmsFloat64Number v; + int i, start = 0; cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 100.0 : 1.0; - for (i=0; i < nChan; i++) { + + if (ExtraFirst) + start = Extra; + + for (i=0; i < nChan; i++) { + + int index = DoSwap ? (nChan - i - 1) : i; if (Planar) - wIn[i] = (cmsFloat32Number) (Inks[i * Stride] / maximum); + v = (cmsFloat64Number) ((cmsFloat64Number*) accum)[(i + start) * Stride]; else - wIn[i] = (cmsFloat32Number) (Inks[i] / maximum); + v = (cmsFloat64Number) ((cmsFloat64Number*) accum)[i + start]; + + v /= maximum; + + wIn[index] = (cmsFloat32Number) (Reverse ? 1.0 - v : v); + } + + + if (Extra == 0 && SwapFirst) { + cmsFloat32Number tmp = wIn[0]; + + memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsFloat32Number)); + wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsFloat64Number); else - return accum + (nChan + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat64Number); + return accum + (nChan + Extra) * sizeof(cmsFloat64Number); } - // From Lab double to cmsFloat32Number static cmsUInt8Number* UnrollLabDoubleToFloat(_cmsTRANSFORM* info, @@ -1097,7 +1195,7 @@ cmsUInt8Number* PackAnyBytes(register _cmsTRANSFORM* info, int Reverse = T_FLAVOR(info ->OutputFormat); int Extra = T_EXTRA(info -> OutputFormat); int SwapFirst = T_SWAPFIRST(info -> OutputFormat); - int ExtraFirst = DoSwap && !SwapFirst; + int ExtraFirst = DoSwap ^ SwapFirst; cmsUInt8Number* swap1; cmsUInt8Number v = 0; int i; @@ -1150,7 +1248,7 @@ cmsUInt8Number* PackAnyWords(register _cmsTRANSFORM* info, int Reverse = T_FLAVOR(info ->OutputFormat); int Extra = T_EXTRA(info -> OutputFormat); int SwapFirst = T_SWAPFIRST(info -> OutputFormat); - int ExtraFirst = DoSwap && !SwapFirst; + int ExtraFirst = DoSwap ^ SwapFirst; cmsUInt16Number* swap1; cmsUInt16Number v = 0; int i; @@ -2127,145 +2225,136 @@ cmsUInt8Number* PackXYZDoubleFrom16(register _cmsTRANSFORM* Info, } static -cmsUInt8Number* PackDoubleFrom16(register _cmsTRANSFORM* Info, - register cmsUInt16Number wOut[], - register cmsUInt8Number* output, - register cmsUInt32Number Stride) -{ - cmsFloat64Number* Inks = (cmsFloat64Number*) output; - int nChan = T_CHANNELS(Info -> OutputFormat); - int i; - cmsFloat64Number maximum = IsInkSpace(Info ->OutputFormat) ? 655.35 : 65535.0; - - if (T_PLANAR(Info -> OutputFormat)) { - - for (i=0; i < nChan; i++) { - - Inks[i*Stride] = wOut[i] / maximum; - } - - return output + sizeof(cmsFloat64Number); - } - else { - - for (i=0; i < nChan; i++) { - - Inks[i] = wOut[i] / maximum; - } - - - return output + (nChan + T_EXTRA(Info ->OutputFormat)) * sizeof(cmsFloat64Number); - } - -} - -static -cmsUInt8Number* PackFloatFrom16(register _cmsTRANSFORM* Info, +cmsUInt8Number* PackDoubleFrom16(register _cmsTRANSFORM* info, register cmsUInt16Number wOut[], register cmsUInt8Number* output, register cmsUInt32Number Stride) { - cmsFloat32Number* Inks = (cmsFloat32Number*) output; - int nChan = T_CHANNELS(Info -> OutputFormat); - int i; - cmsFloat64Number maximum = IsInkSpace(Info ->OutputFormat) ? 655.35 : 65535.0; + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse = T_FLAVOR(info ->OutputFormat); + int Extra = T_EXTRA(info -> OutputFormat); + int SwapFirst = T_SWAPFIRST(info -> OutputFormat); + int Planar = T_PLANAR(info -> OutputFormat); + int ExtraFirst = DoSwap ^ SwapFirst; + cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35 : 65535.0; + cmsFloat64Number v = 0; + cmsFloat64Number* swap1 = (cmsFloat64Number*) output; + int i, start = 0; - if (T_PLANAR(Info -> OutputFormat)) { + if (ExtraFirst) + start = Extra; - for (i=0; i < nChan; i++) { + for (i=0; i < nChan; i++) { - Inks[i*Stride] = (cmsFloat32Number) (wOut[i] / maximum); - } + int index = DoSwap ? (nChan - i - 1) : i; - return output + sizeof(cmsFloat32Number); - } - else { + v = (cmsFloat64Number) wOut[index] / maximum; - for (i=0; i < nChan; i++) { + if (Reverse) + v = maximum - v; - Inks[i] = (cmsFloat32Number) (wOut[i] / maximum); - } + if (Planar) + ((cmsFloat64Number*) output)[(i + start) * Stride]= v; + else + ((cmsFloat64Number*) output)[i + start] = v; + } + + if (!ExtraFirst) { + output += Extra * sizeof(cmsFloat64Number); + } + if (Extra == 0 && SwapFirst) { - return output + (nChan + T_EXTRA(Info ->OutputFormat)) * sizeof(cmsFloat32Number); + memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat64Number)); + *swap1 = v; } + if (T_PLANAR(info -> OutputFormat)) + return output + sizeof(cmsFloat64Number); + else + return output + (nChan + Extra) * sizeof(cmsFloat64Number); + } -// -------------------------------------------------------------------------------------------------------- - static -cmsUInt8Number* PackChunkyFloatsFromFloat(_cmsTRANSFORM* info, - cmsFloat32Number wOut[], - cmsUInt8Number* output, - cmsUInt32Number Stride) +cmsUInt8Number* PackFloatFrom16(register _cmsTRANSFORM* info, + register cmsUInt16Number wOut[], + register cmsUInt8Number* output, + register cmsUInt32Number Stride) { int nChan = T_CHANNELS(info -> OutputFormat); int DoSwap = T_DOSWAP(info ->OutputFormat); int Reverse = T_FLAVOR(info ->OutputFormat); int Extra = T_EXTRA(info -> OutputFormat); int SwapFirst = T_SWAPFIRST(info -> OutputFormat); - int ExtraFirst = DoSwap && !SwapFirst; - cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0; - cmsFloat32Number* swap1; + int Planar = T_PLANAR(info -> OutputFormat); + int ExtraFirst = DoSwap ^ SwapFirst; + cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35 : 65535.0; cmsFloat64Number v = 0; - int i; - - swap1 = (cmsFloat32Number*) output; + cmsFloat32Number* swap1 = (cmsFloat32Number*) output; + int i, start = 0; - if (ExtraFirst) { - output += Extra * sizeof(cmsFloat32Number); - } + if (ExtraFirst) + start = Extra; for (i=0; i < nChan; i++) { int index = DoSwap ? (nChan - i - 1) : i; - v = wOut[index] * maximum; + v = (cmsFloat64Number) wOut[index] / maximum; if (Reverse) v = maximum - v; - *(cmsFloat32Number*) output = (cmsFloat32Number) v; - - output += sizeof(cmsFloat32Number); + if (Planar) + ((cmsFloat32Number*) output)[(i + start ) * Stride]= (cmsFloat32Number) v; + else + ((cmsFloat32Number*) output)[i + start] = (cmsFloat32Number) v; } if (!ExtraFirst) { output += Extra * sizeof(cmsFloat32Number); } - if (Extra == 0 && SwapFirst) { + if (Extra == 0 && SwapFirst) { - memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number)); + memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number)); *swap1 = (cmsFloat32Number) v; } + if (T_PLANAR(info -> OutputFormat)) + return output + sizeof(cmsFloat32Number); + else + return output + (nChan + Extra) * sizeof(cmsFloat32Number); - return output; - - cmsUNUSED_PARAMETER(Stride); } + +// -------------------------------------------------------------------------------------------------------- + static -cmsUInt8Number* PackPlanarFloatsFromFloat(_cmsTRANSFORM* info, - cmsFloat32Number wOut[], - cmsUInt8Number* output, - cmsUInt32Number Stride) +cmsUInt8Number* PackFloatsFromFloat(_cmsTRANSFORM* info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) { - int nChan = T_CHANNELS(info -> OutputFormat); - int DoSwap = T_DOSWAP(info ->OutputFormat); - int Reverse= T_FLAVOR(info ->OutputFormat); - int i; - cmsUInt8Number* Init = output; + int nChan = T_CHANNELS(info -> OutputFormat); + int DoSwap = T_DOSWAP(info ->OutputFormat); + int Reverse = T_FLAVOR(info ->OutputFormat); + int Extra = T_EXTRA(info -> OutputFormat); + int SwapFirst = T_SWAPFIRST(info -> OutputFormat); + int Planar = T_PLANAR(info -> OutputFormat); + int ExtraFirst = DoSwap ^ SwapFirst; cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0; - cmsFloat64Number v; + cmsFloat32Number* swap1 = (cmsFloat32Number*) output; + cmsFloat64Number v = 0; + int i, start = 0; - if (DoSwap) { - output += T_EXTRA(info -> OutputFormat) * Stride * sizeof(cmsFloat32Number); - } + if (ExtraFirst) + start = Extra; for (i=0; i < nChan; i++) { @@ -2274,103 +2363,85 @@ cmsUInt8Number* PackPlanarFloatsFromFloat(_cmsTRANSFORM* info, v = wOut[index] * maximum; if (Reverse) - v = maximum - v; + v = maximum - v; - *(cmsFloat32Number*) output = (cmsFloat32Number) v; - output += (Stride * sizeof(cmsFloat32Number)); + if (Planar) + ((cmsFloat32Number*) output)[(i + start)* Stride]= (cmsFloat32Number) v; + else + ((cmsFloat32Number*) output)[i + start] = (cmsFloat32Number) v; } - return (Init + sizeof(cmsFloat32Number)); + if (!ExtraFirst) { + output += Extra * sizeof(cmsFloat32Number); + } -} + if (Extra == 0 && SwapFirst) { + memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number)); + *swap1 = (cmsFloat32Number) v; + } + + if (T_PLANAR(info -> OutputFormat)) + return output + sizeof(cmsFloat32Number); + else + return output + (nChan + Extra) * sizeof(cmsFloat32Number); + +} static -cmsUInt8Number* PackChunkyDoublesFromFloat(_cmsTRANSFORM* info, - cmsFloat32Number wOut[], - cmsUInt8Number* output, - cmsUInt32Number Stride) +cmsUInt8Number* PackDoublesFromFloat(_cmsTRANSFORM* info, + cmsFloat32Number wOut[], + cmsUInt8Number* output, + cmsUInt32Number Stride) { int nChan = T_CHANNELS(info -> OutputFormat); int DoSwap = T_DOSWAP(info ->OutputFormat); int Reverse = T_FLAVOR(info ->OutputFormat); int Extra = T_EXTRA(info -> OutputFormat); int SwapFirst = T_SWAPFIRST(info -> OutputFormat); - int ExtraFirst = DoSwap && !SwapFirst; - cmsFloat64Number* swap1; + int Planar = T_PLANAR(info -> OutputFormat); + int ExtraFirst = DoSwap ^ SwapFirst; cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0; cmsFloat64Number v = 0; - int i; - - swap1 = (cmsFloat64Number*) output; + cmsFloat64Number* swap1 = (cmsFloat64Number*) output; + int i, start = 0; - if (ExtraFirst) { - output += Extra * sizeof(cmsFloat64Number); - } + if (ExtraFirst) + start = Extra; for (i=0; i < nChan; i++) { int index = DoSwap ? (nChan - i - 1) : i; - v = (cmsFloat64Number) wOut[index] * maximum; + v = wOut[index] * maximum; if (Reverse) v = maximum - v; - *(cmsFloat64Number*) output = v; - - output += sizeof(cmsFloat64Number); + if (Planar) + ((cmsFloat64Number*) output)[(i + start) * Stride] = v; + else + ((cmsFloat64Number*) output)[i + start] = v; } if (!ExtraFirst) { output += Extra * sizeof(cmsFloat64Number); } - if (Extra == 0 && SwapFirst) { + if (Extra == 0 && SwapFirst) { - memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat64Number)); + memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat64Number)); *swap1 = v; } - return output; + if (T_PLANAR(info -> OutputFormat)) + return output + sizeof(cmsFloat64Number); + else + return output + (nChan + Extra) * sizeof(cmsFloat64Number); - cmsUNUSED_PARAMETER(Stride); } -static -cmsUInt8Number* PackPlanarDoublesFromFloat(_cmsTRANSFORM* info, - cmsFloat32Number wOut[], - cmsUInt8Number* output, - cmsUInt32Number Stride) -{ - int nChan = T_CHANNELS(info -> OutputFormat); - int DoSwap = T_DOSWAP(info ->OutputFormat); - int Reverse= T_FLAVOR(info ->OutputFormat); - int i; - cmsUInt8Number* Init = output; - cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0; - cmsFloat64Number v; - - if (DoSwap) { - output += T_EXTRA(info -> OutputFormat) * Stride * sizeof(cmsFloat64Number); - } - - for (i=0; i < nChan; i++) { - - int index = DoSwap ? (nChan - i - 1) : i; - - v = (cmsFloat64Number) wOut[index] * maximum; - - if (Reverse) - v = maximum - v; - - *(cmsFloat64Number*) output = v; - output += (Stride * sizeof(cmsFloat64Number)); - } - - return (Init + sizeof(cmsFloat64Number)); -} @@ -2567,7 +2638,6 @@ cmsUInt8Number* PackHalfFrom16(register _cmsTRANSFORM* Info, { cmsUInt16Number* Inks = (cmsUInt16Number*) output; int nChan = T_CHANNELS(Info -> OutputFormat); - int Reverse = T_FLAVOR(Info -> OutputFormat); int i; cmsFloat32Number maximum = IsInkSpace(Info ->OutputFormat) ? 655.35F : 65535.0F; @@ -2638,8 +2708,10 @@ static cmsFormatters16 InputFormatters16[] = { { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, UnrollLabDoubleTo16}, { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, UnrollXYZDoubleTo16}, { TYPE_GRAY_DBL, 0, UnrollDouble1Chan}, - { FLOAT_SH(1)|BYTES_SH(0), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, UnrollDoubleTo16}, - { FLOAT_SH(1)|BYTES_SH(4), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, UnrollFloatTo16}, + { FLOAT_SH(1)|BYTES_SH(0), ANYCHANNELS|ANYPLANAR|ANYSWAPFIRST| + ANYSWAP|ANYEXTRA|ANYSPACE, UnrollDoubleTo16}, + { FLOAT_SH(1)|BYTES_SH(4), ANYCHANNELS|ANYPLANAR|ANYSWAPFIRST| + ANYSWAP|ANYEXTRA|ANYSPACE, UnrollFloatTo16}, { FLOAT_SH(1)|BYTES_SH(2), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, UnrollHalfTo16}, @@ -2664,9 +2736,11 @@ static cmsFormatters16 InputFormatters16[] = { { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll4BytesSwap}, { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll4BytesSwapSwapFirst}, - { BYTES_SH(1)|PLANAR_SH(1), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollPlanarBytes}, - { BYTES_SH(1), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollChunkyBytes}, + { BYTES_SH(1)|PLANAR_SH(1), ANYFLAVOR|ANYSWAPFIRST| + ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollPlanarBytes}, + { BYTES_SH(1), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP| + ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollChunkyBytes}, { CHANNELS_SH(1)|BYTES_SH(2), ANYSPACE, Unroll1Word}, { CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Unroll1WordReversed}, @@ -2701,8 +2775,12 @@ static cmsFormattersFloat InputFormattersFloat[] = { { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, UnrollXYZDoubleToFloat}, { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, UnrollXYZFloatToFloat}, - { FLOAT_SH(1)|BYTES_SH(4), ANYPLANAR|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollFloatsToFloat}, - { FLOAT_SH(1)|BYTES_SH(0), ANYPLANAR|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollDoublesToFloat}, + { FLOAT_SH(1)|BYTES_SH(4), ANYPLANAR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA| + ANYCHANNELS|ANYSPACE, UnrollFloatsToFloat}, + + { FLOAT_SH(1)|BYTES_SH(0), ANYPLANAR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA| + ANYCHANNELS|ANYSPACE, UnrollDoublesToFloat}, + { FLOAT_SH(1)|BYTES_SH(2), ANYPLANAR|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollHalfToFloat} }; @@ -2754,8 +2832,11 @@ static cmsFormatters16 OutputFormatters16[] = { { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, PackLabDoubleFrom16}, { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, PackXYZDoubleFrom16}, - { FLOAT_SH(1)|BYTES_SH(0), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackDoubleFrom16}, - { FLOAT_SH(1)|BYTES_SH(4), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackFloatFrom16}, + + { FLOAT_SH(1)|BYTES_SH(0), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP| + ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackDoubleFrom16}, + { FLOAT_SH(1)|BYTES_SH(4), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP| + ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackFloatFrom16}, { FLOAT_SH(1)|BYTES_SH(2), ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackHalfFrom16}, { CHANNELS_SH(1)|BYTES_SH(1), ANYSPACE, Pack1Byte}, @@ -2836,12 +2917,10 @@ static cmsFormattersFloat OutputFormattersFloat[] = { { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, PackLabDoubleFromFloat}, { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, PackXYZDoubleFromFloat}, - { FLOAT_SH(1)|BYTES_SH(4), - ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackChunkyFloatsFromFloat }, - { FLOAT_SH(1)|BYTES_SH(4)|PLANAR_SH(1), ANYEXTRA|ANYCHANNELS|ANYSPACE, PackPlanarFloatsFromFloat}, - { FLOAT_SH(1)|BYTES_SH(0), - ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackChunkyDoublesFromFloat }, - { FLOAT_SH(1)|BYTES_SH(0)|PLANAR_SH(1), ANYEXTRA|ANYCHANNELS|ANYSPACE, PackPlanarDoublesFromFloat}, + { FLOAT_SH(1)|BYTES_SH(4), ANYPLANAR| + ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackFloatsFromFloat }, + { FLOAT_SH(1)|BYTES_SH(0), ANYPLANAR| + ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackDoublesFromFloat }, { FLOAT_SH(1)|BYTES_SH(2), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackHalfFromFloat }, diff --git a/testbed/testcms2.c b/testbed/testcms2.c index 110fe27..6e18dfd 100644 --- a/testbed/testcms2.c +++ b/testbed/testcms2.c @@ -3,22 +3,22 @@ // Little Color Management System // Copyright (c) 1998-2010 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"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the Software +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included in +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- @@ -72,9 +72,9 @@ static cmsUInt32Number SingleHit, MaxAllocated=0, TotalMemory=0; // I'm hidding the size before the block. This is a well-known technique and probably the blocks coming from // malloc are built in a way similar to that, but I do on my own to be portable. -typedef struct { - cmsUInt32Number KeepSize; - cmsContext WhoAllocated; +typedef struct { + cmsUInt32Number KeepSize; + cmsContext WhoAllocated; union { cmsUInt64Number HiSparc; @@ -86,12 +86,12 @@ typedef struct { } alignment; - + } _cmsMemoryBlock; #define SIZE_OF_MEM_HEADER (sizeof(_cmsMemoryBlock)) -// This is a fake thread descriptor used to check thread integrity. +// This is a fake thread descriptor used to check thread integrity. // Basically it returns a different threadID each time it is called. // Then the memory management replacement functions does check if each // free() is being called with same ContextID used on malloc() @@ -118,7 +118,7 @@ void* DebugMalloc(cmsContext ContextID, cmsUInt32Number size) if (TotalMemory > MaxAllocated) MaxAllocated = TotalMemory; - if (size > SingleHit) + if (size > SingleHit) SingleHit = size; blk = (_cmsMemoryBlock*) malloc(size + SIZE_OF_MEM_HEADER); @@ -135,7 +135,7 @@ static void DebugFree(cmsContext ContextID, void *Ptr) { _cmsMemoryBlock* blk; - + if (Ptr == NULL) { Die("NULL free (which is a no-op in C, but may be an clue of something going wrong)"); } @@ -165,7 +165,7 @@ void * DebugRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize) max_sz = blk -> KeepSize > NewSize ? NewSize : blk ->KeepSize; memmove(NewPtr, Ptr, max_sz); DebugFree(ContextID, Ptr); - + return NewPtr; } @@ -186,7 +186,7 @@ static cmsPluginMemHandler DebugMemHandler = {{ cmsPluginMagicNumber, 2000, cmsP static void FatalErrorQuit(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) { - Die(Text); + Die(Text); cmsUNUSED_PARAMETER(ContextID); cmsUNUSED_PARAMETER(ErrorCode); @@ -194,7 +194,7 @@ void FatalErrorQuit(cmsContext ContextID, cmsUInt32Number ErrorCode, const char } // Print a dot for gauging -static +static void Dot(void) { fprintf(stdout, "."); fflush(stdout); @@ -267,16 +267,16 @@ void Check(const char* Title, TestFn Fn) else { printf("FAIL!\n"); - if (SubTestBuffer[0]) + if (SubTestBuffer[0]) printf("%s: [%s]\n\t%s\n", Title, SubTestBuffer, ReasonToFailBuffer); else printf("%s:\n\t%s\n", Title, ReasonToFailBuffer); - if (SimultaneousErrors > 1) - printf("\tMore than one (%d) errors were reported\n", SimultaneousErrors); + if (SimultaneousErrors > 1) + printf("\tMore than one (%d) errors were reported\n", SimultaneousErrors); TotalFail++; - } + } fflush(stdout); } @@ -310,8 +310,8 @@ void DumpToneCurve(cmsToneCurve* gamma, const char* FileName) // ------------------------------------------------------------------------------------------------- -// Used to perform several checks. -// The space used is a clone of a well-known commercial +// Used to perform several checks. +// The space used is a clone of a well-known commercial // color space which I will name "Above RGB" static cmsHPROFILE Create_AboveRGB(void) @@ -322,13 +322,13 @@ cmsHPROFILE Create_AboveRGB(void) cmsCIExyYTRIPLE Primaries = {{0.64, 0.33, 1 }, {0.21, 0.71, 1 }, {0.15, 0.06, 1 }}; - + Curve[0] = Curve[1] = Curve[2] = cmsBuildGamma(DbgThread(), 2.19921875); cmsWhitePointFromTemp(&D65, 6504); hProfile = cmsCreateRGBProfileTHR(DbgThread(), &D65, &Primaries, Curve); cmsFreeToneCurve(Curve[0]); - + return hProfile; } @@ -387,7 +387,7 @@ cmsHPROFILE Create_CMYK_DeviceLink(void) Tab[0] = Curve; Tab[1] = Curve; Tab[2] = Curve; - Tab[3] = Curve; + Tab[3] = Curve; hProfile = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigCmykData, Tab); if (hProfile == NULL) return NULL; @@ -398,7 +398,7 @@ cmsHPROFILE Create_CMYK_DeviceLink(void) } -// Create a fake CMYK profile, without any other requeriment that being coarse CMYK. +// Create a fake CMYK profile, without any other requeriment that being coarse CMYK. // DONT USE THIS PROFILE FOR ANYTHING, IT IS USELESS BUT FOR TESTING PURPOSES. typedef struct { @@ -421,18 +421,18 @@ static cmsInt32Number ForwardSampler(register const cmsUInt16Number In[], cmsUInt16Number Out[], void* Cargo) { FakeCMYKParams* p = (FakeCMYKParams*) Cargo; - cmsFloat64Number rgb[3], cmyk[4]; + cmsFloat64Number rgb[3], cmyk[4]; cmsFloat64Number c, m, y, k; cmsDoTransform(p ->hLab2sRGB, In, rgb, 1); - + c = 1 - rgb[0]; m = 1 - rgb[1]; y = 1 - rgb[2]; k = (c < m ? cmsmin(c, y) : cmsmin(m, y)); - - // NONSENSE WARNING!: I'm doing this just because this is a test + + // NONSENSE WARNING!: I'm doing this just because this is a test // profile that may have ink limit up to 400%. There is no UCR here // so the profile is basically useless for anything but testing. @@ -451,7 +451,7 @@ static cmsInt32Number ReverseSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) { FakeCMYKParams* p = (FakeCMYKParams*) Cargo; - cmsFloat64Number c, m, y, k, rgb[3]; + cmsFloat64Number c, m, y, k, rgb[3]; c = In[0] / 65535.0; m = In[1] / 65535.0; @@ -463,18 +463,18 @@ cmsInt32Number ReverseSampler(register const cmsUInt16Number In[], register cmsU rgb[0] = Clip(1 - c); rgb[1] = Clip(1 - m); rgb[2] = Clip(1 - y); - } - else + } + else if (k == 1) { rgb[0] = rgb[1] = rgb[2] = 0; - } + } else { rgb[0] = Clip((1 - c) * (1 - k)); rgb[1] = Clip((1 - m) * (1 - k)); - rgb[2] = Clip((1 - y) * (1 - k)); - } + rgb[2] = Clip((1 - y) * (1 - k)); + } cmsDoTransform(p ->sRGB2Lab, rgb, Out, 1); return 1; @@ -524,24 +524,24 @@ cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB) CLUT = cmsStageAllocCLut16bit(ContextID, 17, 3, 4, NULL); if (CLUT == NULL) return 0; if (!cmsStageSampleCLut16bit(CLUT, ForwardSampler, &p, 0)) return 0; - - cmsPipelineInsertStage(BToA0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3)); + + cmsPipelineInsertStage(BToA0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3)); cmsPipelineInsertStage(BToA0, cmsAT_END, CLUT); cmsPipelineInsertStage(BToA0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 4)); - + if (!cmsWriteTag(hICC, cmsSigBToA0Tag, (void*) BToA0)) return 0; cmsPipelineFree(BToA0); - + AToB0 = cmsPipelineAlloc(ContextID, 4, 3); if (AToB0 == NULL) return 0; CLUT = cmsStageAllocCLut16bit(ContextID, 17, 4, 3, NULL); if (CLUT == NULL) return 0; if (!cmsStageSampleCLut16bit(CLUT, ReverseSampler, &p, 0)) return 0; - cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 4)); + cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 4)); cmsPipelineInsertStage(AToB0, cmsAT_END, CLUT); cmsPipelineInsertStage(AToB0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 3)); - + if (!cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) AToB0)) return 0; cmsPipelineFree(AToB0); @@ -554,7 +554,7 @@ cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB) cmsLinkTag(hICC, cmsSigBToA1Tag, cmsSigBToA0Tag); cmsLinkTag(hICC, cmsSigBToA2Tag, cmsSigBToA0Tag); - return hICC; + return hICC; } @@ -581,7 +581,7 @@ 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. +// 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) @@ -597,7 +597,7 @@ cmsInt32Number CreateTestProfiles(void) if (!OneVirtual(h, "aRGB profile", "aRGBlcms2.icc")) return 0; // ---- - + h = Create_Gray22(); if (!OneVirtual(h, "Gray profile", "graylcms2.icc")) return 0; @@ -610,7 +610,7 @@ cmsInt32Number CreateTestProfiles(void) h = Create_GrayLab(); if (!OneVirtual(h, "Gray Lab profile", "glablcms2.icc")) return 0; - + // ---- h = Create_CMYK_DeviceLink(); @@ -697,18 +697,18 @@ cmsInt32Number CheckBaseTypes(void) if (sizeof(cmsU8Fixed8Number) != 2) return 0; if (sizeof(cmsS15Fixed16Number) != 4) return 0; if (sizeof(cmsU16Fixed16Number) != 4) return 0; - + return 1; } // ------------------------------------------------------------------------------------------------- -// Are we little or big endian? From Harbison&Steele. +// Are we little or big endian? From Harbison&Steele. static cmsInt32Number CheckEndianess(void) { - cmsInt32Number BigEndian, IsOk; + cmsInt32Number BigEndian, IsOk; union { long l; char c[sizeof (long)]; @@ -771,9 +771,9 @@ cmsInt32Number CheckQuickFloorWord(void) // ------------------------------------------------------------------------------------------------- -// Precision stuff. +// Precision stuff. -// On 15.16 fixed point, this is the maximum we can obtain. Remember ICC profiles have storage limits on this number +// On 15.16 fixed point, this is the maximum we can obtain. Remember ICC profiles have storage limits on this number #define FIXED_PRECISION_15_16 (1.0 / 65535.0) // On 8.8 fixed point, that is the max we can obtain. @@ -803,7 +803,7 @@ cmsBool IsGoodVal(const char *title, cmsFloat64Number in, cmsFloat64Number out, static cmsBool IsGoodFixed15_16(const char *title, cmsFloat64Number in, cmsFloat64Number out) -{ +{ return IsGoodVal(title, in, out, FIXED_PRECISION_15_16); } @@ -913,7 +913,7 @@ void BuildTable(cmsInt32Number n, cmsUInt16Number Tab[], cmsBool Descending) // nNodesToCheck = number on nodes to check // Down = Create decreasing tables // Reverse = Check reverse interpolation -// max_err = max allowed error +// max_err = max allowed error static cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Number max_err) @@ -965,7 +965,7 @@ cmsInt32Number Check1DLERP2(void) static cmsInt32Number Check1DLERP3(void) { - return Check1D(3, FALSE, 1); + return Check1D(3, FALSE, 1); } @@ -1017,13 +1017,13 @@ static cmsInt32Number ExhaustiveCheck1DLERP(void) { cmsUInt32Number j; - + printf("\n"); for (j=10; j <= 4096; j++) { if ((j % 10) == 0) printf("%d \r", j); - if (!Check1D(j, FALSE, 1)) return 0; + if (!Check1D(j, FALSE, 1)) return 0; } printf("\rResult is "); @@ -1034,13 +1034,13 @@ static cmsInt32Number ExhaustiveCheck1DLERPDown(void) { cmsUInt32Number j; - + printf("\n"); for (j=10; j <= 4096; j++) { if ((j % 10) == 0) printf("%d \r", j); - if (!Check1D(j, TRUE, 1)) return 0; + if (!Check1D(j, TRUE, 1)) return 0; } @@ -1150,19 +1150,19 @@ cmsInt32Number Check3DinterpolationTetrahedral16(void) cmsInterpParams* p; cmsInt32Number i; cmsUInt16Number In[3], Out[3]; - cmsUInt16Number Table[] = { + cmsUInt16Number Table[] = { - 0, 0, 0, - 0, 0, 0xffff, + 0, 0, 0, + 0, 0, 0xffff, - 0, 0xffff, 0, - 0, 0xffff, 0xffff, + 0, 0xffff, 0, + 0, 0xffff, 0xffff, - 0xffff, 0, 0, - 0xffff, 0, 0xffff, + 0xffff, 0, 0, + 0xffff, 0, 0xffff, - 0xffff, 0xffff, 0, - 0xffff, 0xffff, 0xffff + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); @@ -1194,19 +1194,19 @@ cmsInt32Number Check3DinterpolationTrilinear16(void) cmsInterpParams* p; cmsInt32Number i; cmsUInt16Number In[3], Out[3]; - cmsUInt16Number Table[] = { + cmsUInt16Number Table[] = { - 0, 0, 0, - 0, 0, 0xffff, + 0, 0, 0, + 0, 0, 0xffff, - 0, 0xffff, 0, - 0, 0xffff, 0xffff, + 0, 0xffff, 0, + 0, 0xffff, 0xffff, - 0xffff, 0, 0, - 0xffff, 0, 0xffff, + 0xffff, 0, 0, + 0xffff, 0, 0xffff, - 0xffff, 0xffff, 0, - 0xffff, 0xffff, 0xffff + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); @@ -1258,16 +1258,16 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void) p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); MaxErr = 0.0; - for (r=0; r < 0xff; r++) - for (g=0; g < 0xff; g++) - for (b=0; b < 0xff; b++) + for (r=0; r < 0xff; r++) + for (g=0; g < 0xff; g++) + for (b=0; b < 0xff; b++) { In[0] = (cmsFloat32Number) r / 255.0F; In[1] = (cmsFloat32Number) g / 255.0F; In[2] = (cmsFloat32Number) b / 255.0F; - + p ->Interpolation.LerpFloat(In, Out, p); if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; @@ -1309,9 +1309,9 @@ cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void) p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); MaxErr = 0.0; - for (r=0; r < 0xff; r++) - for (g=0; g < 0xff; g++) - for (b=0; b < 0xff; b++) + for (r=0; r < 0xff; r++) + for (g=0; g < 0xff; g++) + for (b=0; b < 0xff; b++) { In[0] = (cmsFloat32Number) r / 255.0F; @@ -1342,26 +1342,26 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void) cmsInterpParams* p; cmsInt32Number r, g, b; cmsUInt16Number In[3], Out[3]; - cmsUInt16Number Table[] = { + cmsUInt16Number Table[] = { - 0, 0, 0, - 0, 0, 0xffff, + 0, 0, 0, + 0, 0, 0xffff, - 0, 0xffff, 0, - 0, 0xffff, 0xffff, + 0, 0xffff, 0, + 0, 0xffff, 0xffff, - 0xffff, 0, 0, - 0xffff, 0, 0xffff, + 0xffff, 0, 0, + 0xffff, 0, 0xffff, - 0xffff, 0xffff, 0, - 0xffff, 0xffff, 0xffff + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); - for (r=0; r < 0xff; r++) - for (g=0; g < 0xff; g++) - for (b=0; b < 0xff; b++) + for (r=0; r < 0xff; r++) + for (g=0; g < 0xff; g++) + for (b=0; b < 0xff; b++) { In[0] = (cmsUInt16Number) r ; In[1] = (cmsUInt16Number) g ; @@ -1374,7 +1374,7 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void) if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; } - + _cmsFreeInterpParams(p); return 1; @@ -1389,26 +1389,26 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void) cmsInterpParams* p; cmsInt32Number r, g, b; cmsUInt16Number In[3], Out[3]; - cmsUInt16Number Table[] = { + cmsUInt16Number Table[] = { - 0, 0, 0, - 0, 0, 0xffff, + 0, 0, 0, + 0, 0, 0xffff, - 0, 0xffff, 0, - 0, 0xffff, 0xffff, + 0, 0xffff, 0, + 0, 0xffff, 0xffff, - 0xffff, 0, 0, - 0xffff, 0, 0xffff, + 0xffff, 0, 0, + 0xffff, 0, 0xffff, - 0xffff, 0xffff, 0, - 0xffff, 0xffff, 0xffff + 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0xffff }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); - for (r=0; r < 0xff; r++) - for (g=0; g < 0xff; g++) - for (b=0; b < 0xff; b++) + for (r=0; r < 0xff; r++) + for (g=0; g < 0xff; g++) + for (b=0; b < 0xff; b++) { In[0] = (cmsUInt16Number) r ; In[1] = (cmsUInt16Number)g ; @@ -1422,7 +1422,7 @@ cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void) if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; } - + _cmsFreeInterpParams(p); return 1; @@ -1440,29 +1440,29 @@ cmsInt32Number CheckReverseInterpolation3x3(void) cmsFloat32Number Target[3], Result[3], Hint[3]; cmsFloat32Number err, max; cmsInt32Number i; - cmsUInt16Number Table[] = { + cmsUInt16Number Table[] = { - 0, 0, 0, // 0 0 0 - 0, 0, 0xffff, // 0 0 1 + 0, 0, 0, // 0 0 0 + 0, 0, 0xffff, // 0 0 1 - 0, 0xffff, 0, // 0 1 0 - 0, 0xffff, 0xffff, // 0 1 1 + 0, 0xffff, 0, // 0 1 0 + 0, 0xffff, 0xffff, // 0 1 1 - 0xffff, 0, 0, // 1 0 0 - 0xffff, 0, 0xffff, // 1 0 1 + 0xffff, 0, 0, // 1 0 0 + 0xffff, 0, 0xffff, // 1 0 1 - 0xffff, 0xffff, 0, // 1 1 0 - 0xffff, 0xffff, 0xffff, // 1 1 1 + 0xffff, 0xffff, 0, // 1 1 0 + 0xffff, 0xffff, 0xffff, // 1 1 1 }; - + Lut = cmsPipelineAlloc(DbgThread(), 3, 3); clut = cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table); cmsPipelineInsertStage(Lut, cmsAT_BEGIN, clut); - - Target[0] = 0; Target[1] = 0; Target[2] = 0; + + Target[0] = 0; Target[1] = 0; Target[2] = 0; Hint[0] = 0; Hint[1] = 0; Hint[2] = 0; cmsPipelineEvalReverseFloat(Target, Result, NULL, Lut); if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0){ @@ -1477,7 +1477,7 @@ cmsInt32Number CheckReverseInterpolation3x3(void) cmsFloat32Number in = i / 100.0F; - Target[0] = in; Target[1] = 0; Target[2] = 0; + Target[0] = in; Target[1] = 0; Target[2] = 0; cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut); err = fabsf(in - Result[0]); @@ -1501,39 +1501,39 @@ cmsInt32Number CheckReverseInterpolation4x3(void) cmsInt32Number i; // 4 -> 3, output gets 3 first channels copied - cmsUInt16Number Table[] = { + cmsUInt16Number Table[] = { 0, 0, 0, // 0 0 0 0 = ( 0, 0, 0) 0, 0, 0, // 0 0 0 1 = ( 0, 0, 0) - + 0, 0, 0xffff, // 0 0 1 0 = ( 0, 0, 1) 0, 0, 0xffff, // 0 0 1 1 = ( 0, 0, 1) - + 0, 0xffff, 0, // 0 1 0 0 = ( 0, 1, 0) 0, 0xffff, 0, // 0 1 0 1 = ( 0, 1, 0) - + 0, 0xffff, 0xffff, // 0 1 1 0 = ( 0, 1, 1) 0, 0xffff, 0xffff, // 0 1 1 1 = ( 0, 1, 1) 0xffff, 0, 0, // 1 0 0 0 = ( 1, 0, 0) 0xffff, 0, 0, // 1 0 0 1 = ( 1, 0, 0) - + 0xffff, 0, 0xffff, // 1 0 1 0 = ( 1, 0, 1) 0xffff, 0, 0xffff, // 1 0 1 1 = ( 1, 0, 1) - + 0xffff, 0xffff, 0, // 1 1 0 0 = ( 1, 1, 0) 0xffff, 0xffff, 0, // 1 1 0 1 = ( 1, 1, 0) - + 0xffff, 0xffff, 0xffff, // 1 1 1 0 = ( 1, 1, 1) 0xffff, 0xffff, 0xffff, // 1 1 1 1 = ( 1, 1, 1) }; - + Lut = cmsPipelineAlloc(DbgThread(), 4, 3); clut = cmsStageAllocCLut16bit(DbgThread(), 2, 4, 3, Table); cmsPipelineInsertStage(Lut, cmsAT_BEGIN, clut); - + // Check if the LUT is behaving as expected SubTest("4->3 feasibility"); for (i=0; i <= 100; i++) { @@ -1551,12 +1551,12 @@ cmsInt32Number CheckReverseInterpolation4x3(void) } SubTest("4->3 zero"); - Target[0] = 0; - Target[1] = 0; - Target[2] = 0; + Target[0] = 0; + Target[1] = 0; + Target[2] = 0; // This one holds the fixed K - Target[3] = 0; + Target[3] = 0; // This is our hint (which is a big lie in this case) Hint[0] = 0.1F; Hint[1] = 0.1F; Hint[2] = 0.1F; @@ -1575,7 +1575,7 @@ cmsInt32Number CheckReverseInterpolation4x3(void) cmsFloat32Number in = i / 100.0F; - Target[0] = in; Target[1] = 0; Target[2] = 0; + Target[0] = in; Target[1] = 0; Target[2] = 0; cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut); err = fabsf(in - Result[0]); @@ -1590,7 +1590,7 @@ cmsInt32Number CheckReverseInterpolation4x3(void) -// Check all interpolation. +// Check all interpolation. static cmsUInt16Number Fn8D1(cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, @@ -1678,7 +1678,7 @@ cmsInt32Number Sampler6D(register const cmsUInt16Number In[], Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], In[5], 0, 0, 6); return 1; - + cmsUNUSED_PARAMETER(Cargo); } @@ -1712,12 +1712,12 @@ cmsInt32Number Sampler8D(register const cmsUInt16Number In[], cmsUNUSED_PARAMETER(Cargo); } -static +static cmsBool CheckOne3D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3) { cmsUInt16Number In[3], Out1[3], Out2[3]; - In[0] = a1; In[1] = a2; In[2] = a3; + In[0] = a1; In[1] = a2; In[2] = a3; // This is the interpolated value cmsPipelineEval16(In, Out1, lut); @@ -1734,7 +1734,7 @@ cmsBool CheckOne3D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cms return TRUE; } -static +static cmsBool CheckOne4D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4) { cmsUInt16Number In[4], Out1[3], Out2[3]; @@ -1756,8 +1756,8 @@ cmsBool CheckOne4D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cms return TRUE; } -static -cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, +static +cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5) { cmsUInt16Number In[5], Out1[3], Out2[3]; @@ -1779,9 +1779,9 @@ cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, return TRUE; } -static -cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, - cmsUInt16Number a3, cmsUInt16Number a4, +static +cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, + cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6) { cmsUInt16Number In[6], Out1[3], Out2[3]; @@ -1804,9 +1804,9 @@ cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, } -static -cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, - cmsUInt16Number a3, cmsUInt16Number a4, +static +cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, + cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7) { @@ -1830,9 +1830,9 @@ cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, } -static -cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, - cmsUInt16Number a3, cmsUInt16Number a4, +static +cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, + cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8) { @@ -1870,14 +1870,14 @@ cmsInt32Number Check3Dinterp(void) // Check accuracy if (!CheckOne3D(lut, 0, 0, 0)) return 0; - if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne3D(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(lut, 0x0000, 0x0012, 0x0013)) return 0; + if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0; + if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0; cmsPipelineFree(lut); @@ -1899,14 +1899,14 @@ cmsInt32Number Check3DinterpGranular(void) // Check accuracy if (!CheckOne3D(lut, 0, 0, 0)) return 0; - if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne3D(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(lut, 0x0000, 0x0012, 0x0013)) return 0; + if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0; + if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0; cmsPipelineFree(lut); @@ -1928,14 +1928,14 @@ cmsInt32Number Check4Dinterp(void) // Check accuracy if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0; - if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne4D(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(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; cmsPipelineFree(lut); @@ -1959,14 +1959,14 @@ cmsInt32Number Check4DinterpGranular(void) // Check accuracy if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0; - if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne4D(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(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; cmsPipelineFree(lut); @@ -1989,14 +1989,14 @@ cmsInt32Number Check5DinterpGranular(void) // Check accuracy if (!CheckOne5D(lut, 0, 0, 0, 0, 0)) return 0; - if (!CheckOne5D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; + if (!CheckOne5D(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(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; cmsPipelineFree(lut); @@ -2018,14 +2018,14 @@ cmsInt32Number Check6DinterpGranular(void) // 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(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(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; cmsPipelineFree(lut); @@ -2047,14 +2047,14 @@ cmsInt32Number Check7DinterpGranular(void) // 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(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(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; cmsPipelineFree(lut); @@ -2077,14 +2077,14 @@ cmsInt32Number Check8DinterpGranular(void) // 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(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(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; cmsPipelineFree(lut); @@ -2105,7 +2105,7 @@ cmsInt32Number CheckLab2LCh(void) for (l=0; l <= 100; l += 10) { for (a=-128; a <= +128; a += 8) { - + for (b=-128; b <= 128; b += 8) { Lab.L = l; @@ -2116,7 +2116,7 @@ cmsInt32Number CheckLab2LCh(void) cmsLCh2Lab(&Lab2, &LCh); dist = cmsDeltaE(&Lab, &Lab2); - if (dist > Max) Max = dist; + if (dist > Max) Max = dist; } } } @@ -2200,7 +2200,7 @@ cmsInt32Number CheckLabV2encoding(void) cmsCIELab Lab; n2=0; - + for (j=0; j < 65535; j++) { Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; @@ -2228,14 +2228,14 @@ cmsInt32Number CheckLabV4encoding(void) cmsCIELab Lab; n2=0; - + for (j=0; j < 65535; j++) { Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; cmsLabEncoded2Float(&Lab, Inw); cmsFloat2LabEncoded(aw, &Lab); - + for (i=0; i < 3; i++) { if (aw[i] != j) { @@ -2257,7 +2257,7 @@ cmsInt32Number CheckTemp2CHRM(void) cmsInt32Number j; cmsFloat64Number d, v, Max = 0; cmsCIExyY White; - + for (j=4000; j < 25000; j++) { cmsWhitePointFromTemp(&White, j); @@ -2301,7 +2301,7 @@ cmsInt32Number CheckGammaCreation16(void) cmsFreeToneCurve(LinGamma); return 0; } - } + } if (!CheckGammaEstimation(LinGamma, 1.0)) return 0; @@ -2326,7 +2326,7 @@ cmsInt32Number CheckGammaCreationFlt(void) cmsFreeToneCurve(LinGamma); return 0; } - } + } if (!CheckGammaEstimation(LinGamma, 1.0)) return 0; cmsFreeToneCurve(LinGamma); @@ -2351,7 +2351,7 @@ cmsInt32Number CheckGammaFloat(cmsFloat64Number g) val = pow((cmsFloat64Number) in, g); Err = fabs( val - out); - if (Err > MaxErr) MaxErr = Err; + if (Err > MaxErr) MaxErr = Err; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); @@ -2362,17 +2362,17 @@ cmsInt32Number CheckGammaFloat(cmsFloat64Number g) return 1; } -static cmsInt32Number CheckGamma18(void) +static cmsInt32Number CheckGamma18(void) { return CheckGammaFloat(1.8); } -static cmsInt32Number CheckGamma22(void) +static cmsInt32Number CheckGamma22(void) { return CheckGammaFloat(2.2); } -static cmsInt32Number CheckGamma30(void) +static cmsInt32Number CheckGamma30(void) { return CheckGammaFloat(3.0); } @@ -2383,7 +2383,7 @@ static cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g) { cmsFloat32Number Values[1025]; - cmsToneCurve* Curve; + cmsToneCurve* Curve; cmsInt32Number i; cmsFloat32Number in, out; cmsFloat64Number val, Err; @@ -2404,7 +2404,7 @@ cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g) val = pow(in, g); Err = fabs(val - out); - if (Err > MaxErr) MaxErr = Err; + if (Err > MaxErr) MaxErr = Err; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); @@ -2416,17 +2416,17 @@ cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g) } -static cmsInt32Number CheckGamma18Table(void) +static cmsInt32Number CheckGamma18Table(void) { return CheckGammaFloatTable(1.8); } -static cmsInt32Number CheckGamma22Table(void) +static cmsInt32Number CheckGamma22Table(void) { return CheckGammaFloatTable(2.2); } -static cmsInt32Number CheckGamma30Table(void) +static cmsInt32Number CheckGamma30Table(void) { return CheckGammaFloatTable(3.0); } @@ -2436,7 +2436,7 @@ static cmsInt32Number CheckGammaWordTable(cmsFloat64Number g) { cmsUInt16Number Values[1025]; - cmsToneCurve* Curve; + cmsToneCurve* Curve; cmsInt32Number i; cmsFloat32Number in, out; cmsFloat64Number val, Err; @@ -2457,7 +2457,7 @@ cmsInt32Number CheckGammaWordTable(cmsFloat64Number g) val = pow(in, g); Err = fabs(val - out); - if (Err > MaxErr) MaxErr = Err; + if (Err > MaxErr) MaxErr = Err; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); @@ -2468,17 +2468,17 @@ cmsInt32Number CheckGammaWordTable(cmsFloat64Number g) return 1; } -static cmsInt32Number CheckGamma18TableWord(void) +static cmsInt32Number CheckGamma18TableWord(void) { return CheckGammaWordTable(1.8); } -static cmsInt32Number CheckGamma22TableWord(void) +static cmsInt32Number CheckGamma22TableWord(void) { return CheckGammaWordTable(2.2); } -static cmsInt32Number CheckGamma30TableWord(void) +static cmsInt32Number CheckGamma30TableWord(void) { return CheckGammaWordTable(3.0); } @@ -2497,10 +2497,10 @@ cmsInt32Number CheckJointCurves(void) Result = cmsJoinToneCurve(DbgThread(), Forward, Reverse, 256); - cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); + cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); - cmsFreeToneCurve(Result); + cmsFreeToneCurve(Result); if (!rc) Fail("Joining same curve twice does not result in a linear ramp"); @@ -2536,7 +2536,7 @@ cmsInt32Number CheckJointCurvesDescending(void) cmsToneCurve *Forward, *Reverse, *Result; cmsInt32Number i, rc; - Forward = cmsBuildGamma(DbgThread(), 2.2); + Forward = cmsBuildGamma(DbgThread(), 2.2); // Fake the curve to be table-based @@ -2544,15 +2544,15 @@ cmsInt32Number CheckJointCurvesDescending(void) Forward ->Table16[i] = 0xffff - Forward->Table16[i]; Forward ->Segments[0].Type = 0; - Reverse = cmsReverseToneCurve(Forward); - + Reverse = cmsReverseToneCurve(Forward); + Result = cmsJoinToneCurve(DbgThread(), Reverse, Reverse, 256); - - cmsFreeToneCurve(Forward); - cmsFreeToneCurve(Reverse); + + cmsFreeToneCurve(Forward); + cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); - cmsFreeToneCurve(Result); + cmsFreeToneCurve(Result); return rc; } @@ -2564,7 +2564,7 @@ cmsInt32Number CheckFToneCurvePoint(cmsToneCurve* c, cmsUInt16Number Point, cmsI cmsInt32Number Result; Result = cmsEvalToneCurve16(c, Point); - + return (abs(Value - Result) < 2); } @@ -2573,7 +2573,7 @@ cmsInt32Number CheckReverseDegenerated(void) { cmsToneCurve* p, *g; cmsUInt16Number Tab[16]; - + Tab[0] = 0; Tab[1] = 0; Tab[2] = 0; @@ -2593,7 +2593,7 @@ cmsInt32Number CheckReverseDegenerated(void) p = cmsBuildTabulatedToneCurve16(DbgThread(), 16, Tab); g = cmsReverseToneCurve(p); - + // Now let's check some points if (!CheckFToneCurvePoint(g, 0x5555, 0x5555)) return 0; if (!CheckFToneCurvePoint(g, 0x7777, 0x7777)) return 0; @@ -2659,7 +2659,7 @@ cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2) cmsUInt16Number wValIn; - wValIn = _cmsQuantizeVal(i, 256); + wValIn = _cmsQuantizeVal(i, 256); Tab[i] = cmsEvalToneCurve16(g2, cmsEvalToneCurve16(g1, wValIn)); } @@ -2675,10 +2675,10 @@ cmsInt32Number CheckJointFloatCurves_sRGB(void) Forward = Build_sRGBGamma(); Reverse = cmsReverseToneCurve(Forward); Result = CombineGammaFloat(Forward, Reverse); - cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); + cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); - cmsFreeToneCurve(Result); + cmsFreeToneCurve(Result); return rc; } @@ -2692,10 +2692,10 @@ cmsInt32Number CheckJoint16Curves_sRGB(void) Forward = Build_sRGBGamma(); Reverse = cmsReverseToneCurve(Forward); Result = CombineGamma16(Forward, Reverse); - cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); + cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); - cmsFreeToneCurve(Result); + cmsFreeToneCurve(Result); return rc; } @@ -2709,15 +2709,15 @@ cmsInt32Number CheckJointCurvesSShaped(void) cmsToneCurve *Forward, *Reverse, *Result; cmsInt32Number rc; - Forward = cmsBuildParametricToneCurve(DbgThread(), 108, &p); + Forward = cmsBuildParametricToneCurve(DbgThread(), 108, &p); Reverse = cmsReverseToneCurve(Forward); Result = cmsJoinToneCurve(DbgThread(), Forward, Forward, 4096); - cmsFreeToneCurve(Forward); - cmsFreeToneCurve(Reverse); + cmsFreeToneCurve(Forward); + cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); - cmsFreeToneCurve(Result); + cmsFreeToneCurve(Result); return rc; } @@ -2759,7 +2759,7 @@ cmsFloat32Number IEC61966_3(cmsFloat32Number x, const cmsFloat64Number Params[]) if (x >= -Params[2] / Params[1]) { - e = Params[1]*x + Params[2]; + e = Params[1]*x + Params[2]; if (e > 0) Val = pow(e, Params[0]) + Params[3]; @@ -2805,7 +2805,7 @@ cmsFloat32Number param_5(cmsFloat32Number x, const cmsFloat64Number Params[]) Val = pow(e, Params[0]) + Params[5]; else Val = 0; - } + } else Val = x*Params[3] + Params[6]; @@ -2816,9 +2816,9 @@ static cmsFloat32Number param_6(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number e, Val; - + e = Params[1]*x + Params[2]; - if (e > 0) + if (e > 0) Val = pow(e, Params[0]) + Params[3]; else Val = 0; @@ -2886,8 +2886,8 @@ cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type goto Error; sprintf(InverseText, "Inverse %s", Name); - if (!IsGoodVal(InverseText, y_fn, y_param2, FIXED_PRECISION_15_16)) - goto Error; + if (!IsGoodVal(InverseText, y_fn, y_param2, FIXED_PRECISION_15_16)) + goto Error; } cmsFreeToneCurve(tc); @@ -2907,7 +2907,7 @@ cmsInt32Number CheckParametricToneCurves(void) cmsFloat64Number Params[10]; // 1) X = Y ^ Gamma - + Params[0] = 2.2; if (!CheckSingleParametric("Gamma", Gamma, 1, Params)) return 0; @@ -2930,7 +2930,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[1] = 1.5; Params[2] = -0.5; Params[3] = 0.3; - + if (!CheckSingleParametric("IEC 61966-3", IEC61966_3, 3, Params)) return 0; @@ -2942,11 +2942,11 @@ cmsInt32Number CheckParametricToneCurves(void) Params[1] = 1. / 1.055; Params[2] = 0.055 / 1.055; Params[3] = 1. / 12.92; - Params[4] = 0.04045; + Params[4] = 0.04045; if (!CheckSingleParametric("IEC 61966-2.1", IEC61966_21, 4, Params)) return 0; - + // 5) Y = (aX + b)^Gamma + e | X >= d // Y = cX + f | else @@ -2957,7 +2957,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[4] = 0.1; Params[5] = 0.5; Params[6] = 0.2; - + if (!CheckSingleParametric("param_5", param_5, 5, Params)) return 0; // 6) Y = (aX + b) ^ Gamma + c @@ -2966,7 +2966,7 @@ cmsInt32Number CheckParametricToneCurves(void) Params[1] = 0.7; Params[2] = 0.2; Params[3] = 0.3; - + if (!CheckSingleParametric("param_6", param_6, 6, Params)) return 0; // 7) Y = a * log (b * X^Gamma + c) + d @@ -2979,8 +2979,8 @@ cmsInt32Number CheckParametricToneCurves(void) if (!CheckSingleParametric("param_7", param_7, 7, Params)) return 0; - // 8) Y = a * b ^ (c*X+d) + e - + // 8) Y = a * b ^ (c*X+d) + e + Params[0] = 0.9; Params[1] = 0.9; Params[2] = 1.02; @@ -3007,7 +3007,7 @@ cmsInt32Number CheckLUTcreation(void) cmsPipeline* lut; cmsPipeline* lut2; cmsInt32Number n1, n2; - + lut = cmsPipelineAlloc(DbgThread(), 1, 1); n1 = cmsPipelineStageCount(lut); lut2 = cmsPipelineDup(lut); @@ -3024,8 +3024,8 @@ static void AddIdentityMatrix(cmsPipeline* lut) { const cmsFloat64Number Identity[] = { 1, 0, 0, - 0, 1, 0, - 0, 0, 1, + 0, 1, 0, + 0, 0, 1, 0, 0, 0 }; cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocMatrix(DbgThread(), 3, 3, Identity, NULL)); @@ -3035,18 +3035,18 @@ void AddIdentityMatrix(cmsPipeline* lut) static void AddIdentityCLUTfloat(cmsPipeline* lut) { - const cmsFloat32Number Table[] = { + const cmsFloat32Number Table[] = { - 0, 0, 0, + 0, 0, 0, 0, 0, 1.0, - 0, 1.0, 0, + 0, 1.0, 0, 0, 1.0, 1.0, - 1.0, 0, 0, + 1.0, 0, 0, 1.0, 0, 1.0, - 1.0, 1.0, 0, + 1.0, 1.0, 0, 1.0, 1.0, 1.0 }; @@ -3057,21 +3057,21 @@ void AddIdentityCLUTfloat(cmsPipeline* lut) static void AddIdentityCLUT16(cmsPipeline* lut) { - const cmsUInt16Number Table[] = { + const cmsUInt16Number Table[] = { - 0, 0, 0, + 0, 0, 0, 0, 0, 0xffff, - 0, 0xffff, 0, + 0, 0xffff, 0, 0, 0xffff, 0xffff, - 0xffff, 0, 0, + 0xffff, 0, 0, 0xffff, 0, 0xffff, - 0xffff, 0xffff, 0, + 0xffff, 0xffff, 0, 0xffff, 0xffff, 0xffff }; - + cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table)); } @@ -3079,7 +3079,7 @@ void AddIdentityCLUT16(cmsPipeline* lut) // Create a 3 fn identity curves -static +static void Add3GammaCurves(cmsPipeline* lut, cmsFloat64Number Curve) { cmsToneCurve* id = cmsBuildGamma(DbgThread(), Curve); @@ -3090,7 +3090,7 @@ void Add3GammaCurves(cmsPipeline* lut, cmsFloat64Number Curve) id3[2] = id; cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, id3)); - + cmsFreeToneCurve(id); } @@ -3134,7 +3134,7 @@ cmsInt32Number Check16LUT(cmsPipeline* lut) cmsUInt16Number Inw[3], Outw[3]; n2=0; - + for (j=0; j < 65535; j++) { cmsInt32Number aw[3]; @@ -3162,13 +3162,13 @@ cmsInt32Number Check16LUT(cmsPipeline* lut) static cmsInt32Number CheckStagesLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages) { - + cmsInt32Number nInpChans, nOutpChans, nStages; nInpChans = cmsPipelineInputChannels(lut); nOutpChans = cmsPipelineOutputChannels(lut); nStages = cmsPipelineStageCount(lut); - + return (nInpChans == 3) && (nOutpChans == 3) && (nStages == ExpectedStages); } @@ -3280,7 +3280,7 @@ cmsInt32Number Check5StageLUT(void) Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); - + return CheckFullLUT(lut, 5); } @@ -3295,7 +3295,7 @@ cmsInt32Number Check5Stage16LUT(void) Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); - + return CheckFullLUT(lut, 5); } @@ -3310,7 +3310,7 @@ cmsInt32Number Check6StageLUT(void) Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); - + return CheckFullLUT(lut, 6); } @@ -3325,7 +3325,7 @@ cmsInt32Number Check6Stage16LUT(void) Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); - + return CheckFullLUT(lut, 6); } @@ -3436,7 +3436,7 @@ cmsInt32Number CheckNamedColorLUT(void) // -------------------------------------------------------------------------------------------- -// A lightweight test of multilocalized unicode structures. +// A lightweight test of multilocalized unicode structures. static cmsInt32Number CheckMLU(void) @@ -3448,7 +3448,7 @@ cmsInt32Number CheckMLU(void) cmsHPROFILE h= NULL; // Allocate a MLU structure, no preferred size - mlu = cmsMLUalloc(DbgThread(), 0); + mlu = cmsMLUalloc(DbgThread(), 0); // Add some localizations cmsMLUsetWide(mlu, "en", "US", L"Hello, world"); @@ -3466,11 +3466,11 @@ cmsInt32Number CheckMLU(void) cmsMLUgetASCII(mlu, "es", "ES", Buffer, 256); if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0; - + cmsMLUgetASCII(mlu, "fr", "FR", Buffer, 256); if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0; - + cmsMLUgetASCII(mlu, "ca", "CA", Buffer, 256); if (strcmp(Buffer, "Hola, mon") != 0) rc = 0; @@ -3481,13 +3481,13 @@ cmsInt32Number CheckMLU(void) cmsMLUfree(mlu); // Now for performance, allocate an empty struct - mlu = cmsMLUalloc(DbgThread(), 0); + mlu = cmsMLUalloc(DbgThread(), 0); // Fill it with several thousands of different lenguages for (i=0; i < 4096; i++) { char Lang[3]; - + Lang[0] = (char) (i % 255); Lang[1] = (char) (i / 255); Lang[2] = 0; @@ -3506,7 +3506,7 @@ cmsInt32Number CheckMLU(void) for (i=0; i < 4096; i++) { char Lang[3]; - + Lang[0] = (char)(i % 255); Lang[1] = (char)(i / 255); Lang[2] = 0; @@ -3517,20 +3517,20 @@ cmsInt32Number CheckMLU(void) if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; } } - if (rc == 0) + if (rc == 0) Fail("Unexpected string '%s'", Buffer2); // Check profile IO h = cmsOpenProfileFromFileTHR(DbgThread(), "mlucheck.icc", "w"); - + cmsSetProfileVersion(h, 4.3); cmsWriteTag(h, cmsSigProfileDescriptionTag, mlu2); cmsCloseProfile(h); cmsMLUfree(mlu2); - + h = cmsOpenProfileFromFileTHR(DbgThread(), "mlucheck.icc", "r"); mlu3 = cmsReadTag(h, cmsSigProfileDescriptionTag); @@ -3540,7 +3540,7 @@ cmsInt32Number CheckMLU(void) for (i=0; i < 4096; i++) { char Lang[3]; - + Lang[0] = (char) (i % 255); Lang[1] = (char) (i / 255); Lang[2] = 0; @@ -3695,10 +3695,10 @@ void CheckSingleFormatter16(cmsUInt32Number Type, const char* Text) for (j=0; j < 5; j++) { - for (i=0; i < nChannels; i++) { + for (i=0; i < nChannels; i++) { Values[i] = (cmsUInt16Number) (i+j); // For 8-bit - if (bytes == 1) + if (bytes == 1) Values[i] <<= 8; } @@ -3707,19 +3707,19 @@ void CheckSingleFormatter16(cmsUInt32Number Type, const char* Text) f.Fmt16(&info, Values, Buffer, 1); for (i=0; i < nChannels; i++) { - if (bytes == 1) + if (bytes == 1) Values[i] >>= 8; if (Values[i] != i+j) { - Fail("%s failed", Text); + Fail("%s failed", Text); FormatterFailed = TRUE; // Useful for debug - for (i=0; i < nChannels; i++) { + for (i=0; i < nChannels; i++) { Values[i] = (cmsUInt16Number) (i+j); // For 8-bit - if (bytes == 1) + if (bytes == 1) Values[i] <<= 8; } @@ -3872,20 +3872,26 @@ cmsInt32Number CheckFormatters16(void) C( TYPE_HSV_16 ); C( TYPE_HSV_16_PLANAR ); C( TYPE_HSV_16_SE ); - + C( TYPE_XYZ_FLT ); C( TYPE_Lab_FLT ); C( TYPE_GRAY_FLT ); C( TYPE_RGB_FLT ); + C( TYPE_BGR_FLT ); C( TYPE_CMYK_FLT ); C( TYPE_XYZA_FLT ); C( TYPE_LabA_FLT ); C( TYPE_RGBA_FLT ); + C( TYPE_ARGB_FLT ); + C( TYPE_BGRA_FLT ); + C( TYPE_ABGR_FLT ); + C( TYPE_XYZ_DBL ); C( TYPE_Lab_DBL ); C( TYPE_GRAY_DBL ); C( TYPE_RGB_DBL ); + C( TYPE_BGR_DBL ); C( TYPE_CMYK_DBL ); C( TYPE_LabV2_8 ); @@ -3934,7 +3940,7 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text) for (j=0; j < 5; j++) { - for (i=0; i < nChannels; i++) { + for (i=0; i < nChannels; i++) { Values[i] = (cmsFloat32Number) (i+j); } @@ -3948,11 +3954,11 @@ void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text) if (delta > 0.000000001) { - Fail("%s failed", Text); + Fail("%s failed", Text); FormatterFailed = TRUE; // Useful for debug - for (i=0; i < nChannels; i++) { + for (i=0; i < nChannels; i++) { Values[i] = (cmsFloat32Number) (i+j); } @@ -3971,23 +3977,29 @@ cmsInt32Number CheckFormattersFloat(void) { FormatterFailed = FALSE; - C( TYPE_XYZ_FLT ); + C( TYPE_XYZ_FLT ); C( TYPE_Lab_FLT ); C( TYPE_GRAY_FLT ); C( TYPE_RGB_FLT ); + C( TYPE_BGR_FLT ); C( TYPE_CMYK_FLT ); - // User C( TYPE_XYZA_FLT ); C( TYPE_LabA_FLT ); C( TYPE_RGBA_FLT ); + C( TYPE_ARGB_FLT ); + C( TYPE_BGRA_FLT ); + C( TYPE_ABGR_FLT ); + C( TYPE_XYZ_DBL ); C( TYPE_Lab_DBL ); C( TYPE_GRAY_DBL ); C( TYPE_RGB_DBL ); + C( TYPE_BGR_DBL ); C( TYPE_CMYK_DBL ); + C( TYPE_GRAY_HALF_FLT ); C( TYPE_RGB_HALF_FLT ); C( TYPE_CMYK_HALF_FLT ); @@ -3998,6 +4010,31 @@ cmsInt32Number CheckFormattersFloat(void) #undef C +// Check half float +#define my_isfinite(x) ((x) != (x)) +static +cmsInt32Number CheckFormattersHalf(void) +{ + int i, j; + + + for (i=0; i < 0xffff; i++) { + + cmsFloat32Number f = _cmsHalf2Float((cmsUInt16Number) i); + + if (!my_isfinite(f)) { + + j = _cmsFloat2Half(f); + + if (i != j) { + Fail("%d != %d in Half float support!\n", i, j); + return 0; + } + } + } + + return 1; +} static cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Number G, cmsUInt16Number B, cmsUInt16Number Ro, cmsUInt16Number Go, cmsUInt16Number Bo) @@ -4046,7 +4083,7 @@ cmsInt32Number CheckChangeBufferFormat(void) cmsCloseProfile(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; @@ -4063,7 +4100,7 @@ cmsInt32Number CheckChangeBufferFormat(void) if (!CheckOneRGB_double(xform, 0, 0.9, 1, 0, 0.9, 1)) return 0; cmsDeleteTransform(xform); - + return 1; } @@ -4075,14 +4112,14 @@ cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignatu { cmsCIEXYZ XYZ, *Pt; - + switch (Pass) { case 1: XYZ.X = 1.0; XYZ.Y = 1.1; XYZ.Z = 1.2; return cmsWriteTag(hProfile, tag, &XYZ); - + case 2: Pt = cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; @@ -4110,12 +4147,12 @@ cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna rc = cmsWriteTag(hProfile, tag, g); cmsFreeToneCurve(g); return rc; - + case 2: Pt = cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; return cmsIsToneCurveLinear(Pt); - + default: return 0; } @@ -4128,7 +4165,7 @@ cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat cmsInt32Number rc; char Buffer[256]; - + switch (Pass) { case 1: @@ -4137,13 +4174,13 @@ cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat rc = cmsWriteTag(hProfile, tag, m); cmsMLUfree(m); return rc; - + case 2: Pt = cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; cmsMLUgetASCII(Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256); return strcmp(Buffer, "Test test") == 0; - + default: return 0; } @@ -4156,13 +4193,13 @@ cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna cmsICCData d = { 1, 0, { '?' }}; cmsInt32Number rc; - + switch (Pass) { case 1: rc = cmsWriteTag(hProfile, tag, &d); return rc; - + case 2: Pt = cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; @@ -4178,13 +4215,13 @@ static cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsTagSignature *Pt, Holder; - + switch (Pass) { case 1: Holder = cmsSigPerceptualReferenceMediumGamut; return cmsWriteTag(hProfile, tag, &Holder); - + case 2: Pt = cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; @@ -4204,7 +4241,7 @@ cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagS switch (Pass) { case 1: - + Holder.tm_hour = 1; Holder.tm_min = 2; Holder.tm_sec = 3; @@ -4212,13 +4249,13 @@ cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagS Holder.tm_mon = 5; Holder.tm_year = 2009 - 1900; return cmsWriteTag(hProfile, tag, &Holder); - + case 2: Pt = cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; - return (Pt ->tm_hour == 1 && - Pt ->tm_min == 2 && + return (Pt ->tm_hour == 1 && + Pt ->tm_min == 2 && Pt ->tm_sec == 3 && Pt ->tm_mday == 4 && Pt ->tm_mon == 5 && @@ -4317,7 +4354,7 @@ cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(DbgThread(), 3)); cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocIdentityCLut(DbgThread(), 3)); cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocIdentityCurves(DbgThread(), 3)); - + rc = cmsWriteTag(hProfile, tag, Lut); cmsPipelineFree(Lut); return rc; @@ -4343,9 +4380,9 @@ cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSigna switch (Pass) { - case 1: + case 1: return cmsWriteTag(hProfile, tag, CHAD); - + case 2: Pt = cmsReadTag(hProfile, tag); @@ -4369,9 +4406,9 @@ cmsInt32Number CheckChromaticity(cmsInt32Number Pass, cmsHPROFILE hProfile, cms switch (Pass) { - case 1: + case 1: return cmsWriteTag(hProfile, tag, &c); - + case 2: Pt = cmsReadTag(hProfile, tag); @@ -4399,10 +4436,10 @@ cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cm switch (Pass) { - case 1: + case 1: for (i=0; i < cmsMAXCHANNELS; i++) c[i] = (cmsUInt8Number) (cmsMAXCHANNELS - i - 1); return cmsWriteTag(hProfile, tag, c); - + case 2: Pt = cmsReadTag(hProfile, tag); @@ -4425,7 +4462,7 @@ cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsT switch (Pass) { - case 1: + case 1: m.Backing.X = 0.1; m.Backing.Y = 0.2; m.Backing.Z = 0.3; @@ -4434,7 +4471,7 @@ cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsT m.IlluminantType = cmsILLUMINANT_TYPE_D50; m.Observer = 1; return cmsWriteTag(hProfile, tag, &m); - + case 2: Pt = cmsReadTag(hProfile, tag); @@ -4465,24 +4502,24 @@ cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSign switch (Pass) { - case 1: + case 1: m.Ucr = cmsBuildGamma(DbgThread(), 2.4); m.Bg = cmsBuildGamma(DbgThread(), -2.2); m.Desc = cmsMLUalloc(DbgThread(), 1); - cmsMLUsetASCII(m.Desc, cmsNoLanguage, cmsNoCountry, "test UCR/BG"); + cmsMLUsetASCII(m.Desc, cmsNoLanguage, cmsNoCountry, "test UCR/BG"); rc = cmsWriteTag(hProfile, tag, &m); cmsMLUfree(m.Desc); cmsFreeToneCurve(m.Bg); cmsFreeToneCurve(m.Ucr); return rc; - + case 2: Pt = cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; cmsMLUgetASCII(Pt ->Desc, cmsNoLanguage, cmsNoCountry, Buffer, 256); - if (strcmp(Buffer, "test UCR/BG") != 0) return 0; + if (strcmp(Buffer, "test UCR/BG") != 0) return 0; return 1; default: @@ -4500,41 +4537,41 @@ cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSi switch (Pass) { - case 1: + case 1: mlu = cmsMLUalloc(DbgThread(), 5); cmsMLUsetWide(mlu, "PS", "nm", L"test postscript"); cmsMLUsetWide(mlu, "PS", "#0", L"perceptual"); cmsMLUsetWide(mlu, "PS", "#1", L"relative_colorimetric"); cmsMLUsetWide(mlu, "PS", "#2", L"saturation"); - cmsMLUsetWide(mlu, "PS", "#3", L"absolute_colorimetric"); + cmsMLUsetWide(mlu, "PS", "#3", L"absolute_colorimetric"); rc = cmsWriteTag(hProfile, tag, mlu); cmsMLUfree(mlu); return rc; - + case 2: mlu = (cmsMLU*) cmsReadTag(hProfile, tag); if (mlu == NULL) return 0; - + cmsMLUgetASCII(mlu, "PS", "nm", Buffer, 256); if (strcmp(Buffer, "test postscript") != 0) return 0; - + cmsMLUgetASCII(mlu, "PS", "#0", Buffer, 256); if (strcmp(Buffer, "perceptual") != 0) return 0; - + cmsMLUgetASCII(mlu, "PS", "#1", Buffer, 256); if (strcmp(Buffer, "relative_colorimetric") != 0) return 0; - + cmsMLUgetASCII(mlu, "PS", "#2", Buffer, 256); if (strcmp(Buffer, "saturation") != 0) return 0; - + cmsMLUgetASCII(mlu, "PS", "#3", Buffer, 256); if (strcmp(Buffer, "absolute_colorimetric") != 0) return 0; return 1; @@ -4569,7 +4606,7 @@ cmsToneCurve *CreateSegmentedCurve(void) Seg[2].Params[0] = 1; Seg[2].Params[1] = 0; Seg[2].Params[2] = 0; - Seg[2].Params[3] = 0; + Seg[2].Params[3] = 0; Seg[2].x0 = 1; Seg[2].x1 = 1E22F; @@ -4586,10 +4623,10 @@ cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat switch (Pass) { - case 1: + case 1: Lut = cmsPipelineAlloc(DbgThread(), 3, 3); - + cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4(DbgThread())); cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV4ToV2(DbgThread())); AddIdentityCLUTfloat(Lut); @@ -4597,14 +4634,14 @@ cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignat G[0] = G[1] = G[2] = CreateSegmentedCurve(); cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, G)); cmsFreeToneCurve(G[0]); - + rc = cmsWriteTag(hProfile, tag, Lut); cmsPipelineFree(Lut); return rc; - + case 2: Pt = cmsReadTag(hProfile, tag); - if (Pt == NULL) return 0; + if (Pt == NULL) return 0; return CheckFloatLUT(Pt); default: @@ -4618,11 +4655,11 @@ cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag { cmsScreening *Pt, sc; cmsInt32Number rc; - + switch (Pass) { - case 1: - + case 1: + sc.Flag = 0; sc.nChannels = 1; sc.Channels[0].Frequency = 2.0; @@ -4631,7 +4668,7 @@ cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTag rc = cmsWriteTag(hProfile, tag, &sc); return rc; - + case 2: Pt = cmsReadTag(hProfile, tag); @@ -4655,12 +4692,12 @@ cmsBool CheckOneStr(cmsMLU* mlu, cmsInt32Number n) { char Buffer[256], Buffer2[256]; - + cmsMLUgetASCII(mlu, "en", "US", Buffer, 255); sprintf(Buffer2, "Hello, world %d", n); if (strcmp(Buffer, Buffer2) != 0) return FALSE; - + cmsMLUgetASCII(mlu, "es", "ES", Buffer, 255); sprintf(Buffer2, "Hola, mundo %d", n); if (strcmp(Buffer, Buffer2) != 0) return FALSE; @@ -4720,7 +4757,7 @@ cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfil s ->seq[2].attributes = cmsTransparency|cmsGlossy; #endif - if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, s)) return 0; + if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, s)) return 0; cmsFreeProfileSequenceDescription(s); return 1; @@ -4788,7 +4825,7 @@ cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProf 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"); - if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, s)) return 0; + if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, s)) return 0; cmsFreeProfileSequenceDescription(s); return 1; @@ -4824,7 +4861,7 @@ cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProf switch (Pass) { - case 1: + case 1: s.IlluminantType = 1; s.IlluminantXYZ.X = 0.1; s.IlluminantXYZ.Y = 0.2; @@ -4833,7 +4870,7 @@ cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProf s.SurroundXYZ.Y = 0.5; s.SurroundXYZ.Z = 0.6; - if (!cmsWriteTag(hProfile, cmsSigViewingConditionsTag, &s)) return 0; + if (!cmsWriteTag(hProfile, cmsSigViewingConditionsTag, &s)) return 0; return 1; case 2: @@ -4863,15 +4900,15 @@ cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsToneCurve* Curves[3]; cmsToneCurve** PtrCurve; - + switch (Pass) { - case 1: + case 1: Curves[0] = cmsBuildGamma(DbgThread(), 1.1); Curves[1] = cmsBuildGamma(DbgThread(), 2.2); Curves[2] = cmsBuildGamma(DbgThread(), 3.4); - if (!cmsWriteTag(hProfile, cmsSigVcgtTag, Curves)) return 0; + if (!cmsWriteTag(hProfile, cmsSigVcgtTag, Curves)) return 0; cmsFreeToneCurveTriple(Curves); return 1; @@ -4901,13 +4938,13 @@ cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile) const cmsDICTentry* e; switch (Pass) { - case 1: + case 1: hDict = cmsDictAlloc(DbgThread()); cmsDictAddEntry(hDict, L"Name0", NULL, NULL, NULL); cmsDictAddEntry(hDict, L"Name1", L"", NULL, NULL); cmsDictAddEntry(hDict, L"Name", L"String", NULL, NULL); cmsDictAddEntry(hDict, L"Name2", L"12", NULL, NULL); - if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; + if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; cmsDictFree(hDict); return 1; @@ -4919,14 +4956,14 @@ cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile) e = cmsDictGetEntryList(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(e); + e = cmsDictNextEntry(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(e); + e = cmsDictNextEntry(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(e); + e = cmsDictNextEntry(e); if (memcmp(e ->Name, L"Name0", sizeof(wchar_t) * 5) != 0) return 0; if (e ->Value != NULL) return 0; return 1; @@ -4948,13 +4985,13 @@ cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) cmsMLU* DisplayName; char Buffer[256]; cmsInt32Number rc = 1; - + switch (Pass) { - case 1: + case 1: hDict = cmsDictAlloc(DbgThread()); - DisplayName = cmsMLUalloc(DbgThread(), 0); + DisplayName = cmsMLUalloc(DbgThread(), 0); cmsMLUsetWide(DisplayName, "en", "US", L"Hello, world"); cmsMLUsetWide(DisplayName, "es", "ES", L"Hola, mundo"); @@ -4965,9 +5002,9 @@ cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) cmsMLUfree(DisplayName); cmsDictAddEntry(hDict, L"Name2", L"12", NULL, NULL); - if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; + if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; cmsDictFree(hDict); - + return 1; @@ -4979,9 +5016,9 @@ cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) e = cmsDictGetEntryList(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(e); + e = cmsDictNextEntry(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; + if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0; cmsMLUgetASCII(e->DisplayName, "en", "US", Buffer, 256); if (strcmp(Buffer, "Hello, world") != 0) rc = 0; @@ -5015,7 +5052,7 @@ cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile) switch (Pass) { - case 1: + case 1: return cmsWriteRawTag(hProfile, 0x31323334, "data123", 7); case 2: @@ -5068,12 +5105,12 @@ cmsInt32Number CheckProfileCreation(void) if (!CheckXYZ(Pass, h, cmsSigLuminanceTag)) return 0; SubTest("Tags holding curves"); - + if (!CheckGamma(Pass, h, cmsSigBlueTRCTag)) return 0; if (!CheckGamma(Pass, h, cmsSigGrayTRCTag)) return 0; if (!CheckGamma(Pass, h, cmsSigGreenTRCTag)) return 0; if (!CheckGamma(Pass, h, cmsSigRedTRCTag)) return 0; - + SubTest("Tags holding text"); if (!CheckText(Pass, h, cmsSigCharTargetTag)) return 0; @@ -5123,7 +5160,7 @@ cmsInt32Number CheckProfileCreation(void) if (!CheckLUT(Pass, h, cmsSigPreview1Tag)) return 0; if (!CheckLUT(Pass, h, cmsSigPreview2Tag)) return 0; if (!CheckLUT(Pass, h, cmsSigGamutTag)) return 0; - + SubTest("Tags holding CHAD"); if (!CheckCHAD(Pass, h, cmsSigChromaticAdaptationTag)) return 0; @@ -5151,7 +5188,7 @@ cmsInt32Number CheckProfileCreation(void) if (!CheckMPE(Pass, h, cmsSigBToD1Tag)) return 0; if (!CheckMPE(Pass, h, cmsSigBToD2Tag)) return 0; if (!CheckMPE(Pass, h, cmsSigBToD3Tag)) return 0; - + SubTest("Tags using screening"); if (!CheckScreening(Pass, h, cmsSigScreeningTag)) return 0; @@ -5181,15 +5218,15 @@ cmsInt32Number CheckProfileCreation(void) } - /* + /* Not implemented (by design): - cmsSigDataTag = 0x64617461, // 'data' -- Unused + cmsSigDataTag = 0x64617461, // 'data' -- Unused cmsSigDeviceSettingsTag = 0x64657673, // 'devs' -- Unused cmsSigNamedColorTag = 0x6E636f6C, // 'ncol' -- Don't use this one, deprecated by ICC - cmsSigOutputResponseTag = 0x72657370, // 'resp' -- Possible patent on this + cmsSigOutputResponseTag = 0x72657370, // 'resp' -- Possible patent on this */ - + cmsCloseProfile(h); remove("alltags.icc"); return 1; @@ -5204,7 +5241,7 @@ void ErrorReportingFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, con { TrappedError = TRUE; SimultaneousErrors++; - strncpy(ReasonToFailBuffer, Text, TEXT_ERROR_BUFFER_SIZE-1); + strncpy(ReasonToFailBuffer, Text, TEXT_ERROR_BUFFER_SIZE-1); cmsUNUSED_PARAMETER(ContextID); cmsUNUSED_PARAMETER(ErrorCode); @@ -5234,13 +5271,13 @@ cmsInt32Number CheckBadProfiles(void) cmsCloseProfile(h); return 0; } - + h = cmsOpenProfileFromFileTHR(DbgThread(), "..", "r"); if (h != NULL) { cmsCloseProfile(h); return 0; } - + h = cmsOpenProfileFromFileTHR(DbgThread(), "IHaveBadAccessMode.icc", "@"); if (h != NULL) { cmsCloseProfile(h); @@ -5271,8 +5308,8 @@ cmsInt32Number CheckBadProfiles(void) return 0; } - if (SimultaneousErrors != 9) return 0; - + if (SimultaneousErrors != 9) return 0; + return 1; } @@ -5304,7 +5341,7 @@ cmsInt32Number CheckBadTransforms(void) return 0; } - + x1 = cmsCreateTransform(h1, TYPE_RGB_8, h1, TYPE_RGB_8, 12345, 0); if (x1 != NULL) { @@ -5379,12 +5416,12 @@ cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) cmsUInt8Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS]; n2=0; - + for (j=0; j < 0xFF; j++) { - + memset(Inw, j, sizeof(Inw)); cmsDoTransform(xform, Inw, Outw, 1); - + for (i=0; i < nChan; i++) { cmsInt32Number dif = abs(Outw[i] - j); @@ -5393,13 +5430,13 @@ cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) } } - // We allow 2 contone of difference on 8 bits + // We allow 2 contone of difference on 8 bits if (n2 > 2) { Fail("Differences too big (%x)", n2); return 0; } - + return 1; } @@ -5410,9 +5447,9 @@ cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsI cmsUInt8Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];; n2=0; - + for (j=0; j < 0xFF; j++) { - + memset(Inw, j, sizeof(Inw)); cmsDoTransform(xform1, Inw, Outw1, 1); cmsDoTransform(xform2, Inw, Outw2, 1); @@ -5425,14 +5462,14 @@ cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsI } } - // We allow 2 contone of difference on 8 bits + // We allow 2 contone of difference on 8 bits if (n2 > 2) { Fail("Differences too big (%x)", n2); return 0; } - + return 1; } @@ -5444,20 +5481,20 @@ cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) cmsInt32Number n2, i, j; cmsUInt16Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS]; - n2=0; + n2=0; for (j=0; j < 0xFFFF; j++) { for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j; cmsDoTransform(xform, Inw, Outw, 1); - + for (i=0; i < nChan; i++) { cmsInt32Number dif = abs(Outw[i] - j); if (dif > n2) n2 = dif; } - + // We allow 2 contone of difference on 16 bits if (n2 > 0x200) { @@ -5466,7 +5503,7 @@ cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) return 0; } } - + return 1; } @@ -5477,9 +5514,9 @@ cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms cmsUInt16Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];; n2=0; - + for (j=0; j < 0xFFFF; j++) { - + for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j; cmsDoTransform(xform1, Inw, Outw1, 1); @@ -5493,14 +5530,14 @@ cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms } } - // We allow 2 contone of difference on 16 bits + // We allow 2 contone of difference on 16 bits if (n2 > 0x200) { Fail("Differences too big (%x)", n2); return 0; } - + return 1; } @@ -5513,21 +5550,21 @@ cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) cmsFloat32Number In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS]; n2=0; - + for (j=0; j < 0xFFFF; j++) { for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);; cmsDoTransform(xform, In, Out, 1); - + for (i=0; i < nChan; i++) { // We allow no difference in floating point - if (!IsGoodFixed15_16("linear xform cmsFloat32Number", Out[i], (cmsFloat32Number) (j / 65535.0))) + if (!IsGoodFixed15_16("linear xform cmsFloat32Number", Out[i], (cmsFloat32Number) (j / 65535.0))) return 0; - } + } } - + return 1; } @@ -5540,7 +5577,7 @@ cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms cmsFloat32Number In[cmsMAXCHANNELS], Out1[cmsMAXCHANNELS], Out2[cmsMAXCHANNELS]; n2=0; - + for (j=0; j < 0xFFFF; j++) { for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);; @@ -5551,12 +5588,12 @@ cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cms for (i=0; i < nChan; i++) { // We allow no difference in floating point - if (!IsGoodFixed15_16("linear xform cmsFloat32Number", Out1[i], Out2[i])) + if (!IsGoodFixed15_16("linear xform cmsFloat32Number", Out1[i], Out2[i])) return 0; } - + } - + return 1; } @@ -5575,42 +5612,42 @@ cmsInt32Number CheckCurvesOnlyTransforms(void) c1 = cmsBuildGamma(DbgThread(), 2.2); c2 = cmsBuildGamma(DbgThread(), 1/2.2); - c3 = cmsBuildGamma(DbgThread(), 4.84); + c3 = cmsBuildGamma(DbgThread(), 4.84); h1 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c1); h2 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c2); h3 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c3); SubTest("Gray float optimizeable transform"); - xform1 = cmsCreateTransform(h1, TYPE_GRAY_FLT, h2, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_FLT, h2, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); rc &= CheckFloatlinearXFORM(xform1, 1); cmsDeleteTransform(xform1); if (rc == 0) goto Error; - + SubTest("Gray 8 optimizeable transform"); - xform1 = cmsCreateTransform(h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); rc &= Check8linearXFORM(xform1, 1); cmsDeleteTransform(xform1); if (rc == 0) goto Error; - + SubTest("Gray 16 optimizeable transform"); - xform1 = cmsCreateTransform(h1, TYPE_GRAY_16, h2, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_16, h2, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); rc &= Check16linearXFORM(xform1, 1); cmsDeleteTransform(xform1); if (rc == 0) goto Error; SubTest("Gray float non-optimizeable transform"); - xform1 = cmsCreateTransform(h1, TYPE_GRAY_FLT, h1, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); - xform2 = cmsCreateTransform(h3, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_FLT, h1, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(h3, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); rc &= CompareFloatXFORM(xform1, xform2, 1); cmsDeleteTransform(xform1); cmsDeleteTransform(xform2); if (rc == 0) goto Error; - + SubTest("Gray 8 non-optimizeable transform"); - xform1 = cmsCreateTransform(h1, TYPE_GRAY_8, h1, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); - xform2 = cmsCreateTransform(h3, TYPE_GRAY_8, NULL, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_8, h1, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(h3, TYPE_GRAY_8, NULL, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); rc &= Compare8bitXFORM(xform1, xform2, 1); cmsDeleteTransform(xform1); @@ -5619,8 +5656,8 @@ cmsInt32Number CheckCurvesOnlyTransforms(void) SubTest("Gray 16 non-optimizeable transform"); - xform1 = cmsCreateTransform(h1, TYPE_GRAY_16, h1, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); - xform2 = cmsCreateTransform(h3, TYPE_GRAY_16, NULL, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + xform1 = cmsCreateTransform(h1, TYPE_GRAY_16, h1, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); + xform2 = cmsCreateTransform(h3, TYPE_GRAY_16, NULL, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); rc &= Compare16bitXFORM(xform1, xform2, 1); cmsDeleteTransform(xform1); @@ -5631,10 +5668,10 @@ Error: cmsCloseProfile(h1); cmsCloseProfile(h2); cmsCloseProfile(h3); cmsFreeToneCurve(c1); cmsFreeToneCurve(c2); cmsFreeToneCurve(c3); - + return rc; } - + // Lab to Lab trivial transforms ---------------------------------------------------------------------------------------- @@ -5651,7 +5688,7 @@ cmsInt32Number CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Nu cmsDoTransform(xform, &In, &Out, 1); dE = cmsDeltaE(&In, &Out); - + if (dE > MaxDE) MaxDE = dE; if (MaxDE > 0.003) { @@ -5671,13 +5708,13 @@ cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform) MaxDE = 0; for (L=0; L < 65536; L += 1311) { - + for (a = 0; a < 65536; a += 1232) { for (b = 0; b < 65536; b += 1111) { - if (!CheckOneLab(xform, (L * 100.0) / 65535.0, - (a / 257.0) - 128, (b / 257.0) - 128)) + if (!CheckOneLab(xform, (L * 100.0) / 65535.0, + (a / 257.0) - 128, (b / 257.0) - 128)) return 0; } @@ -5690,7 +5727,7 @@ cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform) static cmsInt32Number OneTrivialLab(cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt) -{ +{ cmsHTRANSFORM xform; cmsInt32Number rc; @@ -5723,7 +5760,7 @@ cmsInt32Number CheckEncodedLabTransforms(void) cmsCIELab White = { 100, 0, 0 }; cmsHPROFILE hLab1 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); cmsHPROFILE hLab2 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); - + xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); @@ -5788,7 +5825,7 @@ cmsInt32Number CheckEncodedLabTransforms(void) In[2] != 0x8080) return 0; cmsDeleteTransform(xform); - + return 1; } @@ -5801,7 +5838,7 @@ cmsInt32Number CheckStoredIdentities(void) hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hLab, TYPE_Lab_8, hLab, TYPE_Lab_8, 0, 0); - + hLink = cmsTransform2DeviceLink(xform, 3.4, 0); cmsSaveProfileToFile(hLink, "abstractv2.icc"); cmsCloseProfile(hLink); @@ -5819,12 +5856,12 @@ cmsInt32Number CheckStoredIdentities(void) SubTest("V4"); rc &= CheckSeveralLab(xform); - + cmsDeleteTransform(xform); cmsCloseProfile(h4); if (!rc) goto Error; - + SubTest("V2"); h2 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv2.icc", "r"); @@ -5885,13 +5922,13 @@ cmsInt32Number CheckMatrixShaperXFORMFloat(void) cmsDeleteTransform(xform); - return rc1 && rc2; + return rc1 && rc2; } // Check a simple xform from a matrix profile to itself. Test 16 bits accuracy. static cmsInt32Number CheckMatrixShaperXFORM16(void) -{ +{ cmsHPROFILE hAbove, hSRGB; cmsHTRANSFORM xform; cmsInt32Number rc1, rc2; @@ -5909,7 +5946,7 @@ cmsInt32Number CheckMatrixShaperXFORM16(void) rc2 = Check16linearXFORM(xform, 3); cmsDeleteTransform(xform); - return rc1 && rc2; + return rc1 && rc2; } @@ -5917,7 +5954,7 @@ cmsInt32Number CheckMatrixShaperXFORM16(void) // Check a simple xform from a matrix profile to itself. Test 8 bits accuracy. static cmsInt32Number CheckMatrixShaperXFORM8(void) -{ +{ cmsHPROFILE hAbove, hSRGB; cmsHTRANSFORM xform; cmsInt32Number rc1, rc2; @@ -5935,7 +5972,7 @@ cmsInt32Number CheckMatrixShaperXFORM8(void) cmsDeleteTransform(xform); - return rc1 && rc2; + return rc1 && rc2; } @@ -5990,13 +6027,13 @@ cmsInt32Number Chack_sRGB_Float(void) MaxErr = 0; - // Xform 1 goes from 8 bits to XYZ, + // Xform 1 goes from 8 bits to XYZ, rc = CheckOneRGB_f(xform1, 1, 1, 1, 0.0002926, 0.00030352, 0.00025037, 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.00385212, 0.0001); rc &= CheckOneRGB_f(xform1, 128, 0, 0, 0.0940846, 0.0480030, 0.00300543, 0.0001); rc &= CheckOneRGB_f(xform1, 190, 25, 210, 0.3203491, 0.1605240, 0.46817115, 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); @@ -6005,7 +6042,7 @@ cmsInt32Number Chack_sRGB_Float(void) cmsDeleteTransform(xform1); cmsDeleteTransform(xform2); - return rc; + return rc; } @@ -6063,9 +6100,9 @@ int CheckRGBPrimaries(void) if (!IsGoodFixed15_16("xRed", tripxyY.Red.x, 0.64) || !IsGoodFixed15_16("yRed", tripxyY.Red.y, 0.33) || - !IsGoodFixed15_16("xGreen", tripxyY.Green.x, 0.30) || + !IsGoodFixed15_16("xGreen", tripxyY.Green.x, 0.30) || !IsGoodFixed15_16("yGreen", tripxyY.Green.y, 0.60) || - !IsGoodFixed15_16("xBlue", tripxyY.Blue.x, 0.15) || + !IsGoodFixed15_16("xBlue", tripxyY.Blue.x, 0.15) || !IsGoodFixed15_16("yBlue", tripxyY.Blue.y, 0.06)) { Fail("One or more primaries are wrong."); return FALSE; @@ -6293,7 +6330,7 @@ cmsInt32Number CheckKPlaneBlackPreserving(void) cmsDeleteTransform(xform); - + xform = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_PLANE_PERCEPTUAL, 0); for (i=0; i <= 100; i++) { @@ -6310,16 +6347,16 @@ cmsInt32Number CheckKPlaneBlackPreserving(void) if (DeltaE > Max) Max = DeltaE; } - + cmsDeleteTransform(xform); - - + + cmsCloseProfile(hSWOP); cmsCloseProfile(hFOGRA); cmsCloseProfile(hLab); - + cmsDeleteTransform(swop_lab); cmsDeleteTransform(fogra_lab); @@ -6338,12 +6375,12 @@ cmsInt32Number CheckProofingXFORMFloat(void) cmsInt32Number rc; hAbove = Create_AboveRGB(); - xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, + xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING); cmsCloseProfile(hAbove); rc = CheckFloatlinearXFORM(xform, 3); cmsDeleteTransform(xform); - return rc; + return rc; } static @@ -6354,12 +6391,12 @@ cmsInt32Number CheckProofingXFORM16(void) cmsInt32Number rc; hAbove = Create_AboveRGB(); - xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, + xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING|cmsFLAGS_NOCACHE); cmsCloseProfile(hAbove); rc = Check16linearXFORM(xform, 3); cmsDeleteTransform(xform); - return rc; + return rc; } @@ -6383,7 +6420,7 @@ cmsInt32Number CheckGamutCheck(void) SubTest("Gamut check on floating point"); // Create a gamut checker in the same space. No value should be out of gamut - xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, + xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK); @@ -6399,7 +6436,7 @@ cmsInt32Number CheckGamutCheck(void) SubTest("Gamut check on 16 bits"); - xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, + xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK); cmsCloseProfile(hSRGB); @@ -6423,7 +6460,7 @@ cmsInt32Number CheckBlackPoint(void) cmsCIEXYZ Black; cmsCIELab Lab; - hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test5.icc", "r"); + hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test5.icc", "r"); cmsDetectDestinationBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hProfile); @@ -6496,7 +6533,7 @@ cmsInt32Number CheckCGATS(void) { cmsHANDLE it8; cmsInt32Number i; - + SubTest("IT8 creation"); it8 = cmsIT8Alloc(DbgThread()); if (it8 == NULL) return 0; @@ -6550,20 +6587,20 @@ cmsInt32Number CheckCGATS(void) SubTest("Change prop value"); if (cmsIT8GetPropertyDbl(it8, "DESCRIPTOR") != 1234) { - + return 0; } cmsIT8SetPropertyDbl(it8, "DESCRIPTOR", 5678); if (cmsIT8GetPropertyDbl(it8, "DESCRIPTOR") != 5678) { - + return 0; } SubTest("Positive numbers"); if (cmsIT8GetDataDbl(it8, "P3", "RGB_G") != 3) { - + return 0; } @@ -6571,14 +6608,14 @@ cmsInt32Number CheckCGATS(void) SubTest("Positive exponent numbers"); cmsIT8SetPropertyDbl(it8, "DBL_PROP", 123E+12); if ((cmsIT8GetPropertyDbl(it8, "DBL_PROP") - 123E+12) > 1 ) { - + return 0; } SubTest("Negative exponent numbers"); cmsIT8SetPropertyDbl(it8, "DBL_PROP_NEG", 123E-45); if ((cmsIT8GetPropertyDbl(it8, "DBL_PROP_NEG") - 123E-45) > 1E-45 ) { - + return 0; } @@ -6586,7 +6623,7 @@ cmsInt32Number CheckCGATS(void) SubTest("Negative numbers"); cmsIT8SetPropertyDbl(it8, "DBL_NEG_VAL", -123); if ((cmsIT8GetPropertyDbl(it8, "DBL_NEG_VAL")) != -123 ) { - + return 0; } @@ -6603,16 +6640,16 @@ cmsInt32Number CheckCGATS(void) static void GenerateCSA(const char* cInProf, const char* FileName) { - cmsHPROFILE hProfile; + cmsHPROFILE hProfile; cmsUInt32Number n; char* Buffer; cmsContext BuffThread = DbgThread(); FILE* o; - if (cInProf == NULL) + if (cInProf == NULL) hProfile = cmsCreateLab4Profile(NULL); - else + else hProfile = cmsOpenProfileFromFile(cInProf, "r"); n = cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, NULL, 0); @@ -6644,9 +6681,9 @@ void GenerateCRD(const char* cOutProf, const char* FileName) cmsContext BuffThread = DbgThread(); - if (cOutProf == NULL) + if (cOutProf == NULL) hProfile = cmsCreateLab4Profile(NULL); - else + else hProfile = cmsOpenProfileFromFile(cOutProf, "r"); n = cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, NULL, 0); @@ -6667,7 +6704,7 @@ void GenerateCRD(const char* cOutProf, const char* FileName) remove(FileName); } -static +static cmsInt32Number CheckPostScript(void) { GenerateCSA("test5.icc", "sRGB_CSA.ps"); @@ -6676,7 +6713,7 @@ cmsInt32Number CheckPostScript(void) GenerateCSA("test1.icc", "SWOP_CSA.ps"); GenerateCSA(NULL, "Lab_CSA.ps"); GenerateCSA("graylcms2.icc", "gray_CSA.ps"); - + GenerateCRD("test5.icc", "sRGB_CRD.ps"); GenerateCRD("aRGBlcms2.icc", "aRGB_CRD.ps"); GenerateCRD(NULL, "Lab_CRD.ps"); @@ -6710,7 +6747,7 @@ cmsInt32Number CheckInputGray(void) if (hGray == NULL || hLab == NULL) return 0; - xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); + xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hGray); cmsCloseProfile(hLab); if (!CheckGray(xform, 0, 0)) return 0; @@ -6768,15 +6805,15 @@ cmsInt32Number CheckOutputGray(void) if (hGray == NULL || hLab == NULL) return 0; - xform = cmsCreateTransform( hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); + xform = cmsCreateTransform( hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hGray); cmsCloseProfile(hLab); if (!CheckOutGray(xform, 0, 0)) return 0; if (!CheckOutGray(xform, 100, 255)) return 0; - + if (!CheckOutGray(xform, 20, 52)) return 0; if (!CheckOutGray(xform, 50, 118)) return 0; - + cmsDeleteTransform(xform); return 1; @@ -6807,7 +6844,7 @@ cmsInt32Number CheckLabOutputGray(void) if (!CheckOutGray(xform, i, g)) return 0; } - + cmsDeleteTransform(xform); return 1; @@ -6824,7 +6861,7 @@ cmsInt32Number CheckV4gamma(void) h = cmsOpenProfileFromFileTHR(DbgThread(), "v4gamma.icc", "w"); if (h == NULL) return 0; - + cmsSetProfileVersion(h, 4.3); if (!cmsWriteTag(h, cmsSigGrayTRCTag, g)) return 0; @@ -6899,11 +6936,11 @@ cmsInt32Number CheckGBD(void) for (g1=0; g1 < 256; g1 += 5) for (b1=0; b1 < 256; b1 += 5) { - - cmsUInt8Number rgb[3]; + + cmsUInt8Number rgb[3]; rgb[0] = (cmsUInt8Number) r1; - rgb[1] = (cmsUInt8Number) g1; + rgb[1] = (cmsUInt8Number) g1; rgb[2] = (cmsUInt8Number) b1; cmsDoTransform(xform, rgb, &Lab, 1); @@ -6914,11 +6951,11 @@ cmsInt32Number CheckGBD(void) cmsGBDFree(h); return 0; } - + } } - + if (!cmsGDBCompute(h, 0)) return 0; // cmsGBDdumpVRML(h, "c:\\colormaps\\lab.wrl"); @@ -6927,11 +6964,11 @@ cmsInt32Number CheckGBD(void) for (g1=10; g1 < 200; g1 += 10) for (b1=10; b1 < 200; b1 += 10) { - - cmsUInt8Number rgb[3]; + + cmsUInt8Number rgb[3]; rgb[0] = (cmsUInt8Number) r1; - rgb[1] = (cmsUInt8Number) g1; + rgb[1] = (cmsUInt8Number) g1; rgb[2] = (cmsUInt8Number) b1; cmsDoTransform(xform, rgb, &Lab, 1); @@ -6951,7 +6988,7 @@ cmsInt32Number CheckGBD(void) SubTest("checking LCh chroma ring"); h = cmsGBDAlloc(DbgThread()); - + for (r1=0; r1 < 360; r1++) { cmsCIELCh LCh; @@ -6966,7 +7003,7 @@ cmsInt32Number CheckGBD(void) return 0; } } - + if (!cmsGDBCompute(h, 0)) return 0; @@ -6980,25 +7017,25 @@ static int CheckMD5(void) { _cmsICCPROFILE* h; - cmsHPROFILE pProfile = cmsOpenProfileFromFile("sRGBlcms2.icc", "r"); + cmsHPROFILE pProfile = cmsOpenProfileFromFile("sRGBlcms2.icc", "r"); cmsProfileID ProfileID1, ProfileID2, ProfileID3, ProfileID4; h =(_cmsICCPROFILE*) pProfile; - if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile, ProfileID1.ID8); - if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile,ProfileID2.ID8); + if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile, ProfileID1.ID8); + if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile,ProfileID2.ID8); cmsCloseProfile(pProfile); - - pProfile = cmsOpenProfileFromFile("sRGBlcms2.icc", "r"); + + pProfile = cmsOpenProfileFromFile("sRGBlcms2.icc", "r"); h =(_cmsICCPROFILE*) pProfile; - if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile, ProfileID3.ID8); - if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile,ProfileID4.ID8); + if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile, ProfileID3.ID8); + if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile,ProfileID4.ID8); cmsCloseProfile(pProfile); - return ((memcmp(ProfileID1.ID8, ProfileID3.ID8, sizeof(ProfileID1)) == 0) && + return ((memcmp(ProfileID1.ID8, ProfileID3.ID8, sizeof(ProfileID1)) == 0) && (memcmp(ProfileID2.ID8, ProfileID4.ID8, sizeof(ProfileID2)) == 0)); } @@ -7014,7 +7051,7 @@ typedef struct {cmsUInt8Number r, g, b;} Scanline_rgb8; typedef struct {cmsUInt16Number r, g, b;} Scanline_rgb0; -static +static void TitlePerformance(const char* Txt) { printf("%-45s: ", Txt); fflush(stdout); @@ -7042,10 +7079,10 @@ void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE Scanline_rgb0 *In; cmsUInt32Number Mb; - if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) + if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_16, + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); @@ -7074,10 +7111,10 @@ void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE diff = clock() - atime; free(In); - + PrintPerformance(Mb, sizeof(Scanline_rgb0), diff); cmsDeleteTransform(hlcmsxform); - + } @@ -7090,11 +7127,11 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO cmsHTRANSFORM hlcmsxform; Scanline_rgb2 *In; cmsUInt32Number Mb; - - if (hlcmsProfileOut == NULL || hlcmsProfileOut == NULL) + + if (hlcmsProfileOut == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_16, + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_16, hlcmsProfileOut, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); @@ -7126,11 +7163,11 @@ void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPRO diff = clock() - atime; free(In); - + PrintPerformance(Mb, sizeof(Scanline_rgb2), diff); cmsDeleteTransform(hlcmsxform); - + } @@ -7143,11 +7180,11 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE cmsHTRANSFORM hlcmsxform; Scanline_rgb8 *In; cmsUInt32Number Mb; - - if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) + + if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_8, + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_8, hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); @@ -7177,9 +7214,9 @@ void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE diff = clock() - atime; free(In); - + PrintPerformance(Mb, sizeof(Scanline_rgb8), diff); - + cmsDeleteTransform(hlcmsxform); } @@ -7194,11 +7231,11 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF cmsHTRANSFORM hlcmsxform; Scanline_rgb2 *In; cmsUInt32Number Mb; - - if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) + + if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_8, + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_8, hlcmsProfileOut, TYPE_CMYK_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); @@ -7229,7 +7266,7 @@ void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF diff = clock() - atime; free(In); - + PrintPerformance(Mb, sizeof(Scanline_rgb2), diff); @@ -7247,12 +7284,12 @@ void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF cmsHTRANSFORM hlcmsxform; cmsUInt8Number *In; cmsUInt32Number Mb; - - - if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) + + + if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); - hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, + hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_GRAY_8, hlcmsProfileOut, TYPE_GRAY_8, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); @@ -7266,7 +7303,7 @@ void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF for (b=0; b < 256; b++) { In[j] = (cmsUInt8Number) r; - + j++; } @@ -7278,7 +7315,7 @@ void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROF diff = clock() - atime; free(In); - + PrintPerformance(Mb, sizeof(cmsUInt8Number), diff); cmsDeleteTransform(hlcmsxform); } @@ -7290,7 +7327,7 @@ cmsHPROFILE CreateCurves(void) cmsToneCurve* Gamma = cmsBuildGamma(DbgThread(), 1.1); cmsToneCurve* Transfer[3]; cmsHPROFILE h; - + Transfer[0] = Transfer[1] = Transfer[2] = Gamma; h = cmsCreateLinearizationDeviceLink(cmsSigRgbData, Transfer); @@ -7298,7 +7335,7 @@ cmsHPROFILE CreateCurves(void) return h; } - + static void SpeedTest(void) @@ -7307,17 +7344,17 @@ void SpeedTest(void) printf( "=================================\n\n"); fflush(stdout); - SpeedTest16bits("16 bits on CLUT profiles", + SpeedTest16bits("16 bits on CLUT profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest8bits("8 bits on CLUT profiles", + SpeedTest8bits("8 bits on CLUT profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); - - SpeedTest8bits("8 bits on Matrix-Shaper profiles", - cmsOpenProfileFromFile("test5.icc", "r"), + + SpeedTest8bits("8 bits on Matrix-Shaper profiles", + cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); @@ -7326,54 +7363,54 @@ void SpeedTest(void) cmsOpenProfileFromFile("test5.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest8bits("8 bits on Matrix-Shaper profiles (AbsCol)", + SpeedTest8bits("8 bits on Matrix-Shaper profiles (AbsCol)", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), - INTENT_ABSOLUTE_COLORIMETRIC); + INTENT_ABSOLUTE_COLORIMETRIC); - SpeedTest16bits("16 bits on Matrix-Shaper profiles", + SpeedTest16bits("16 bits on Matrix-Shaper profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest16bits("16 bits on SAME Matrix-Shaper profiles", + SpeedTest16bits("16 bits on SAME Matrix-Shaper profiles", cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); - SpeedTest16bits("16 bits on Matrix-Shaper profiles (AbsCol)", + SpeedTest16bits("16 bits on Matrix-Shaper profiles (AbsCol)", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_ABSOLUTE_COLORIMETRIC); - SpeedTest8bits("8 bits on curves", - CreateCurves(), + SpeedTest8bits("8 bits on curves", + CreateCurves(), CreateCurves(), INTENT_PERCEPTUAL); - SpeedTest16bits("16 bits on curves", - CreateCurves(), + SpeedTest16bits("16 bits on curves", + CreateCurves(), CreateCurves(), INTENT_PERCEPTUAL); - SpeedTest8bitsCMYK("8 bits on CMYK profiles", + SpeedTest8bitsCMYK("8 bits on CMYK profiles", cmsOpenProfileFromFile("test1.icc", "r"), cmsOpenProfileFromFile("test2.icc", "r")); - SpeedTest16bitsCMYK("16 bits on CMYK profiles", + SpeedTest16bitsCMYK("16 bits on CMYK profiles", cmsOpenProfileFromFile("test1.icc", "r"), cmsOpenProfileFromFile("test2.icc", "r")); SpeedTest8bitsGray("8 bits on gray-to gray", - cmsOpenProfileFromFile("gray3lcms2.icc", "r"), + cmsOpenProfileFromFile("gray3lcms2.icc", "r"), cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); SpeedTest8bitsGray("8 bits on gray-to-lab gray", - cmsOpenProfileFromFile("graylcms2.icc", "r"), + cmsOpenProfileFromFile("graylcms2.icc", "r"), cmsOpenProfileFromFile("glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); SpeedTest8bitsGray("8 bits on SAME gray-to-gray", - cmsOpenProfileFromFile("graylcms2.icc", "r"), + cmsOpenProfileFromFile("graylcms2.icc", "r"), cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_PERCEPTUAL); } @@ -7464,8 +7501,8 @@ void PrintAllInfos(cmsHPROFILE h) { PrintInfo(h, cmsInfoDescription); PrintInfo(h, cmsInfoManufacturer); - PrintInfo(h, cmsInfoModel); - PrintInfo(h, cmsInfoCopyright); + PrintInfo(h, cmsInfoModel); + PrintInfo(h, cmsInfoCopyright); printf("\n\n"); } @@ -7474,7 +7511,7 @@ void ReadAllLUTS(cmsHPROFILE h) { cmsPipeline* a; cmsCIEXYZ Black; - + a = _cmsReadInputLUT(h, INTENT_PERCEPTUAL); if (a) cmsPipelineFree(a); @@ -7535,11 +7572,11 @@ cmsInt32Number CheckSingleSpecimen(const char* Profile) h = cmsOpenProfileFromFile(BuffSrc, "r"); if (h == NULL) return 0; - + printf("%s\n", Profile); - PrintAllInfos(h); - ReadAllTags(h); - // ReadAllRAWTags(h); + PrintAllInfos(h); + ReadAllTags(h); + // ReadAllRAWTags(h); ReadAllLUTS(h); cmsSaveProfileToFile(h, BuffDst); @@ -7547,8 +7584,8 @@ cmsInt32Number CheckSingleSpecimen(const char* Profile) h = cmsOpenProfileFromFile(BuffDst, "r"); if (h == NULL) return 0; - ReadAllTags(h); - + ReadAllTags(h); + cmsCloseProfile(h); @@ -7567,15 +7604,15 @@ cmsInt32Number CheckRAWSpecimen(const char* Profile) h = cmsOpenProfileFromFile(BuffSrc, "r"); if (h == NULL) return 0; - + ReadAllTags(h); - ReadAllRAWTags(h); + ReadAllRAWTags(h); cmsSaveProfileToFile(h, BuffDst); cmsCloseProfile(h); h = cmsOpenProfileFromFile(BuffDst, "r"); if (h == NULL) return 0; - ReadAllTags(h); + ReadAllTags(h); cmsCloseProfile(h); return 1; @@ -7624,32 +7661,32 @@ void CheckProfileZOO(void) #if 0 -#define TYPE_709 709 -static double Rec709Math(int Type, const double Params[], double R) -{ double Fun; +#define TYPE_709 709 +static double Rec709Math(int Type, const double Params[], double R) +{ double Fun; -switch (Type) -{ -case 709: +switch (Type) +{ +case 709: -if (R <= (Params[3]*Params[4])) Fun = R / Params[3]; -else Fun = pow(((R - Params[2])/Params[1]), Params[0]); -break; +if (R <= (Params[3]*Params[4])) Fun = R / Params[3]; +else Fun = pow(((R - Params[2])/Params[1]), Params[0]); +break; -case -709: +case -709: -if (R <= Params[4]) Fun = R * Params[3]; -else Fun = Params[1] * pow(R, (1/Params[0])) + Params[2]; -break; -} -return Fun; +if (R <= Params[4]) Fun = R * Params[3]; +else Fun = Params[1] * pow(R, (1/Params[0])) + Params[2]; +break; +} +return Fun; } -// Add nonstandard TRC curves -> Rec709 -cmsPluginParametricCurves NewCurvePlugin = { -{ cmsPluginMagicNumber, 2000, cmsPluginParametricCurveSig, NULL }, -1, {TYPE_709}, {5}, Rec709Math}; +// Add nonstandard TRC curves -> Rec709 +cmsPluginParametricCurves NewCurvePlugin = { +{ cmsPluginMagicNumber, 2000, cmsPluginParametricCurveSig, NULL }, +1, {TYPE_709}, {5}, Rec709Math}; #endif @@ -7659,14 +7696,13 @@ cmsPluginParametricCurves NewCurvePlugin = { int main(int argc, char* argv[]) { + cmsInt32Number Exhaustive = 0; cmsInt32Number DoSpeedTests = 1; cmsInt32Number DoCheckTests = 1; - - #ifdef _MSC_VER - _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); + _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #endif printf("LittleCMS %2.2f test bed %s %s\n\n", LCMS_VERSION / 1000.0, __DATE__, __TIME__); @@ -7677,7 +7713,6 @@ int main(int argc, char* argv[]) printf("Running exhaustive tests (will take a while...)\n\n"); } - printf("Installing debug memory plug-in ... "); cmsPlugin(&DebugMemHandler); printf("done.\n"); @@ -7686,18 +7721,18 @@ int main(int argc, char* argv[]) cmsSetLogErrorHandler(FatalErrorQuit); printf("done.\n"); -#ifdef CMS_IS_WINDOWS_ +#ifdef CMS_IS_WINDOWS_ // CheckProfileZOO(); #endif PrintSupportedIntents(); - + // Create utility profiles - Check("Creation of test profiles", CreateTestProfiles); + Check("Creation of test profiles", CreateTestProfiles); - if (DoCheckTests) + if (DoCheckTests) { Check("Base types", CheckBaseTypes); Check("endianess", CheckEndianess); @@ -7705,7 +7740,7 @@ int main(int argc, char* argv[]) Check("quick floor word", CheckQuickFloorWord); Check("Fixed point 15.16 representation", CheckFixedPoint15_16); Check("Fixed point 8.8 representation", CheckFixedPoint8_8); - + // Forward 1D interpolation Check("1D interpolation in 2pt tables", Check1DLERP2); Check("1D interpolation in 3pt tables", Check1DLERP3); @@ -7716,19 +7751,19 @@ int main(int argc, char* argv[]) Check("1D interpolation in descending 3pt tables", Check1DLERP3Down); Check("1D interpolation in descending 6pt tables", Check1DLERP6Down); Check("1D interpolation in descending 18pt tables", Check1DLERP18Down); - + if (Exhaustive) { Check("1D interpolation in n tables", ExhaustiveCheck1DLERP); Check("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); - + if (Exhaustive) { Check("Exhaustive 3D interpolation Tetrahedral (float) ", ExaustiveCheck3DinterpolationFloatTetrahedral); @@ -7739,7 +7774,7 @@ int main(int argc, char* argv[]) Check("Reverse interpolation 3 -> 3", CheckReverseInterpolation3x3); Check("Reverse interpolation 4 -> 3", CheckReverseInterpolation4x3); - + // High dimensionality interpolation @@ -7761,7 +7796,7 @@ int main(int argc, char* argv[]) // BlackBody Check("Blackbody radiator", CheckTemp2CHRM); - + // Tone curves Check("Linear gamma curves (16 bits)", CheckGammaCreation16); Check("Linear gamma curves (float)", CheckGammaCreationFlt); @@ -7779,14 +7814,14 @@ int main(int argc, char* argv[]) Check("Curve 3.0 (word table)", CheckGamma30TableWord); Check("Parametric curves", CheckParametricToneCurves); - + Check("Join curves", CheckJointCurves); Check("Join curves descending", CheckJointCurvesDescending); - Check("Join curves degenerated", CheckReverseDegenerated); + 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); - + // LUT basics Check("LUT creation & dup", CheckLUTcreation); Check("1 Stage LUT ", Check1StageLUT); @@ -7800,7 +7835,7 @@ int main(int argc, char* argv[]) Check("5 Stage LUT (16 bits) ", Check5Stage16LUT); Check("6 Stage LUT ", Check6StageLUT); Check("6 Stage LUT (16 bits) ", Check6Stage16LUT); - + // LUT operation Check("Lab to Lab LUT (float only) ", CheckLab2LabLUT); Check("XYZ to XYZ LUT (float only) ", CheckXYZ2XYZLUT); @@ -7808,32 +7843,33 @@ int main(int argc, char* argv[]) Check("Named Color LUT", CheckNamedColorLUT); Check("Usual formatters", CheckFormatters16); Check("Floating point formatters", CheckFormattersFloat); + Check("HALF formatters", CheckFormattersHalf); // ChangeBuffersFormat Check("ChangeBuffersFormat", CheckChangeBufferFormat); - - // MLU + + // MLU Check("Multilocalized Unicode", CheckMLU); - + // Named color Check("Named color lists", CheckNamedColorList); - + // Profile I/O (this one is huge!) Check("Profile creation", CheckProfileCreation); - + // Error reporting Check("Error reporting on bad profiles", CheckErrReportingOnBadProfiles); Check("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("Encoded Lab->Lab transforms", CheckEncodedLabTransforms); Check("Stored identities", CheckStoredIdentities); Check("Matrix-shaper transform (float)", CheckMatrixShaperXFORMFloat); - Check("Matrix-shaper transform (16 bits)", CheckMatrixShaperXFORM16); + Check("Matrix-shaper transform (16 bits)", CheckMatrixShaperXFORM16); Check("Matrix-shaper transform (8 bits)", CheckMatrixShaperXFORM8); Check("Primaries of sRGB", CheckRGBPrimaries); @@ -7847,22 +7883,22 @@ int main(int argc, char* argv[]) Check("Matrix-shaper proofing transform (float)", CheckProofingXFORMFloat); Check("Matrix-shaper proofing transform (16 bits)", CheckProofingXFORM16); - + Check("Gamut check", CheckGamutCheck); - + Check("CMYK roundtrip on perceptual transform", CheckCMYKRoundtrip); - + Check("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("TAC detection", CheckTAC); Check("CGATS parser", CheckCGATS); Check("PostScript generator", CheckPostScript); @@ -7873,7 +7909,7 @@ int main(int argc, char* argv[]) if (DoSpeedTests) SpeedTest(); - + DebugMemPrintTotals(); cmsUnregisterPlugins(); @@ -7883,7 +7919,7 @@ int main(int argc, char* argv[]) return TotalFail; } - + -- cgit v1.2.1