From f9d4c0ecbc5b7dc1f8d40bc679a82217ae260575 Mon Sep 17 00:00:00 2001 From: DexesTTP Date: Sun, 3 Apr 2022 18:17:42 +0200 Subject: [PATCH] Utilities: Add image decoding to headless-browser With this, the headless browser can now decode images on its own! --- Userland/Utilities/headless-browser.cpp | 27 +++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/Userland/Utilities/headless-browser.cpp b/Userland/Utilities/headless-browser.cpp index d8e71e8ce8..94fb5d76e0 100644 --- a/Userland/Utilities/headless-browser.cpp +++ b/Userland/Utilities/headless-browser.cpp @@ -223,9 +223,32 @@ public: virtual ~HeadlessImageDecoderClient() override = default; - virtual Optional decode_image(ReadonlyBytes) override + virtual Optional decode_image(ReadonlyBytes data) override { - return {}; + auto decoder = Gfx::ImageDecoder::try_create(data); + + if (!decoder) + return Web::ImageDecoding::DecodedImage { false, 0, Vector {} }; + + if (!decoder->frame_count()) + return Web::ImageDecoding::DecodedImage { false, 0, Vector {} }; + + Vector frames; + for (size_t i = 0; i < decoder->frame_count(); ++i) { + auto frame_or_error = decoder->frame(i); + if (frame_or_error.is_error()) { + frames.append({ {}, 0 }); + } else { + auto frame = frame_or_error.release_value(); + frames.append({ move(frame.image), static_cast(frame.duration) }); + } + } + + return Web::ImageDecoding::DecodedImage { + decoder->is_animated(), + static_cast(decoder->loop_count()), + frames, + }; } private: