diff --git a/Tests/LibMedia/CMakeLists.txt b/Tests/LibMedia/CMakeLists.txt index d1d37073d26..6faee303106 100644 --- a/Tests/LibMedia/CMakeLists.txt +++ b/Tests/LibMedia/CMakeLists.txt @@ -1,4 +1,5 @@ set(TEST_SOURCES + TestH264Decode.cpp TestParseMatroska.cpp TestVP9Decode.cpp ) @@ -7,6 +8,7 @@ foreach(source IN LISTS TEST_SOURCES) serenity_test("${source}" LibMedia LIBS LibMedia) endforeach() +install(FILES avc_in_matroska.mkv DESTINATION usr/Tests/LibMedia) install(FILES vp9_in_webm.webm DESTINATION usr/Tests/LibMedia) install(FILES vp9_4k.webm DESTINATION usr/Tests/LibMedia) install(FILES vp9_clamp_reference_mvs.webm DESTINATION usr/Tests/LibMedia) diff --git a/Tests/LibMedia/TestH264Decode.cpp b/Tests/LibMedia/TestH264Decode.cpp new file mode 100644 index 00000000000..6e46aa4cbea --- /dev/null +++ b/Tests/LibMedia/TestH264Decode.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2022, Gregory Bertilson + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#include "TestMediaCommon.h" + +static NonnullOwnPtr make_decoder(Media::Matroska::SampleIterator const& iterator) +{ + return MUST(Media::FFmpeg::FFmpegVideoDecoder::try_create(Media::CodecID::H264, iterator.track().codec_private_data())); +} + +TEST_CASE(avc_in_matroska) +{ + decode_video("./avc_in_matroska.mkv"sv, 50, make_decoder); +} diff --git a/Tests/LibMedia/avc_in_matroska.mkv b/Tests/LibMedia/avc_in_matroska.mkv new file mode 100644 index 00000000000..1fbe1647ac6 Binary files /dev/null and b/Tests/LibMedia/avc_in_matroska.mkv differ diff --git a/Userland/Libraries/LibMedia/Containers/Matroska/Reader.h b/Userland/Libraries/LibMedia/Containers/Matroska/Reader.h index 2a8656abcf0..ee0309d4eb9 100644 --- a/Userland/Libraries/LibMedia/Containers/Matroska/Reader.h +++ b/Userland/Libraries/LibMedia/Containers/Matroska/Reader.h @@ -85,6 +85,7 @@ public: DecoderErrorOr next_block(); Cluster const& current_cluster() const { return *m_current_cluster; } Optional const& last_timestamp() const { return m_last_timestamp; } + TrackEntry const& track() const { return *m_track; } private: friend class Reader;