aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndriy Gelman <andriy.gelman@gmail.com>2019-10-27 00:19:46 -0400
committerAman Gupta <aman@tmm1.net>2019-11-01 15:19:55 -0700
commit1aec1183f3e82e9aa20fe23d961f663c1efc45fb (patch)
treec252058e90ee65a810f9935678f60fd73937cb64
parentfd3ee7a92e9227ee44e2a0d837ba9879959b15d7 (diff)
downloadffmpeg-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.c8
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