[FFmpeg-cvslog] avcodec/omx: fix xFramerate calculation

Aman Gupta git at videolan.org
Mon Sep 2 23:53:31 EEST 2019


ffmpeg | branch: release/4.2 | Aman Gupta <aman at tmm1.net> | Thu Aug 29 16:00:50 2019 -0700| [0f8e2a0b8644fee69cfebe55bbb38e69289beba6] | committer: Aman Gupta

avcodec/omx: fix xFramerate calculation

Integer overflow in the Q16 framerate calculation was sending
invalid values to the OMX encoder.

On the RPI4, this manifested as bitrate controls being ignored
on video streams with 60000/1001 framerates. Video streams with
30000/1001 framerates were not affected.

Signed-off-by: Aman Gupta <aman at tmm1.net>
(cherry picked from commit b022d9ba288ad3de321e0835b0aedfd91c2c3064)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0f8e2a0b8644fee69cfebe55bbb38e69289beba6
---

 libavcodec/omx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavcodec/omx.c b/libavcodec/omx.c
index 20869c0f44..a555c3c07d 100644
--- a/libavcodec/omx.c
+++ b/libavcodec/omx.c
@@ -473,9 +473,9 @@ static av_cold int omx_component_init(AVCodecContext *avctx, const char *role)
     in_port_params.format.video.nFrameWidth  = avctx->width;
     in_port_params.format.video.nFrameHeight = avctx->height;
     if (avctx->framerate.den > 0 && avctx->framerate.num > 0)
-        in_port_params.format.video.xFramerate = (1 << 16) * avctx->framerate.num / avctx->framerate.den;
+        in_port_params.format.video.xFramerate = (1LL << 16) * avctx->framerate.num / avctx->framerate.den;
     else
-        in_port_params.format.video.xFramerate = (1 << 16) * avctx->time_base.den / avctx->time_base.num;
+        in_port_params.format.video.xFramerate = (1LL << 16) * avctx->time_base.den / avctx->time_base.num;
 
     err = OMX_SetParameter(s->handle, OMX_IndexParamPortDefinition, &in_port_params);
     CHECK(err);



More information about the ffmpeg-cvslog mailing list