From 1aec1183f3e82e9aa20fe23d961f663c1efc45fb Mon Sep 17 00:00:00 2001 From: Andriy Gelman Date: Sun, 27 Oct 2019 00:19:46 -0400 Subject: avcodec/v4l2_buffers: Fix infinite loop This part of the code counts the number of planes returned by the v4l2 device for each queried capture/output buffer. When testing the GPU h264 encoder on Nvidia's Jetson Nano, this caused an infinite loop because avbuf->buf.length included some empty buffers (i.e. where avbuf->buf.m.planes[i].length = 0), meaning that the counter was never incremented and break was never reached. This is fixed in the commit by using a well defined iteration range. Signed-off-by: Aman Gupta --- libavcodec/v4l2_buffers.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c index e301dcd..dc1b9ea 100644 --- a/libavcodec/v4l2_buffers.c +++ b/libavcodec/v4l2_buffers.c @@ -511,11 +511,9 @@ int ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, int index) if (V4L2_TYPE_IS_MULTIPLANAR(ctx->type)) { avbuf->num_planes = 0; - for (;;) { - /* in MP, the V4L2 API states that buf.length means num_planes */ - if (avbuf->num_planes >= avbuf->buf.length) - break; - if (avbuf->buf.m.planes[avbuf->num_planes].length) + /* in MP, the V4L2 API states that buf.length means num_planes */ + for (i = 0; i < avbuf->buf.length; i++) { + if (avbuf->buf.m.planes[i].length) avbuf->num_planes++; } } else -- cgit v1.1