summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Noffke <patrick.noffke@gmail.com>2013-11-14 10:05:41 -0600
committerPatrick Noffke <patrick.noffke@gmail.com>2013-11-14 10:05:41 -0600
commitee00cc8164088621a4cb85e0cad383981e5c7a9b (patch)
tree44e725fe11c83373d3f27bd8a2ba6a240955a7dd
parent69ecafd3b1638cc76ae0b005277120fe15c5bbda (diff)
downloadlcms2-ee00cc8164088621a4cb85e0cad383981e5c7a9b.tar.gz
Add PackXYZFloatFrom16 output formatter for TYPE_XYZ_FLT.
Transforms created with TYPE_XYZ_FLT would otherwise result in XYZ values that were off (too small) by a factor of 2.
-rw-r--r--AUTHORS3
-rw-r--r--src/cmspack.c34
2 files changed, 36 insertions, 1 deletions
diff --git a/AUTHORS b/AUTHORS
index 4ac9ee6..8a6c3da 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -31,6 +31,7 @@ Christian Schmitz
XhmikosR
Stanislav Brabec (SuSe)
Leonhard Gruenschloss (Google)
+Patrick Noffke
Special Thanks
--------------
@@ -40,4 +41,4 @@ Harald Schneider (Maxon)
Christian Albrecht
Dimitrios Anastassakis
Lemke Software
-Tim Zaman \ No newline at end of file
+Tim Zaman
diff --git a/src/cmspack.c b/src/cmspack.c
index d54a8cf..5677e07 100644
--- a/src/cmspack.c
+++ b/src/cmspack.c
@@ -2305,6 +2305,39 @@ cmsUInt8Number* PackXYZDoubleFrom16(register _cmsTRANSFORM* Info,
}
static
+cmsUInt8Number* PackXYZFloatFrom16(register _cmsTRANSFORM* Info,
+ register cmsUInt16Number wOut[],
+ register cmsUInt8Number* output,
+ register cmsUInt32Number Stride)
+{
+ if (T_PLANAR(Info -> OutputFormat)) {
+
+ cmsCIEXYZ XYZ;
+ cmsFloat32Number* Out = (cmsFloat32Number*) output;
+ cmsXYZEncoded2Float(&XYZ, wOut);
+
+ Out[0] = XYZ.X;
+ Out[Stride] = XYZ.Y;
+ Out[Stride*2] = XYZ.Z;
+
+ return output + sizeof(cmsFloat32Number);
+
+ }
+ else {
+
+ cmsCIEXYZ XYZ;
+ cmsFloat32Number* Out = (cmsFloat32Number*) output;
+ cmsXYZEncoded2Float(&XYZ, wOut);
+
+ Out[0] = XYZ.X;
+ Out[1] = XYZ.Y;
+ Out[2] = XYZ.Z;
+
+ return output + (3 * sizeof(cmsFloat32Number) + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat32Number));
+ }
+}
+
+static
cmsUInt8Number* PackDoubleFrom16(register _cmsTRANSFORM* info,
register cmsUInt16Number wOut[],
register cmsUInt8Number* output,
@@ -2998,6 +3031,7 @@ static cmsFormatters16 OutputFormatters16[] = {
{ TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, PackXYZDoubleFrom16},
{ TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, PackLabFloatFrom16},
+ { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, PackXYZFloatFrom16},
{ FLOAT_SH(1)|BYTES_SH(0), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|
ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackDoubleFrom16},