[FFmpeg-devel] [PATCH 1/2] avcodec/v4l2_buffers: Fix infinite loop
Andriy Gelman
andriy.gelman at gmail.com
Fri Nov 1 15:33:54 EET 2019
On Sun, 27. Oct 00:19, Andriy Gelman wrote:
> From: Andriy Gelman <andriy.gelman at gmail.com>
>
> 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.
> ---
> libavcodec/v4l2_buffers.c | 8 +++-----
> 1 file 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
> --
> 2.23.0
>
ping
--
Andriy
More information about the ffmpeg-devel
mailing list