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