From 46f94a40a885200c2214de1e3aaae2438c97cb00 Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Wed, 26 Feb 2025 16:36:09 +0100 Subject: [PATCH] LibGfx+ImageDecoder: Use RefPtr instead of optional Simplify the list of bitmaps a bit by changing `Optional>` into `RefPtr`. No functional changes. --- Libraries/LibGfx/BitmapSequence.cpp | 13 ++++++------- Libraries/LibGfx/BitmapSequence.h | 2 +- Libraries/LibImageDecoderClient/Client.cpp | 4 ++-- Services/ImageDecoder/ConnectionFromClient.cpp | 4 ++-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/Libraries/LibGfx/BitmapSequence.cpp b/Libraries/LibGfx/BitmapSequence.cpp index 721559a61d3..ed3d6f4de9c 100644 --- a/Libraries/LibGfx/BitmapSequence.cpp +++ b/Libraries/LibGfx/BitmapSequence.cpp @@ -66,8 +66,8 @@ ErrorOr encode(Encoder& encoder, Gfx::BitmapSequence const& bitmap_sequenc for (auto const& bitmap_option : bitmaps) { Optional data = {}; - if (bitmap_option.has_value()) { - data = get_metadata(bitmap_option.value()); + if (bitmap_option) { + data = get_metadata(*bitmap_option); total_buffer_size += data->size_in_bytes; } @@ -84,9 +84,8 @@ ErrorOr encode(Encoder& encoder, Gfx::BitmapSequence const& bitmap_sequenc Bytes buffer_bytes = { collated_buffer.data(), collated_buffer.size() }; size_t write_offset = 0; - for (auto const& bitmap_option : bitmaps) { - if (bitmap_option.has_value()) { - auto const& bitmap = bitmap_option.value(); + for (auto const& bitmap : bitmaps) { + if (bitmap) { buffer_bytes.overwrite(write_offset, bitmap->scanline(0), bitmap->size_in_bytes()); write_offset += bitmap->size_in_bytes(); } @@ -118,7 +117,7 @@ ErrorOr decode(Decoder& decoder) // sequentially read each valid bitmap's data from the collated buffer for (auto const& metadata_option : metadata_list) { - Optional> bitmap = {}; + RefPtr bitmap; if (metadata_option.has_value()) { auto metadata = metadata_option.value(); @@ -139,7 +138,7 @@ ErrorOr decode(Decoder& decoder) bitmap = TRY(Gfx::Bitmap::create_with_anonymous_buffer(metadata.format, metadata.alpha_type, move(buffer), metadata.size)); } - bitmaps.append(move(bitmap)); + bitmaps.append(bitmap); } return result; diff --git a/Libraries/LibGfx/BitmapSequence.h b/Libraries/LibGfx/BitmapSequence.h index ae440766b2f..8f4f8f6580a 100644 --- a/Libraries/LibGfx/BitmapSequence.h +++ b/Libraries/LibGfx/BitmapSequence.h @@ -14,7 +14,7 @@ namespace Gfx { struct BitmapSequence { - Vector>> bitmaps; + Vector> bitmaps; }; // a struct to temporarily store bitmap fields before the buffer data is decoded diff --git a/Libraries/LibImageDecoderClient/Client.cpp b/Libraries/LibImageDecoderClient/Client.cpp index a2220f0d5d6..1f240417336 100644 --- a/Libraries/LibImageDecoderClient/Client.cpp +++ b/Libraries/LibImageDecoderClient/Client.cpp @@ -76,13 +76,13 @@ void Client::did_decode_image(i64 image_id, bool is_animated, u32 loop_count, Gf image.frames.ensure_capacity(bitmaps.size()); image.color_space = move(color_space); for (size_t i = 0; i < bitmaps.size(); ++i) { - if (!bitmaps[i].has_value()) { + if (!bitmaps[i]) { dbgln("ImageDecoderClient: Invalid bitmap for request {} at index {}", image_id, i); promise->reject(Error::from_string_literal("Invalid bitmap")); return; } - image.frames.empend(bitmaps[i].release_value(), durations[i]); + image.frames.empend(bitmaps[i].release_nonnull(), durations[i]); } promise->resolve(move(image)); diff --git a/Services/ImageDecoder/ConnectionFromClient.cpp b/Services/ImageDecoder/ConnectionFromClient.cpp index 08b04a10439..fd7653455db 100644 --- a/Services/ImageDecoder/ConnectionFromClient.cpp +++ b/Services/ImageDecoder/ConnectionFromClient.cpp @@ -84,7 +84,7 @@ Messages::ImageDecoderServer::ConnectNewClientsResponse ConnectionFromClient::co return files; } -static void decode_image_to_bitmaps_and_durations_with_decoder(Gfx::ImageDecoder const& decoder, Optional ideal_size, Vector>>& bitmaps, Vector& durations) +static void decode_image_to_bitmaps_and_durations_with_decoder(Gfx::ImageDecoder const& decoder, Optional ideal_size, Vector>& bitmaps, Vector& durations) { for (size_t i = 0; i < decoder.frame_count(); ++i) { auto frame_or_error = decoder.frame(i, ideal_size); @@ -118,7 +118,7 @@ static ErrorOr decode_image_to_details(Core: else dbgln("Invalid color profile: {}", maybe_icc_data.error()); - Vector>> bitmaps; + Vector> bitmaps; if (auto maybe_metadata = decoder->metadata(); maybe_metadata.has_value() && is(*maybe_metadata)) { auto const& exif = static_cast(maybe_metadata.value());