diff --git a/src/codec/SkAnimatedImage.cpp b/src/android/SkAnimatedImage.cpp
similarity index 92%
rename from src/codec/SkAnimatedImage.cpp
rename to src/android/SkAnimatedImage.cpp
index dcb4bb9..25c020f 100644
--- a/src/codec/SkAnimatedImage.cpp
+++ b/src/android/SkAnimatedImage.cpp
@@ -5,12 +5,13 @@
  * found in the LICENSE file.
  */
 
+#include "SkAndroidCodec.h"
 #include "SkAnimatedImage.h"
 #include "SkCanvas.h"
 #include "SkCodec.h"
 #include "SkCodecPriv.h"
 
-sk_sp<SkAnimatedImage> SkAnimatedImage::MakeFromCodec(std::unique_ptr<SkCodec> codec) {
+sk_sp<SkAnimatedImage> SkAnimatedImage::Make(std::unique_ptr<SkAndroidCodec> codec) {
     if (!codec) {
         return nullptr;
     }
@@ -27,7 +28,7 @@
 // Sentinel value for starting at the beginning.
 static constexpr double kInit = -1.0;
 
-SkAnimatedImage::SkAnimatedImage(std::unique_ptr<SkCodec> codec)
+SkAnimatedImage::SkAnimatedImage(std::unique_ptr<SkAndroidCodec> codec)
     : fCodec(std::move(codec))
     , fFinished(false)
     , fRunning(false)
@@ -93,7 +94,7 @@
     fNowMS = msecs;
     const double msSinceLastUpdate = fNowMS - lastUpdateMS;
 
-    const int frameCount = fCodec->getFrameCount();
+    const int frameCount = fCodec->codec()->getFrameCount();
     int frameToDecode = SkCodec::kNone;
     if (kInit == msecs) {
         frameToDecode = 0;
@@ -110,7 +111,7 @@
     }
 
     SkCodec::FrameInfo frameInfo;
-    if (fCodec->getFrameInfo(frameToDecode, &frameInfo)) {
+    if (fCodec->codec()->getFrameInfo(frameToDecode, &frameInfo)) {
         if (!frameInfo.fFullyReceived) {
             SkCodecPrintf("Frame %i not fully received\n", frameToDecode);
             fFinished = true;
@@ -126,7 +127,7 @@
                 SkCodecPrintf("Skipping frame %i\n", frameToDecode);
                 pastUpdate -= frameInfo.fDuration;
                 frameToDecode = (frameToDecode + 1) % frameCount;
-                if (!fCodec->getFrameInfo(frameToDecode, &frameInfo)) {
+                if (!fCodec->codec()->getFrameInfo(frameToDecode, &frameInfo)) {
                     SkCodecPrintf("Could not getFrameInfo for frame %i",
                                   frameToDecode);
                     // Prior call to getFrameInfo succeeded, so use that one.
@@ -222,9 +223,10 @@
         }
     }
 
-    auto result = fCodec->getPixels(dst->info(), dst->getPixels(), dst->rowBytes(), &options);
+    auto result = fCodec->codec()->getPixels(dst->info(), dst->getPixels(), dst->rowBytes(),
+                                             &options);
     if (result != SkCodec::kSuccess) {
-        SkCodecPrintf("error %i, frame %i of %i\n", result, frameToDecode, fCodec->getFrameCount());
+        SkCodecPrintf("error %i, frame %i of %i\n", result, frameToDecode, frameCount);
         // Reset to the beginning.
         fActiveFrame.fIndex = SkCodec::kNone;
         return 0.0;
diff --git a/src/codec/SkCodec.cpp b/src/codec/SkCodec.cpp
index d0fb43a..b2902ca 100644
--- a/src/codec/SkCodec.cpp
+++ b/src/codec/SkCodec.cpp
@@ -237,8 +237,8 @@
         return kInvalidParameters;
     }
 
-    if (options.fSubset || info.dimensions() != fSrcInfo.dimensions()) {
-        // If we add support for these, we need to update the code that zeroes
+    if (options.fSubset) {
+        // If we add support for this, we need to update the code that zeroes
         // a kRestoreBGColor frame.
         return kInvalidParameters;
     }
@@ -275,7 +275,29 @@
                     // If a frame after the required frame is provided, there is no
                     // need to clear, since it must be covered by the desired frame.
                     if (options.fPriorFrame == requiredFrame) {
-                        zero_rect(info, pixels, rowBytes, prevFrame->frameRect());
+                        SkIRect prevRect = prevFrame->frameRect();
+                        if (info.dimensions() != fSrcInfo.dimensions()) {
+                            auto src = SkRect::Make(fSrcInfo.dimensions());
+                            auto dst = SkRect::Make(info.dimensions());
+                            SkMatrix map = SkMatrix::MakeRectToRect(src, dst,
+                                    SkMatrix::kCenter_ScaleToFit);
+                            SkRect asRect = SkRect::Make(prevRect);
+                            if (!map.mapRect(&asRect)) {
+                                return kInternalError;
+                            }
+                            asRect.roundIn(&prevRect);
+                            if (prevRect.isEmpty()) {
+                                // Down-scaling shrank the empty portion to nothing,
+                                // so nothing to zero.
+                                break;
+                            }
+                            if (!prevRect.intersect(SkIRect::MakeSize(info.dimensions()))) {
+                                SkCodecPrintf("rectangles do not intersect!");
+                                SkASSERT(false);
+                                break;
+                            }
+                        }
+                        zero_rect(info, pixels, rowBytes, prevRect);
                     }
                     break;
                 default:
diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp
index ca63349..aa3547d 100644
--- a/src/codec/SkWebpCodec.cpp
+++ b/src/codec/SkWebpCodec.cpp
@@ -402,7 +402,7 @@
     SkASSERT(0 == index || index < fFrameHolder.size());
 
     const auto& srcInfo = this->getInfo();
-    SkASSERT(0 == index || (!options.fSubset && dstInfo.dimensions() == srcInfo.dimensions()));
+    SkASSERT(0 == index || !options.fSubset);
 
     WebPDecoderConfig config;
     if (0 == WebPInitDecoderConfig(&config)) {
