Commit 1aec1183 authored by Andriy Gelman's avatar Andriy Gelman Committed by Aman Gupta

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: 's avatarAman Gupta <aman@tmm1.net>
parent fd3ee7a9
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment