SkCrabbyAvifCodec: Return correct image type

Instead of always returning the image format as AVIF, return
either HEIF or AVIF depending on the actual image.

Bug: b/323753814
Change-Id: I5cd49cb1a86e7942e4e63aadae8821e863e71da3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/936936
Reviewed-by: Noelle Scobie <nscobie@google.com>
Commit-Queue: Vignesh Venkat <vigneshv@google.com>
diff --git a/src/codec/SkCrabbyAvifCodec.cpp b/src/codec/SkCrabbyAvifCodec.cpp
index 8c450aa..6d17fe9 100644
--- a/src/codec/SkCrabbyAvifCodec.cpp
+++ b/src/codec/SkCrabbyAvifCodec.cpp
@@ -208,13 +208,18 @@
             width, height, color, alpha, bitsPerComponent, std::move(profile), image->depth);
     bool animation = avifDecoder->imageCount > 1;
     *result = kSuccess;
+    SkEncodedImageFormat format =
+            avifDecoder->compressionFormat == crabbyavif::COMPRESSION_FORMAT_AVIF
+                    ? SkEncodedImageFormat::kAVIF
+                    : SkEncodedImageFormat::kHEIF;
     return std::unique_ptr<SkCodec>(new SkCrabbyAvifCodec(std::move(info),
                                                           std::move(stream),
                                                           std::move(data),
                                                           std::move(avifDecoder),
                                                           kDefault_SkEncodedOrigin,
                                                           animation,
-                                                          gainmapOnly));
+                                                          gainmapOnly,
+                                                          format));
 }
 
 SkCrabbyAvifCodec::SkCrabbyAvifCodec(SkEncodedInfo&& info,
@@ -223,12 +228,14 @@
                                      AvifDecoder avifDecoder,
                                      SkEncodedOrigin origin,
                                      bool useAnimation,
-                                     bool gainmapOnly)
+                                     bool gainmapOnly,
+                                     SkEncodedImageFormat format)
         : SkScalingCodec(std::move(info), skcms_PixelFormat_RGBA_8888, std::move(stream), origin)
         , fData(std::move(data))
         , fAvifDecoder(std::move(avifDecoder))
         , fUseAnimation(useAnimation)
-        , fGainmapOnly(gainmapOnly) {}
+        , fGainmapOnly(gainmapOnly)
+        , fFormat(format) {}
 
 int SkCrabbyAvifCodec::onGetFrameCount() {
     if (!fUseAnimation) {
diff --git a/src/codec/SkCrabbyAvifCodec.h b/src/codec/SkCrabbyAvifCodec.h
index 664739c..df31de1 100644
--- a/src/codec/SkCrabbyAvifCodec.h
+++ b/src/codec/SkCrabbyAvifCodec.h
@@ -55,7 +55,7 @@
                        const Options& options,
                        int* rowsDecoded) override;
 
-    SkEncodedImageFormat onGetEncodedFormat() const override { return SkEncodedImageFormat::kAVIF; }
+    SkEncodedImageFormat onGetEncodedFormat() const override { return fFormat; }
 
     int onGetFrameCount() override;
     bool onGetFrameInfo(int, FrameInfo*) const override;
@@ -71,7 +71,8 @@
                       AvifDecoder,
                       SkEncodedOrigin,
                       bool,
-                      bool);
+                      bool,
+                      SkEncodedImageFormat);
 
     static std::unique_ptr<SkCodec> MakeFromData(std::unique_ptr<SkStream>,
                                                  sk_sp<SkData>,
@@ -86,6 +87,7 @@
     AvifDecoder fAvifDecoder;
     bool fUseAnimation;
     bool fGainmapOnly;
+    const SkEncodedImageFormat fFormat;
 
     class Frame : public SkFrame {
     public: