diff --git a/Libraries/LibMedia/PlaybackManager.cpp b/Libraries/LibMedia/PlaybackManager.cpp index 643d0e42614..eae5e09204d 100644 --- a/Libraries/LibMedia/PlaybackManager.cpp +++ b/Libraries/LibMedia/PlaybackManager.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -16,9 +17,14 @@ namespace Media { -DecoderErrorOr> PlaybackManager::try_create(NonnullOwnPtr&& stream) +DecoderErrorOr> PlaybackManager::try_create(ReadonlyBytes data) { - auto inner_demuxer = DECODER_TRY_ALLOC(FFmpeg::FFmpegDemuxer::create(move(stream))); + auto inner_demuxer = TRY([&] -> DecoderErrorOr> { + auto matroska_result = Matroska::MatroskaDemuxer::from_data(data); + if (!matroska_result.is_error()) + return matroska_result.release_value(); + return DECODER_TRY_ALLOC(FFmpeg::FFmpegDemuxer::create(make(data))); + }()); auto demuxer = DECODER_TRY_ALLOC(try_make_ref_counted(inner_demuxer)); // Create the weak wrapper. diff --git a/Libraries/LibMedia/PlaybackManager.h b/Libraries/LibMedia/PlaybackManager.h index 341ccdf3367..2194f36c8b4 100644 --- a/Libraries/LibMedia/PlaybackManager.h +++ b/Libraries/LibMedia/PlaybackManager.h @@ -36,7 +36,7 @@ public: using AudioTracks = Vector; - static DecoderErrorOr> try_create(NonnullOwnPtr&& stream); + static DecoderErrorOr> try_create(ReadonlyBytes data); ~PlaybackManager(); AK::Duration current_time() const; diff --git a/Libraries/LibWeb/HTML/HTMLMediaElement.cpp b/Libraries/LibWeb/HTML/HTMLMediaElement.cpp index 075d6f51481..96c104b88c9 100644 --- a/Libraries/LibWeb/HTML/HTMLMediaElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLMediaElement.cpp @@ -1173,7 +1173,7 @@ WebIDL::ExceptionOr HTMLMediaElement::process_media_data(Functionrealm(); - auto playback_manager_result = Media::PlaybackManager::try_create(make(m_media_data.bytes())); + auto playback_manager_result = Media::PlaybackManager::try_create(m_media_data.bytes()); // -> If the media data cannot be fetched at all, due to network errors, causing the user agent to give up trying to fetch the resource // -> If the media data can be fetched but is found by inspection to be in an unsupported format, or can otherwise not be rendered at all