aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpaceXform.cpp
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-01-19 12:04:32 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-19 22:08:52 +0000
commit5bee0b6de6b3ad1166d067e6b5046b48b8240a29 (patch)
treed9412f11227a45b46741059b74d38dc72bf89269 /src/core/SkColorSpaceXform.cpp
parentf720098671b7f28cc7cda4831c2b41e5d7e4a5bb (diff)
Reland "Respect full precision for RGB16 PNGs" (part 2)
This lands all the new xform hooks but no change to src/codec. So the new decode features are turned off. I'm relanding this in pieces to try to bisect a strange MSAN error. Original CL: https://skia-review.googlesource.com/c/7085/ BUG=skia: CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-MSAN,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD,Build-Ubuntu-Clang-x86_64-Release-Fast Change-Id: I451a2a29c73ca475e9e7a5ded58d4948d6b8be19 Reviewed-on: https://skia-review.googlesource.com/7277 Reviewed-by: Matt Sarett <msarett@google.com> Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/core/SkColorSpaceXform.cpp')
-rw-r--r--src/core/SkColorSpaceXform.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp
index bdb3784681..dccb92ee9a 100644
--- a/src/core/SkColorSpaceXform.cpp
+++ b/src/core/SkColorSpaceXform.cpp
@@ -1104,7 +1104,10 @@ bool SkColorSpaceXform_XYZ<kCSM>
}
}
- if (kRGBA_F32_ColorFormat == dstColorFormat || kRGBA_U16_BE_ColorFormat == srcColorFormat) {
+ if (kRGBA_F32_ColorFormat == dstColorFormat ||
+ kRGBA_U16_BE_ColorFormat == srcColorFormat ||
+ kRGB_U16_BE_ColorFormat == srcColorFormat)
+ {
return this->applyPipeline(dstColorFormat, dst, srcColorFormat, src, len, alphaType);
}
@@ -1221,6 +1224,24 @@ bool SkColorSpaceXform_XYZ<kCSM>
break;
}
break;
+ case kRGB_U16_BE_ColorFormat:
+ switch (fSrcGamma) {
+ case kLinear_SrcGamma:
+ pipeline.append(SkRasterPipeline::load_rgb_u16_be, &src);
+ break;
+ case kSRGB_SrcGamma:
+ pipeline.append(SkRasterPipeline::load_rgb_u16_be, &src);
+ pipeline.append_from_srgb(kUnpremul_SkAlphaType);
+ break;
+ case kTable_SrcGamma:
+ loadTables.fSrc = src;
+ loadTables.fR = fSrcGammaTables[0];
+ loadTables.fG = fSrcGammaTables[1];
+ loadTables.fB = fSrcGammaTables[2];
+ pipeline.append(SkRasterPipeline::load_tables_rgb_u16_be, &loadTables);
+ break;
+ }
+ break;
default:
return false;
}