/* * Copyright (c) 2022, Dex♪ * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include "ImageCodecPlugin.h" #ifdef AK_OS_ANDROID # include #else # include "HelperProcess.h" #endif #include "Utilities.h" #include #include #include namespace Ladybird { ImageCodecPlugin::~ImageCodecPlugin() = default; Optional ImageCodecPlugin::decode_image(ReadonlyBytes bytes) { if (!m_client) { #ifdef AK_OS_ANDROID m_client = MUST(bind_service(&bind_image_decoder_java)); #else auto candidate_image_decoder_paths = get_paths_for_helper_process("ImageDecoder"sv).release_value_but_fixme_should_propagate_errors(); m_client = launch_image_decoder_process(candidate_image_decoder_paths).release_value_but_fixme_should_propagate_errors(); #endif m_client->on_death = [&] { m_client = nullptr; }; } auto result_or_empty = m_client->decode_image(bytes); if (!result_or_empty.has_value()) return {}; auto result = result_or_empty.release_value(); Web::Platform::DecodedImage decoded_image; decoded_image.is_animated = result.is_animated; decoded_image.loop_count = result.loop_count; for (auto const& frame : result.frames) { decoded_image.frames.empend(move(frame.bitmap), frame.duration); } return decoded_image; } }