diff --git a/rpcs3/rpcs3qt/qt_video_source.cpp b/rpcs3/rpcs3qt/qt_video_source.cpp index da0f284e0a..e05b997565 100644 --- a/rpcs3/rpcs3qt/qt_video_source.cpp +++ b/rpcs3/rpcs3qt/qt_video_source.cpp @@ -27,6 +27,7 @@ static std::array s_audio_instance = {}; qt_video_source::qt_video_source(bool is_emulation) : video_source() , m_audio_instance_index(is_emulation ? qt_audio_instance::emu_index : qt_audio_instance::gui_index) + , m_video_timer_timeout_ms(is_emulation ? 0 : 1000) { } @@ -56,7 +57,7 @@ void qt_video_source::set_active(bool active) if (active) { - start_movie(); + start_movie_timer(); } else { @@ -187,6 +188,27 @@ void qt_video_source::init_movie() } } +void qt_video_source::start_movie_timer() +{ + if (m_video_timer_timeout_ms == 0) + { + start_movie(); + return; + } + + if (!m_video_timer) + { + m_video_timer = std::make_unique(); + QObject::connect(m_video_timer.get(), &QTimer::timeout, m_video_timer.get(), [this]() + { + if (!m_active) return; + start_movie(); + }); + } + + m_video_timer->start(m_video_timer_timeout_ms); +} + void qt_video_source::start_movie() { init_movie(); @@ -210,6 +232,7 @@ void qt_video_source::start_movie() void qt_video_source::stop_movie() { m_active = false; + m_video_timer.reset(); if (m_movie) { diff --git a/rpcs3/rpcs3qt/qt_video_source.h b/rpcs3/rpcs3qt/qt_video_source.h index 8afc46ceb3..22f1acb5bd 100644 --- a/rpcs3/rpcs3qt/qt_video_source.h +++ b/rpcs3/rpcs3qt/qt_video_source.h @@ -10,6 +10,7 @@ #include #include #include +#include class qt_video_source : public video_source { @@ -29,6 +30,7 @@ public: void set_active(bool active) override; bool get_active() const override { return m_active; } + void start_movie_timer(); void start_movie(); void stop_movie(); @@ -51,11 +53,13 @@ protected: QString m_video_path; QString m_audio_path; u32 m_audio_instance_index = 0; + u32 m_video_timer_timeout_ms = 0; std::string m_iso_path; // path of the source archive QByteArray m_video_data{}; QImage m_image{}; std::vector m_image_path; + std::unique_ptr m_video_timer; std::unique_ptr m_video_buffer; std::unique_ptr m_media_player; std::unique_ptr m_video_sink;