diff --git a/src/rtsp.cpp b/src/rtsp.cpp index 044de62a..bff8f82a 100644 --- a/src/rtsp.cpp +++ b/src/rtsp.cpp @@ -1005,9 +1005,9 @@ namespace rtsp_stream { config.monitor.enableIntraRefresh = util::from_view(args.at("x-ss-video[0].intraRefresh"sv)); if (config::video.limit_framerate) { - config.monitor.encodingFramerate = (int)ceil(session.fps / 1000); + config.monitor.encodingFramerate = session.fps; } else { - config.monitor.encodingFramerate = config.monitor.framerate; + config.monitor.encodingFramerate = config.monitor.framerate * 1000; } config.monitor.input_only = session.input_only; diff --git a/src/video.cpp b/src/video.cpp index 87e30414..1ccf72a5 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -1901,7 +1901,7 @@ namespace video { // set minimum frame time, avoiding violation of client-requested target framerate auto minimum_frame_time = std::chrono::milliseconds(1000 / std::min(config.framerate, (config::video.min_fps_factor * 10))); - auto frame_threshold = std::chrono::milliseconds(1000 / config.encodingFramerate); + auto frame_threshold = std::chrono::microseconds(1000ms * 1000 / config.encodingFramerate); BOOST_LOG(debug) << "Minimum frame time set to "sv << minimum_frame_time.count() << "ms, based on min fps factor of "sv << config::video.min_fps_factor << "."sv; BOOST_LOG(info) << "Frame threshold: "sv << frame_threshold; @@ -1983,19 +1983,18 @@ namespace video { } else if (!images->running()) { break; } - } - if (frame_timestamp) { - auto frame_diff = *frame_timestamp - next_frame_start; - if (frame_diff < 2ms) { - auto this_frame_timestamp = next_frame_start; - next_frame_start = *frame_timestamp; - frame_timestamp = this_frame_timestamp; - } else if (frame_diff > frame_threshold) { - next_frame_start = *frame_timestamp - frame_threshold / 2; + if (frame_timestamp) { + auto frame_diff = *frame_timestamp - next_frame_start; + + if (frame_diff > frame_threshold) { + next_frame_start = *frame_timestamp - frame_threshold / 2; + } + + frame_timestamp = next_frame_start; + + next_frame_start += frame_threshold; } - - next_frame_start += frame_threshold; } if (encode(frame_nr++, *session, packets, channel_data, frame_timestamp)) { diff --git a/src_assets/windows/drivers/sudovda/SudoVDA.inf b/src_assets/windows/drivers/sudovda/SudoVDA.inf index aee43d78..ad3c7d19 100644 Binary files a/src_assets/windows/drivers/sudovda/SudoVDA.inf and b/src_assets/windows/drivers/sudovda/SudoVDA.inf differ diff --git a/src_assets/windows/drivers/sudovda/sudovda.cat b/src_assets/windows/drivers/sudovda/sudovda.cat index f2af7293..e985d80f 100644 Binary files a/src_assets/windows/drivers/sudovda/sudovda.cat and b/src_assets/windows/drivers/sudovda/sudovda.cat differ