summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Noffke <patrick.noffke@gmail.com>2013-11-14 10:25:31 -0600
committerPatrick Noffke <patrick.noffke@gmail.com>2013-11-14 10:25:31 -0600
commitaa299164ba5135b5026458873ccd4e7040ee420d (patch)
treef3735d89249ffd89ec1fec327b7e83cf9bf49b40
parentee00cc8164088621a4cb85e0cad383981e5c7a9b (diff)
downloadlcms2-aa299164ba5135b5026458873ccd4e7040ee420d.tar.gz
Add UnrollXYZFloatTo16 input 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. This change fixes the testbed based on my last commit.
-rw-r--r--src/cmspack.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/cmspack.c b/src/cmspack.c
index 5677e07..6509e89 100644
--- a/src/cmspack.c
+++ b/src/cmspack.c
@@ -854,6 +854,42 @@ cmsUInt8Number* UnrollXYZDoubleTo16(register _cmsTRANSFORM* info,
}
}
+// This is a conversion of XYZ float to 16 bits
+static
+cmsUInt8Number* UnrollXYZFloatTo16(register _cmsTRANSFORM* info,
+ register cmsUInt16Number wIn[],
+ register cmsUInt8Number* accum,
+ register cmsUInt32Number Stride)
+{
+ if (T_PLANAR(info -> InputFormat)) {
+
+ cmsFloat32Number* Pt = (cmsFloat32Number*) accum;
+ cmsCIEXYZ XYZ;
+
+ XYZ.X = Pt[0];
+ XYZ.Y = Pt[Stride];
+ XYZ.Z = Pt[Stride*2];
+ cmsFloat2XYZEncoded(wIn, &XYZ);
+
+ return accum + sizeof(cmsFloat32Number);
+
+ }
+
+ else {
+ cmsFloat32Number* Pt = (cmsFloat32Number*) accum;
+ cmsCIEXYZ XYZ;
+
+ XYZ.X = Pt[0];
+ XYZ.Y = Pt[1];
+ XYZ.Z = Pt[2];
+ cmsFloat2XYZEncoded(wIn, &XYZ);
+
+ accum += 3 * sizeof(cmsFloat32Number) + T_EXTRA(info ->InputFormat) * sizeof(cmsFloat32Number);
+
+ return accum;
+ }
+}
+
// Check if space is marked as ink
cmsINLINE cmsBool IsInkSpace(cmsUInt32Number Type)
{
@@ -2897,6 +2933,7 @@ static cmsFormatters16 InputFormatters16[] = {
{ TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, UnrollLabDoubleTo16},
{ TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, UnrollXYZDoubleTo16},
{ TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, UnrollLabFloatTo16},
+ { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, UnrollXYZFloatTo16},
{ TYPE_GRAY_DBL, 0, UnrollDouble1Chan},
{ FLOAT_SH(1)|BYTES_SH(0), ANYCHANNELS|ANYPLANAR|ANYSWAPFIRST|ANYFLAVOR|
ANYSWAP|ANYEXTRA|ANYSPACE, UnrollDoubleTo16},