diff options
author | Andriy Gelman <andriy.gelman@gmail.com> | 2019-10-27 00:19:46 -0400 |
---|---|---|
committer | Aman Gupta <aman@tmm1.net> | 2019-11-01 15:19:55 -0700 |
commit | 1aec1183f3e82e9aa20fe23d961f663c1efc45fb (patch) | |
tree | c252058e90ee65a810f9935678f60fd73937cb64 | |
parent | fd3ee7a92e9227ee44e2a0d837ba9879959b15d7 (diff) | |
download | ffmpeg-1aec1183f3e82e9aa20fe23d961f663c1efc45fb.tar.gz |
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 <aman@tmm1.net>
-rw-r--r-- | libavcodec/v4l2_buffers.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c index e301dcd6bd..dc1b9eaf24 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 |