[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