diff --git a/src/platform/common.h b/src/platform/common.h index 7a15cb09cf0..0777a50647c 100644 --- a/src/platform/common.h +++ b/src/platform/common.h @@ -535,10 +535,6 @@ namespace platf { return true; } - virtual bool is_event_driven() { - return false; - } - virtual ~display_t() = default; // Offsets for when streaming a specific monitor. By default, they are 0. diff --git a/src/platform/linux/pipewire.cpp b/src/platform/linux/pipewire.cpp index e02a2b76ca0..a6a7ab6c97b 100644 --- a/src/platform/linux/pipewire.cpp +++ b/src/platform/linux/pipewire.cpp @@ -858,11 +858,6 @@ namespace pipewire { return 0; } - // This capture method is event driven; don't insert duplicate frames - bool is_event_driven() override { - return true; - } - private: bool is_buffer_redundant(const egl::img_descriptor_t *img) { // Check for corrupted frame diff --git a/src/thread_safe.h b/src/thread_safe.h index 9657de06371..1ef8f336b80 100644 --- a/src/thread_safe.h +++ b/src/thread_safe.h @@ -60,22 +60,19 @@ namespace safe { } // pop and view should not be used interchangeably - template + template status_t pop(std::chrono::duration delay) { std::unique_lock ul {_lock}; - if (!_continue) { + if (bool success = _cv.wait_for(ul, delay, [this] { + return (bool) _status || !_continue; + }); + !success || !_continue) { return util::false_v; } - while (!_status) { - if (!_continue || _cv.wait_for(ul, delay) == std::cv_status::timeout) { - return util::false_v; - } - } - auto val = std::move(_status); - _status = util::false_v; + _status.reset(); return val; } diff --git a/src/video.cpp b/src/video.cpp index 17106133f7c..d8c9dde3125 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -2048,11 +2048,10 @@ namespace video { } }); - // set max frame time based on client-requested target framerate (or 0.5fps/2000ms for event-driven capture) - double def_fps_target = (disp->is_event_driven() ? 1 : config.framerate); - double minimum_fps_target = (config::video.minimum_fps_target > 0.0) ? config::video.minimum_fps_target : def_fps_target; + // set max frame time based on client-requested target framerate. + double minimum_fps_target = (config::video.minimum_fps_target > 0.0) ? config::video.minimum_fps_target : (config.framerate / 2); std::chrono::duration max_frametime {1000.0 / minimum_fps_target}; - BOOST_LOG(info) << "Minimum FPS target set to ~"sv << (minimum_fps_target / 2) << "fps ("sv << max_frametime.count() * 2 << "ms)"sv; + BOOST_LOG(info) << "Minimum FPS target set to ~"sv << minimum_fps_target << "fps ("sv << max_frametime.count() << "ms)"sv; auto shutdown_event = mail->event(mail::shutdown); auto packets = mail::man->queue(mail::video_packets);