Skip to content

Commit

Permalink
TestImageWriter: Add a test for writing a webp animation
Browse files Browse the repository at this point in the history
  • Loading branch information
nico committed May 11, 2024
1 parent 3363493 commit 9e8d7e6
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions Tests/LibGfx/TestImageWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,3 +145,34 @@ TEST_CASE(test_webp_icc)
auto reencoded_icc_data = TRY_OR_FAIL(Gfx::ICC::encode(decoded_rgba_profile));
EXPECT_EQ(sRGB_icc_data, reencoded_icc_data);
}

TEST_CASE(test_webp_animation)
{
auto rgb_bitmap = TRY_OR_FAIL(create_test_rgb_bitmap());
auto rgba_bitmap = TRY_OR_FAIL(create_test_rgba_bitmap());

// 20 kiB is enough for two 47x33 frames.
auto stream_buffer = TRY_OR_FAIL(ByteBuffer::create_uninitialized(20 * 1024));
FixedMemoryStream stream { Bytes { stream_buffer } };

auto animation_writer = TRY_OR_FAIL(Gfx::WebPWriter::start_encoding_animation(stream, rgb_bitmap->size()));

TRY_OR_FAIL(animation_writer->add_frame(*rgb_bitmap, 100));
TRY_OR_FAIL(animation_writer->add_frame(*rgba_bitmap, 200));

auto encoded_animation = ReadonlyBytes { stream_buffer.data(), stream.offset() };

auto decoded_animation_plugin = TRY_OR_FAIL(Gfx::WebPImageDecoderPlugin::create(encoded_animation));
EXPECT(decoded_animation_plugin->is_animated());
EXPECT_EQ(decoded_animation_plugin->frame_count(), 2u);
EXPECT_EQ(decoded_animation_plugin->loop_count(), 0u);
EXPECT_EQ(decoded_animation_plugin->size(), rgb_bitmap->size());

auto frame0 = TRY_OR_FAIL(decoded_animation_plugin->frame(0));
EXPECT_EQ(frame0.duration, 100);
expect_bitmaps_equal(*frame0.image, *rgb_bitmap);

auto frame1 = TRY_OR_FAIL(decoded_animation_plugin->frame(1));
EXPECT_EQ(frame1.duration, 200);
expect_bitmaps_equal(*frame1.image, *rgba_bitmap);
}

0 comments on commit 9e8d7e6

Please sign in to comment.