Implement SkHeifCodec::onRewind

Bug: 130458015
Test: Id2d70e95d2d879d2ff5e2cb985d3542731108909

SkHeifCodec needs to reset some of its state between decoding calls. Do
so in onRewind. This mimics SkJpegCodec, on which SkHeifCodec is
modelled.

Change-Id: I380a8ed88c98eaedc6f6ff1ff115bb2dea68bd56
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/208180
Auto-Submit: Leon Scroggins <scroggo@google.com>
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
diff --git a/src/codec/SkHeifCodec.cpp b/src/codec/SkHeifCodec.cpp
index dcbfabc..dadb4cd 100644
--- a/src/codec/SkHeifCodec.cpp
+++ b/src/codec/SkHeifCodec.cpp
@@ -332,6 +332,15 @@
     return fSwizzler.get();
 }
 
+bool SkHeifCodec::onRewind() {
+    fSwizzler.reset(nullptr);
+    fSwizzleSrcRow = nullptr;
+    fColorXformSrcRow = nullptr;
+    fStorage.reset();
+
+    return true;
+}
+
 SkCodec::Result SkHeifCodec::onStartScanlineDecode(
         const SkImageInfo& dstInfo, const Options& options) {
     // TODO: For now, just decode the whole thing even when there is a subset.
diff --git a/src/codec/SkHeifCodec.h b/src/codec/SkHeifCodec.h
index e409097..d844f57 100644
--- a/src/codec/SkHeifCodec.h
+++ b/src/codec/SkHeifCodec.h
@@ -43,6 +43,8 @@
 
     bool conversionSupported(const SkImageInfo&, bool, bool) override;
 
+    bool onRewind() override;
+
 private:
     /*
      * Creates an instance of the decoder