diff mbox

[FFmpeg-devel] v4l2_m2m: Fix integer overflow in timestamp handling

Message ID a9635def-46c6-7924-1af3-fee91920f26c@jkqxz.net
State Accepted
Commit 2e96f5278095d44f090a4d89507e62d27cccf3b9
Headers show

Commit Message

Mark Thompson Jan. 21, 2018, 12:52 a.m. UTC
---
struct timeval elements are not big enough in a 32-bit ABI.


 libavcodec/v4l2_buffers.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

wm4 Jan. 21, 2018, 12:14 p.m. UTC | #1
On Sun, 21 Jan 2018 00:52:18 +0000
Mark Thompson <sw@jkqxz.net> wrote:

> ---
> struct timeval elements are not big enough in a 32-bit ABI.
> 
> 
>  libavcodec/v4l2_buffers.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c
> index 8e4d4d1..aef911f 100644
> --- a/libavcodec/v4l2_buffers.c
> +++ b/libavcodec/v4l2_buffers.c
> @@ -69,7 +69,8 @@ static inline uint64_t v4l2_get_pts(V4L2Buffer *avbuf)
>      int64_t v4l2_pts;
>  
>      /* convert pts back to encoder timebase */
> -    v4l2_pts = avbuf->buf.timestamp.tv_sec * USEC_PER_SEC + avbuf->buf.timestamp.tv_usec;
> +    v4l2_pts = (int64_t)avbuf->buf.timestamp.tv_sec * USEC_PER_SEC +
> +                        avbuf->buf.timestamp.tv_usec;
>  
>      return av_rescale_q(v4l2_pts, v4l2_timebase, s->avctx->time_base);
>  }

LGTM.

(By god, did they really have to use struct timeval for video
timestamps...)
diff mbox

Patch

diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c
index 8e4d4d1..aef911f 100644
--- a/libavcodec/v4l2_buffers.c
+++ b/libavcodec/v4l2_buffers.c
@@ -69,7 +69,8 @@  static inline uint64_t v4l2_get_pts(V4L2Buffer *avbuf)
     int64_t v4l2_pts;
 
     /* convert pts back to encoder timebase */
-    v4l2_pts = avbuf->buf.timestamp.tv_sec * USEC_PER_SEC + avbuf->buf.timestamp.tv_usec;
+    v4l2_pts = (int64_t)avbuf->buf.timestamp.tv_sec * USEC_PER_SEC +
+                        avbuf->buf.timestamp.tv_usec;
 
     return av_rescale_q(v4l2_pts, v4l2_timebase, s->avctx->time_base);
 }