diff options
author | Patrick Noffke <patrick.noffke@gmail.com> | 2013-11-14 10:25:31 -0600 |
---|---|---|
committer | Patrick Noffke <patrick.noffke@gmail.com> | 2013-11-14 10:25:31 -0600 |
commit | aa299164ba5135b5026458873ccd4e7040ee420d (patch) | |
tree | f3735d89249ffd89ec1fec327b7e83cf9bf49b40 | |
parent | ee00cc8164088621a4cb85e0cad383981e5c7a9b (diff) | |
download | lcms2-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.c | 37 |
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}, |