Make DMSrcSink fail fatally when decodeRegion() fails for BRDSrcs
authormsarett <msarett@google.com>
Tue, 27 Oct 2015 20:28:25 +0000 (13:28 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 27 Oct 2015 20:28:25 +0000 (13:28 -0700)
This involves disabling webps for kCanvas_Strategy.
We have not yet implemented webp subset decodes for this
strategy.

BUG=skia:4521

Review URL: https://codereview.chromium.org/1405273004

dm/DMSrcSink.cpp
tools/SkBitmapRegionDecoderInterface.cpp

index b14c573..1a84550 100644 (file)
@@ -128,10 +128,7 @@ Error BRDSrc::draw(SkCanvas* canvas) const {
             SkBitmap bitmap;
             if (!brd->decodeRegion(&bitmap, nullptr, SkIRect::MakeXYWH(0, 0, width, height),
                     fSampleSize, colorType, false)) {
-                // FIXME: Make this a fatal error.  We need to disable webps for kCanvas_Strategy
-                // because we have not implemented kCanvas_Strategy for webp.  We may also need to
-                // deal with color conversion errors for kOriginal_Strategy.
-                return Error::Nonfatal("Cannot decode region.\n");
+                return "Cannot decode region.\n";
             }
             if (colorType != bitmap.colorType()) {
                 return Error::Nonfatal("Cannot convert to color type.\n");
@@ -187,11 +184,7 @@ Error BRDSrc::draw(SkCanvas* canvas) const {
                     SkBitmap bitmap;
                     if (!brd->decodeRegion(&bitmap, nullptr, SkIRect::MakeXYWH(decodeLeft,
                             decodeTop, decodeWidth, decodeHeight), fSampleSize, colorType, false)) {
-                        // FIXME: Make this a fatal error.  We need to disable webps for
-                        // kCanvas_Strategy because we have not implemented kCanvas_Strategy for
-                        // webp.  We may also need to deal with color conversion errors for
-                        // kOriginal_Strategy.
-                        return Error::Nonfatal("Cannot not decode region.\n");
+                        return "Cannot not decode region.\n";
                     }
                     if (colorType != bitmap.colorType()) {
                         return Error::Nonfatal("Cannot convert to color type.\n");
index 5941538..d009b27 100644 (file)
@@ -44,6 +44,13 @@ SkBitmapRegionDecoderInterface* SkBitmapRegionDecoderInterface::CreateBitmapRegi
                 SkCodecPrintf("Error: Failed to create decoder.\n");
                 return nullptr;
             }
+
+            if (SkEncodedFormat::kWEBP_SkEncodedFormat == codec->getEncodedFormat()) {
+                // FIXME: Support webp using a special case.  Webp does not support
+                //        scanline decoding.
+                return nullptr;
+            }
+
             switch (codec->getScanlineOrder()) {
                 case SkCodec::kTopDown_SkScanlineOrder:
                 case SkCodec::kNone_SkScanlineOrder: