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: