diff options
author | Matt Sarett <msarett@google.com> | 2017-01-19 12:04:32 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-19 22:08:52 +0000 |
commit | 5bee0b6de6b3ad1166d067e6b5046b48b8240a29 (patch) | |
tree | d9412f11227a45b46741059b74d38dc72bf89269 /src/core/SkColorSpaceXform.cpp | |
parent | f720098671b7f28cc7cda4831c2b41e5d7e4a5bb (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.cpp | 23 |
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; } |