From 374a24d84c2ae42ca5d4bf046b65f64c8476a4d2 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 25 Apr 2023 09:02:24 -0400 Subject: [PATCH] LibVideo: Remove hook to override LibVideo's playback timers This was added to allow Ladybird to override the timers with Qt timers. --- .../Libraries/LibVideo/PlaybackManager.cpp | 45 +++++-------------- Userland/Libraries/LibVideo/PlaybackManager.h | 23 +++------- 2 files changed, 18 insertions(+), 50 deletions(-) diff --git a/Userland/Libraries/LibVideo/PlaybackManager.cpp b/Userland/Libraries/LibVideo/PlaybackManager.cpp index 349af219f9..8af53cbce8 100644 --- a/Userland/Libraries/LibVideo/PlaybackManager.cpp +++ b/Userland/Libraries/LibVideo/PlaybackManager.cpp @@ -25,39 +25,19 @@ namespace Video { _fatal_expression.release_value(); \ }) -class DefaultPlaybackTimer final : public PlaybackTimer { -public: - static ErrorOr> create(int interval_ms, Function&& timeout_handler) - { - auto timer = TRY(Core::Timer::create_single_shot(interval_ms, move(timeout_handler))); - return adopt_nonnull_own_or_enomem(new (nothrow) DefaultPlaybackTimer(move(timer))); - } - - virtual void start() override { m_timer->start(); } - virtual void start(int interval_ms) override { m_timer->start(interval_ms); } - -private: - explicit DefaultPlaybackTimer(NonnullRefPtr timer) - : m_timer(move(timer)) - { - } - - NonnullRefPtr m_timer; -}; - -DecoderErrorOr> PlaybackManager::from_file(StringView filename, PlaybackTimerCreator playback_timer_creator) +DecoderErrorOr> PlaybackManager::from_file(StringView filename) { auto demuxer = TRY(Matroska::MatroskaDemuxer::from_file(filename)); - return create_with_demuxer(move(demuxer), move(playback_timer_creator)); + return create_with_demuxer(move(demuxer)); } -DecoderErrorOr> PlaybackManager::from_data(ReadonlyBytes data, PlaybackTimerCreator playback_timer_creator) +DecoderErrorOr> PlaybackManager::from_data(ReadonlyBytes data) { auto demuxer = TRY(Matroska::MatroskaDemuxer::from_data(data)); - return create_with_demuxer(move(demuxer), move(playback_timer_creator)); + return create_with_demuxer(move(demuxer)); } -DecoderErrorOr> PlaybackManager::create_with_demuxer(NonnullOwnPtr demuxer, PlaybackTimerCreator playback_timer_creator) +DecoderErrorOr> PlaybackManager::create_with_demuxer(NonnullOwnPtr demuxer) { auto video_tracks = TRY(demuxer->get_tracks_for_type(TrackType::Video)); if (video_tracks.is_empty()) @@ -66,27 +46,24 @@ DecoderErrorOr> PlaybackManager::create_with_demu dbgln_if(PLAYBACK_MANAGER_DEBUG, "Selecting video track number {}", track.identifier()); - return make(demuxer, track, make(), move(playback_timer_creator)); + return make(demuxer, track, make()); } -PlaybackManager::PlaybackManager(NonnullOwnPtr& demuxer, Track video_track, NonnullOwnPtr&& decoder, PlaybackTimerCreator playback_timer_creator) +PlaybackManager::PlaybackManager(NonnullOwnPtr& demuxer, Track video_track, NonnullOwnPtr&& decoder) : m_demuxer(move(demuxer)) , m_selected_video_track(video_track) , m_decoder(move(decoder)) , m_frame_queue(make()) , m_playback_handler(make(*this, false, Time::zero(), SeekMode::Fast)) { - if (playback_timer_creator) { - m_present_timer = playback_timer_creator(0, [&] { timer_callback(); }).release_value_but_fixme_should_propagate_errors(); - m_decode_timer = playback_timer_creator(0, [&] { on_decode_timer(); }).release_value_but_fixme_should_propagate_errors(); - } else { - m_present_timer = DefaultPlaybackTimer::create(0, [&] { timer_callback(); }).release_value_but_fixme_should_propagate_errors(); - m_decode_timer = DefaultPlaybackTimer::create(0, [&] { on_decode_timer(); }).release_value_but_fixme_should_propagate_errors(); - } + m_present_timer = Core::Timer::create_single_shot(0, [&] { timer_callback(); }).release_value_but_fixme_should_propagate_errors(); + m_decode_timer = Core::Timer::create_single_shot(0, [&] { on_decode_timer(); }).release_value_but_fixme_should_propagate_errors(); TRY_OR_FATAL_ERROR(m_playback_handler->on_enter()); } +PlaybackManager::~PlaybackManager() = default; + void PlaybackManager::resume_playback() { dbgln_if(PLAYBACK_MANAGER_DEBUG, "Resuming playback."); diff --git a/Userland/Libraries/LibVideo/PlaybackManager.h b/Userland/Libraries/LibVideo/PlaybackManager.h index 49390319a1..01f55e29e7 100644 --- a/Userland/Libraries/LibVideo/PlaybackManager.h +++ b/Userland/Libraries/LibVideo/PlaybackManager.h @@ -83,14 +83,6 @@ private: static constexpr size_t FRAME_BUFFER_COUNT = 4; using VideoFrameQueue = Queue; -class PlaybackTimer { -public: - virtual ~PlaybackTimer() = default; - - virtual void start() = 0; - virtual void start(int interval_ms) = 0; -}; - enum class PlaybackState { Playing, Paused, @@ -108,12 +100,11 @@ public: static constexpr SeekMode DEFAULT_SEEK_MODE = SeekMode::Accurate; - using PlaybackTimerCreator = Function>(int, Function)>; + static DecoderErrorOr> from_file(StringView file); + static DecoderErrorOr> from_data(ReadonlyBytes data); - static DecoderErrorOr> from_file(StringView file, PlaybackTimerCreator = nullptr); - static DecoderErrorOr> from_data(ReadonlyBytes data, PlaybackTimerCreator = nullptr); - - PlaybackManager(NonnullOwnPtr& demuxer, Track video_track, NonnullOwnPtr&& decoder, PlaybackTimerCreator); + PlaybackManager(NonnullOwnPtr& demuxer, Track video_track, NonnullOwnPtr&& decoder); + ~PlaybackManager(); void resume_playback(); void pause_playback(); @@ -150,7 +141,7 @@ private: class SeekingStateHandler; class StoppedStateHandler; - static DecoderErrorOr> create_with_demuxer(NonnullOwnPtr demuxer, PlaybackTimerCreator playback_timer_creator); + static DecoderErrorOr> create_with_demuxer(NonnullOwnPtr demuxer); void start_timer(int milliseconds); void timer_callback(); @@ -174,10 +165,10 @@ private: NonnullOwnPtr m_frame_queue; - OwnPtr m_present_timer; + RefPtr m_present_timer; unsigned m_decoding_buffer_time_ms = 16; - OwnPtr m_decode_timer; + RefPtr m_decode_timer; NonnullOwnPtr m_playback_handler; Optional m_next_frame;