Skip to content

Commit

Permalink
LibVideo: Add test to ensure that a VP9 WebM file will decode
Browse files Browse the repository at this point in the history
This will test decoding of one second of video, to ensure that it can
fully decode the entire file.
  • Loading branch information
Zaggy1024 authored and ADKaster committed Oct 10, 2022
1 parent b71d13b commit d672313
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 0 deletions.
1 change: 1 addition & 0 deletions Tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ add_subdirectory(LibTextCodec)
add_subdirectory(LibThreading)
add_subdirectory(LibTimeZone)
add_subdirectory(LibUnicode)
add_subdirectory(LibVideo)
add_subdirectory(LibWasm)
add_subdirectory(LibWeb)
add_subdirectory(LibXML)
Expand Down
9 changes: 9 additions & 0 deletions Tests/LibVideo/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
set(TEST_SOURCES
TestVP9Decode.cpp
)

foreach(source IN LISTS TEST_SOURCES)
serenity_test("${source}" LibVideo LIBS LibVideo)
endforeach()

install(FILES vp9_in_webm.webm DESTINATION usr/Tests/LibVideo)
37 changes: 37 additions & 0 deletions Tests/LibVideo/TestVP9Decode.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (c) 2022, Gregory Bertilson <[email protected]>
*
* SPDX-License-Identifier: BSD-2-Clause
*/

#include <LibTest/TestCase.h>

#include <LibVideo/MatroskaReader.h>
#include <LibVideo/VP9/Decoder.h>

TEST_CASE(webm_in_vp9)
{
auto matroska_document = Video::MatroskaReader::MatroskaReader::parse_matroska_from_file("./vp9_in_webm.webm"sv);
VERIFY(matroska_document);
auto video_track_optional = matroska_document->track_for_track_type(Video::TrackEntry::TrackType::Video);
VERIFY(video_track_optional.has_value());
auto video_track_entry = video_track_optional.value();

size_t cluster_index, block_index, frame_index;
Video::VP9::Decoder vp9_decoder;

for (cluster_index = 0; cluster_index < matroska_document->clusters().size(); cluster_index++) {
auto const& cluster = matroska_document->clusters()[cluster_index];
for (block_index = 0; block_index < cluster.blocks().size(); block_index++) {
auto const& block = cluster.blocks()[block_index];
if (block.track_number() != video_track_entry.track_number())
continue;

for (frame_index = 0; frame_index < block.frames().size(); frame_index++) {
MUST(vp9_decoder.decode(block.frames()[frame_index]));
}
}
}

VERIFY(cluster_index == 1 && block_index == 25 && frame_index == 1);
}
Binary file added Tests/LibVideo/vp9_in_webm.webm
Binary file not shown.

0 comments on commit d672313

Please sign in to comment.