From 9179735a649cc0167e1312625d17f8d08a0c2587 Mon Sep 17 00:00:00 2001 From: Olivier SOLDANO <olivier.soldano@savoirfairelinux.com> Date: Mon, 29 Jan 2018 17:04:56 -0500 Subject: [PATCH] fix mpeg4 video encoding on win32 some devices are providing their framerate ratios in a format incompatible with FFmpeg encoder. This patch sanitizes these entries to fit the FFmpeg code. Change-Id: Ib25c33699749ddcdfdf9cefc853f24caae433609 Reviewed-by: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> --- src/media/media_encoder.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/media/media_encoder.cpp b/src/media/media_encoder.cpp index 7fc1e020f7..ccbae447ef 100644 --- a/src/media/media_encoder.cpp +++ b/src/media/media_encoder.cpp @@ -530,11 +530,11 @@ void MediaEncoder::prepareEncoderContext(bool is_video) encoderCtx_->width = device_.width; encoderCtx_->height = device_.height; + // satisfy ffmpeg: denominator must be 16bit or less value // time base = 1/FPS - encoderCtx_->time_base = AVRational { - (int) device_.framerate.denominator(), - (int) device_.framerate.numerator() - }; + av_reduce(&encoderCtx_->time_base.den, &encoderCtx_->time_base.num, + device_.framerate.numerator(), device_.framerate.denominator(), + (1U << 16) - 1); // emit one intra frame every gop_size frames encoderCtx_->max_b_frames = 0; -- GitLab