summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarti Maria <info@littlecms.com>2012-07-16 17:19:12 +0200
committerMarti Maria <info@littlecms.com>2012-07-16 17:19:12 +0200
commit8b13ad6a80ce0f2e19301083c4313988ae0f8c38 (patch)
tree6beac11d1b2f1e36c5475fca9a6f9bde04ff4f40
parent74144f0bd12be31ec78c7406930ca7353c5f7775 (diff)
downloadlcms2-8b13ad6a80ce0f2e19301083c4313988ae0f8c38.tar.gz
Added support for several floating point variants
-rw-r--r--AUTHORS1
-rw-r--r--include/lcms2.h7
-rw-r--r--src/cmspack.c497
-rw-r--r--testbed/testcms2.c1234
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;
}
-
+