diff options
author | msarett <msarett@google.com> | 2016-07-29 06:23:33 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-07-29 06:23:33 -0700 |
commit | 50ce1f28ffede3fa3e38d330d4114ee52b387848 (patch) | |
tree | ed3baa4c7463f1b46ac59bdee93df65c3eb82e97 /bench | |
parent | 830c913625ac62b16b09cc0f1dbd8f177ec493d9 (diff) |
Add color space xform support to SkJpegCodec (includes F16!)
Also changes SkColorXform to support:
RGBA->RGBA
RGBA->BGRA
Instead of:
RGBA->SkPMColor
TBR=reed@google.com
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2174493002
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot
Committed: https://skia.googlesource.com/skia/+/73d55332e2846dd05e9efdaa2f017bcc3872884b
Review-Url: https://codereview.chromium.org/2174493002
Diffstat (limited to 'bench')
-rw-r--r-- | bench/CodecBench.cpp | 4 | ||||
-rw-r--r-- | bench/ColorCodecBench.cpp | 66 |
2 files changed, 28 insertions, 42 deletions
diff --git a/bench/CodecBench.cpp b/bench/CodecBench.cpp index fc52edfb07..9bd404db55 100644 --- a/bench/CodecBench.cpp +++ b/bench/CodecBench.cpp @@ -42,7 +42,9 @@ bool CodecBench::isSuitableFor(Backend backend) { void CodecBench::onDelayedSetup() { SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(fData)); - fInfo = codec->getInfo().makeColorType(fColorType).makeAlphaType(fAlphaType); + fInfo = codec->getInfo().makeColorType(fColorType) + .makeAlphaType(fAlphaType) + .makeColorSpace(nullptr); fPixelStorage.reset(fInfo.getSafeSize(fInfo.minRowBytes())); } diff --git a/bench/ColorCodecBench.cpp b/bench/ColorCodecBench.cpp index e17d597abb..5079b482c7 100644 --- a/bench/ColorCodecBench.cpp +++ b/bench/ColorCodecBench.cpp @@ -41,32 +41,13 @@ bool ColorCodecBench::isSuitableFor(Backend backend) { void ColorCodecBench::decodeAndXform() { SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(fEncoded.get())); -#ifdef SK_DEBUG - const SkCodec::Result result = -#endif - codec->startScanlineDecode(fSrcInfo); - SkASSERT(SkCodec::kSuccess == result); - - sk_sp<SkColorSpace> srcSpace = sk_ref_sp(codec->getInfo().colorSpace()); - if (!srcSpace) { - srcSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); - } - std::unique_ptr<SkColorSpaceXform> xform = SkColorSpaceXform::New(srcSpace, fDstSpace); - SkASSERT(xform); + SkASSERT(codec); - void* dst = fDst.get(); - for (int y = 0; y < fSrcInfo.height(); y++) { #ifdef SK_DEBUG - const int rows = + SkCodec::Result result = #endif - codec->getScanlines(fSrc.get(), 1, 0); - SkASSERT(1 == rows); - - FLAGS_half ? - xform->applyToF16((uint64_t*) dst, (uint32_t*) fSrc.get(), fSrcInfo.width()) : - xform->applyTo8888((SkPMColor*) dst, (uint32_t*) fSrc.get(), fSrcInfo.width()); - dst = SkTAddOffset<void>(dst, fDstInfo.minRowBytes()); - } + codec->getPixels(fDstInfo, fDst.get(), fDstInfo.minRowBytes()); + SkASSERT(SkCodec::kSuccess == result); } #if defined(SK_TEST_QCMS) @@ -121,7 +102,7 @@ void ColorCodecBench::xformOnly() { // Transform in place FLAGS_half ? xform->applyToF16((uint64_t*) dst, (uint32_t*) src, fSrcInfo.width()) : - xform->applyTo8888((SkPMColor*) dst, (uint32_t*) src, fSrcInfo.width()); + xform->applyToRGBA((SkPMColor*) dst, (uint32_t*) src, fSrcInfo.width()); dst = SkTAddOffset<void>(dst, fDstInfo.minRowBytes()); src = SkTAddOffset<void>(src, fSrcInfo.minRowBytes()); } @@ -157,28 +138,12 @@ void ColorCodecBench::xformOnlyQCMS() { void ColorCodecBench::onDelayedSetup() { SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(fEncoded.get())); - fSrcInfo = codec->getInfo().makeColorType(kRGBA_8888_SkColorType); - - fDstInfo = fSrcInfo; - if (FLAGS_half) { - fDstInfo = fDstInfo.makeColorType(kRGBA_F16_SkColorType); - } - fDst.reset(fDstInfo.getSafeSize(fDstInfo.minRowBytes())); - - if (FLAGS_xform_only) { - fSrc.reset(fSrcInfo.getSafeSize(fSrcInfo.minRowBytes())); - codec->getPixels(fSrcInfo, fSrc.get(), fSrcInfo.minRowBytes()); - } else { - // Set-up a row buffer to decode into before transforming to dst. - fSrc.reset(fSrcInfo.minRowBytes()); - } - fSrcData = codec->getICCData(); sk_sp<SkData> dstData = SkData::MakeFromFileName( GetResourcePath("monitor_profiles/HP_ZR30w.icc").c_str()); SkASSERT(dstData); - + fDstSpace = nullptr; #if defined(SK_TEST_QCMS) if (FLAGS_qcms) { fDstSpaceQCMS.reset(FLAGS_srgb ? @@ -196,6 +161,25 @@ void ColorCodecBench::onDelayedSetup() { SkColorSpace::NewICC(dstData->data(), dstData->size()); SkASSERT(fDstSpace); } + + fSrcInfo = codec->getInfo().makeColorType(kRGBA_8888_SkColorType); + + fDstInfo = fSrcInfo.makeColorSpace(fDstSpace); + if (FLAGS_half) { + fDstInfo = fDstInfo.makeColorType(kRGBA_F16_SkColorType); + } + fDst.reset(fDstInfo.getSafeSize(fDstInfo.minRowBytes())); + + if (FLAGS_xform_only) { + fSrc.reset(fSrcInfo.getSafeSize(fSrcInfo.minRowBytes())); + codec->getPixels(fSrcInfo, fSrc.get(), fSrcInfo.minRowBytes()); + } +#if defined(SK_TEST_QCMS) + else if (FLAGS_qcms) { + // Set-up a row buffer to decode into before transforming to dst. + fSrc.reset(fSrcInfo.minRowBytes()); + } +#endif } void ColorCodecBench::onDraw(int n, SkCanvas*) { |