[FFmpeg-devel] [PATCH 3/3] avcodec: v4l2_m2m: context: fix raising warning on POLLERR

Jorge Ramirez jorge.ramirez.ortiz at gmail.com
Wed Jan 10 00:08:35 EET 2018


On 01/09/2018 06:06 PM, Jorge Ramirez-Ortiz wrote:
> From: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz at linaro.org>
>
> During the initialization stage, the codec attempts to get free
> buffers from the driver before any have been queued (this is to keep
> the code simple and generic)
>
> When the kernel driver detects this situation, it returns POLLERR in
> revents and ffmpeg therefore raises a warning.
>
> This commit disables the warning since no buffers were queued to the
> driver yet.
>
> Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz at linaro.org>
> ---
>   libavcodec/v4l2_context.c | 16 ++++++++++++++--
>   1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c
> index fb482cf..5bacaaf 100644
> --- a/libavcodec/v4l2_context.c
> +++ b/libavcodec/v4l2_context.c
> @@ -258,7 +258,7 @@ static V4L2Buffer* v4l2_dequeue_v4l2buf(V4L2Context *ctx, int timeout)
>           .events =  POLLIN | POLLRDNORM | POLLPRI | POLLOUT | POLLWRNORM, /* default blocking capture */
>           .fd = ctx_to_m2mctx(ctx)->fd,
>       };
> -    int ret;
> +    int i, ret;
>   
>       if (V4L2_TYPE_IS_OUTPUT(ctx->type))
>           pfd.events =  POLLOUT | POLLWRNORM;
> @@ -279,7 +279,19 @@ static V4L2Buffer* v4l2_dequeue_v4l2buf(V4L2Context *ctx, int timeout)
>   
>       /* 0. handle errors */
>       if (pfd.revents & POLLERR) {
> -        av_log(logger(ctx), AV_LOG_WARNING, "%s POLLERR\n", ctx->name);
> +	    /* if we are trying to get free buffers but none have been queued yet
> +	       no need to raise a warning */

sorry about the linux tabs (my editor messed it up, my fault)
will fix.

> +	    if (timeout == 0 ) {
> +		for (i = 0; i < ctx->num_buffers; i++) {
> +			if (ctx->buffers[i].status != V4L2BUF_AVAILABLE) {
> +				av_log(logger(ctx), AV_LOG_WARNING, "%s POLLERR\n", ctx->name);
> +				return NULL;
> +			}
> +		}
> +	    }
> +	    else
> +		    av_log(logger(ctx), AV_LOG_WARNING, "%s POLLERR\n", ctx->name);
> +
>           return NULL;
>       }
>   



More information about the ffmpeg-devel mailing list