From: Matt Sarett Date: Fri, 19 May 2017 23:12:54 +0000 (-0400) Subject: SkWebpEncoder: use bgra for lossless and yuv for lossy X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~36^2~107 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2f687877835b60497a48537b940cd634088eedf4;p=platform%2Fupstream%2FlibSkiaSharp.git SkWebpEncoder: use bgra for lossless and yuv for lossy Previosuly, we would (accidentally) always use just yuv. Bug: 713862 Change-Id: I00acc6ca2841ba0636494119b7b4f46a9deee401 Reviewed-on: https://skia-review.googlesource.com/17406 Commit-Queue: Matt Sarett Reviewed-by: Leon Scroggins --- diff --git a/src/images/SkWebpEncoder.cpp b/src/images/SkWebpEncoder.cpp index 276837c..38e6773 100644 --- a/src/images/SkWebpEncoder.cpp +++ b/src/images/SkWebpEncoder.cpp @@ -167,25 +167,29 @@ bool SkWebpEncoder::Encode(SkWStream* stream, const SkPixmap& pixmap, const Opti return false; } - // The choice of |webp_config.method| currently just match Chrome's defaults. We - // could potentially expose this to the client. + WebPPicture pic; + WebPPictureInit(&pic); + SkAutoTCallVProc autoPic(&pic); + pic.width = pixmap.width(); + pic.height = pixmap.height(); + pic.writer = stream_writer; + + // Set compression, method, and pixel format. + // libwebp recommends using BGRA for lossless and YUV for lossy. + // The choices of |webp_config.method| currently just match Chrome's defaults. We + // could potentially expose this decision to the client. if (Compression::kLossy == opts.fCompression) { webp_config.lossless = 0; #ifndef SK_WEBP_ENCODER_USE_DEFAULT_METHOD webp_config.method = 3; #endif + pic.use_argb = 0; } else { webp_config.lossless = 1; webp_config.method = 0; + pic.use_argb = 1; } - WebPPicture pic; - WebPPictureInit(&pic); - SkAutoTCallVProc autoPic(&pic); - pic.width = pixmap.width(); - pic.height = pixmap.height(); - pic.writer = stream_writer; - // If there is no need to embed an ICC profile, we write directly to the input stream. // Otherwise, we will first encode to |tmp| and use a mux to add the ICC chunk. libwebp // forces us to have an encoded image before we can add a profile. diff --git a/tests/EncodeTest.cpp b/tests/EncodeTest.cpp index 102b4cd..4d0ade1 100644 --- a/tests/EncodeTest.cpp +++ b/tests/EncodeTest.cpp @@ -255,6 +255,6 @@ DEF_TEST(Encode_WebpOptions, r) { SkImage::MakeFromEncoded(data2)->asLegacyBitmap(&bm2, SkImage::kRO_LegacyBitmapMode); SkImage::MakeFromEncoded(data3)->asLegacyBitmap(&bm3, SkImage::kRO_LegacyBitmapMode); REPORTER_ASSERT(r, almost_equals(bm0, bm1, 0)); - REPORTER_ASSERT(r, almost_equals(bm0, bm2, 6)); + REPORTER_ASSERT(r, almost_equals(bm0, bm2, 90)); REPORTER_ASSERT(r, almost_equals(bm2, bm3, 45)); }