Move SkWuffsCodec's reset_and_decode_image_config
This is just a re-organization, avoiding the need to have both a
declaration and a definition of that function. There is no behavior
change.
Also move to_alpha_type next to the other static functions (as opposed
to methods).
Bug: skia:8235
Change-Id: Ia0c06ec22a3dcc1d8ad66df886096a9657e43d35
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/254357
Commit-Queue: Leon Scroggins <scroggo@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
diff --git a/src/codec/SkWuffsCodec.cpp b/src/codec/SkWuffsCodec.cpp
index 1dbd864..45a01d8 100644
--- a/src/codec/SkWuffsCodec.cpp
+++ b/src/codec/SkWuffsCodec.cpp
@@ -83,10 +83,55 @@
}
}
+static SkAlphaType to_alpha_type(bool opaque) {
+ return opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType;
+}
+
static SkCodec::Result reset_and_decode_image_config(wuffs_gif__decoder* decoder,
wuffs_base__image_config* imgcfg,
wuffs_base__io_buffer* b,
- SkStream* s);
+ SkStream* s) {
+ // Calling decoder->initialize will memset it to zero.
+ const char* status = decoder->initialize(sizeof__wuffs_gif__decoder(), WUFFS_VERSION, 0);
+ if (status != nullptr) {
+ SkCodecPrintf("initialize: %s", status);
+ return SkCodec::kInternalError;
+ }
+ while (true) {
+ status = decoder->decode_image_config(imgcfg, b);
+ if (status == nullptr) {
+ break;
+ } else if (status != wuffs_base__suspension__short_read) {
+ SkCodecPrintf("decode_image_config: %s", status);
+ return SkCodec::kErrorInInput;
+ } else if (!fill_buffer(b, s)) {
+ return SkCodec::kIncompleteInput;
+ }
+ }
+
+ // A GIF image's natural color model is indexed color: 1 byte per pixel,
+ // indexing a 256-element palette.
+ //
+ // For Skia, we override that to decode to 4 bytes per pixel, BGRA or RGBA.
+ wuffs_base__pixel_format pixfmt = 0;
+ switch (kN32_SkColorType) {
+ case kBGRA_8888_SkColorType:
+ pixfmt = WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL;
+ break;
+ case kRGBA_8888_SkColorType:
+ pixfmt = WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL;
+ break;
+ default:
+ return SkCodec::kInternalError;
+ }
+ if (imgcfg) {
+ imgcfg->pixcfg.set(pixfmt, WUFFS_BASE__PIXEL_SUBSAMPLING__NONE, imgcfg->pixcfg.width(),
+ imgcfg->pixcfg.height());
+ }
+
+ return SkCodec::kSuccess;
+}
+
// -------------------------------- Class definitions
@@ -410,10 +455,6 @@
return SkCodec::kSuccess;
}
-static SkAlphaType to_alpha_type(bool opaque) {
- return opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType;
-}
-
SkCodec::Result SkWuffsCodec::onIncrementalDecode(int* rowsDecoded) {
if (!fIncrDecDst) {
return SkCodec::kInternalError;
@@ -721,51 +762,6 @@
// restart_frame, call decode_image_config. The io_buffer and its associated
// stream will also need to be rewound.
-static SkCodec::Result reset_and_decode_image_config(wuffs_gif__decoder* decoder,
- wuffs_base__image_config* imgcfg,
- wuffs_base__io_buffer* b,
- SkStream* s) {
- // Calling decoder->initialize will memset it to zero.
- const char* status = decoder->initialize(sizeof__wuffs_gif__decoder(), WUFFS_VERSION, 0);
- if (status != nullptr) {
- SkCodecPrintf("initialize: %s", status);
- return SkCodec::kInternalError;
- }
- while (true) {
- status = decoder->decode_image_config(imgcfg, b);
- if (status == nullptr) {
- break;
- } else if (status != wuffs_base__suspension__short_read) {
- SkCodecPrintf("decode_image_config: %s", status);
- return SkCodec::kErrorInInput;
- } else if (!fill_buffer(b, s)) {
- return SkCodec::kIncompleteInput;
- }
- }
-
- // A GIF image's natural color model is indexed color: 1 byte per pixel,
- // indexing a 256-element palette.
- //
- // For Skia, we override that to decode to 4 bytes per pixel, BGRA or RGBA.
- wuffs_base__pixel_format pixfmt = 0;
- switch (kN32_SkColorType) {
- case kBGRA_8888_SkColorType:
- pixfmt = WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL;
- break;
- case kRGBA_8888_SkColorType:
- pixfmt = WUFFS_BASE__PIXEL_FORMAT__RGBA_NONPREMUL;
- break;
- default:
- return SkCodec::kInternalError;
- }
- if (imgcfg) {
- imgcfg->pixcfg.set(pixfmt, WUFFS_BASE__PIXEL_SUBSAMPLING__NONE, imgcfg->pixcfg.width(),
- imgcfg->pixcfg.height());
- }
-
- return SkCodec::kSuccess;
-}
-
SkCodec::Result SkWuffsCodec::resetDecoder(WhichDecoder which) {
if (!fStream->rewind()) {
return SkCodec::kInternalError;