diff --git a/Userland/Libraries/LibVideo/PlaybackManager.cpp b/Userland/Libraries/LibVideo/PlaybackManager.cpp index aac34df3043..84370c08bd1 100644 --- a/Userland/Libraries/LibVideo/PlaybackManager.cpp +++ b/Userland/Libraries/LibVideo/PlaybackManager.cpp @@ -96,11 +96,7 @@ PlaybackManager::PlaybackManager(NonnullOwnPtr& demuxer, Track video_tr PlaybackManager::~PlaybackManager() { - m_stop_decoding.exchange(true); - m_decode_wait_condition.broadcast(); - dbgln_if(PLAYBACK_MANAGER_DEBUG, "Waiting for decode thread to end..."); - (void)m_decode_thread->join(); - dbgln_if(PLAYBACK_MANAGER_DEBUG, "Successfully destroyed PlaybackManager."); + terminate_playback(); } void PlaybackManager::resume_playback() @@ -117,6 +113,18 @@ void PlaybackManager::pause_playback() TRY_OR_FATAL_ERROR(m_playback_handler->pause()); } +void PlaybackManager::terminate_playback() +{ + m_stop_decoding.exchange(true); + m_decode_wait_condition.broadcast(); + + if (m_decode_thread->needs_to_be_joined()) { + dbgln_if(PLAYBACK_MANAGER_DEBUG, "Waiting for decode thread to end..."); + (void)m_decode_thread->join(); + dbgln_if(PLAYBACK_MANAGER_DEBUG, "Successfully destroyed PlaybackManager."); + } +} + Duration PlaybackManager::current_playback_time() { return m_playback_handler->current_time(); diff --git a/Userland/Libraries/LibVideo/PlaybackManager.h b/Userland/Libraries/LibVideo/PlaybackManager.h index 3d85b11ad47..de41b905255 100644 --- a/Userland/Libraries/LibVideo/PlaybackManager.h +++ b/Userland/Libraries/LibVideo/PlaybackManager.h @@ -122,6 +122,7 @@ public: void resume_playback(); void pause_playback(); void restart_playback(); + void terminate_playback(); void seek_to_timestamp(Duration, SeekMode = DEFAULT_SEEK_MODE); bool is_playing() const {