From 647dd6ee3772ffae34ab5fec0f97e51d36bd9da6 Mon Sep 17 00:00:00 2001 From: Exeldro Date: Fri, 13 Dec 2024 14:34:30 +0100 Subject: [PATCH] utils: Add multi video and frame rate divisor support to GetOutputDuration --- src/utils/Obs_NumberHelper.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/utils/Obs_NumberHelper.cpp b/src/utils/Obs_NumberHelper.cpp index 74b032be8..39e41a3f7 100644 --- a/src/utils/Obs_NumberHelper.cpp +++ b/src/utils/Obs_NumberHelper.cpp @@ -32,7 +32,17 @@ uint64_t Utils::Obs::NumberHelper::GetOutputDuration(obs_output_t *output) uint64_t frameTimeNs = video_output_get_frame_time(video); int totalFrames = obs_output_get_total_frames(output); - return util_mul_div64(totalFrames, frameTimeNs, 1000000ULL); + // calculating the divisor is a hack to support multiple video encoders, someone please improve this in the future + uint64_t divisor = 0ULL; + for (size_t i = 0; i < MAX_OUTPUT_VIDEO_ENCODERS; i++) { + obs_encoder_t *encoder = obs_output_get_video_encoder2(output, i); + if (!encoder) + continue; + uint32_t encoder_divisor = obs_encoder_get_frame_rate_divisor(encoder); + divisor += encoder_divisor <= 1 ? 1000000ULL : 1000000ULL / encoder_divisor; + } + + return util_mul_div64(totalFrames, frameTimeNs, divisor ? divisor : 1000000ULL); } size_t Utils::Obs::NumberHelper::GetSceneCount()