[FFmpeg-devel] [PATCH] lavfi/buffersrc: issue more specific error in case of invalid parameters

Stefano Sabatini stefasab at gmail.com
Wed Mar 1 02:05:29 EET 2023


On date Wednesday 2023-03-01 01:01:26 +0100, Stefano Sabatini wrote:
> ---
>  libavfilter/buffersrc.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
> index ba17450b93..ea9556d691 100644
> --- a/libavfilter/buffersrc.c
> +++ b/libavfilter/buffersrc.c
> @@ -273,9 +273,16 @@ static av_cold int init_video(AVFilterContext *ctx)
>  {
>      BufferSourceContext *c = ctx->priv;
>  
> -    if (c->pix_fmt == AV_PIX_FMT_NONE || !c->w || !c->h ||
> -        av_q2d(c->time_base) <= 0) {
> -        av_log(ctx, AV_LOG_ERROR, "Invalid parameters provided.\n");
> +    if (c->pix_fmt == AV_PIX_FMT_NONE) {
> +        av_log(ctx, AV_LOG_ERROR, "Unspecified pixel format\n");
> +        return AVERROR(EINVAL);
> +    }
> +    if (!c->w || !c->h) {
> +        av_log(ctx, AV_LOG_ERROR, "Invalid null size %dx%d\n", c->w, c->h);
> +        return AVERROR(EINVAL);
> +    }
> +    if (av_q2d(c->time_base) <= 0) {
> +        av_log(ctx, AV_LOG_ERROR, "Invalid time base %d/%d\n", c->time_base.num, c->time_base.den);
>          return AVERROR(EINVAL);
>      }

BTW, I noticied this as part of debugging transcode.c (which looks
broken at the moment), since the timebase is read as 0/1 from the
decoder context, it would be a valid value when reading from the
AVStream (but this information is not copied by
avcodec_parameters_to_context). In decode_filter_video.c this is
indeed "fixed" by copying the timebase directly from the AVStream.

Is this expected? Shouldn't the timebase be copied to the decoder
context?


More information about the ffmpeg-devel mailing list