/* * Copyright (c) 2020-2022, Andreas Kling * Copyright (c) 2022, Dex♪ * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Web::Platform { struct Frame { RefPtr bitmap; size_t duration { 0 }; }; struct DecodedImage { bool is_animated { false }; u32 loop_count { 0 }; u32 frame_count { 0 }; Vector frames; Vector all_durations; Gfx::ColorSpace color_space; i64 session_id { 0 }; }; class WEB_API ImageCodecPlugin { public: static ImageCodecPlugin& the(); static bool is_initialized(); static void install(ImageCodecPlugin&); virtual ~ImageCodecPlugin(); virtual NonnullRefPtr> decode_image(ReadonlyBytes, ESCAPING Function(DecodedImage&)> on_resolved, ESCAPING Function on_rejected) = 0; virtual void request_animation_frames(i64 session_id, u32 start_frame_index, u32 count) = 0; virtual void stop_animation_decode(i64 session_id) = 0; Function>)> on_animation_frames_decoded; Function on_animation_decode_failed; }; }