[FFmpeg-devel] [PATCH] avfilter/avfilter: Error out if audio parameters change instead of failing an assert

Paul B Mahol onemda at gmail.com
Fri Oct 16 10:19:11 CEST 2015


On 10/16/15, Michael Niedermayer <michaelni at gmx.at> wrote:
> From: Michael Niedermayer <michael at niedermayer.cc>
>
> Filters which support such changes should be excluded from these checks
>
> Fixes Ticket4884
>
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
>  libavfilter/avfilter.c |   23 +++++++++++++++++++----
>  1 file changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
> index 51926bf..8b1b7d2 100644
> --- a/libavfilter/avfilter.c
> +++ b/libavfilter/avfilter.c
> @@ -1147,10 +1147,22 @@ int ff_filter_frame(AVFilterLink *link, AVFrame
> *frame)
>              av_assert1(frame->height               == link->h);
>          }
>      } else {
> -        av_assert1(frame->format                == link->format);
> -        av_assert1(av_frame_get_channels(frame) == link->channels);
> -        av_assert1(frame->channel_layout        == link->channel_layout);
> -        av_assert1(frame->sample_rate           == link->sample_rate);
> +        if (frame->format != link->format) {
> +            av_log(link->dst, AV_LOG_ERROR, "Format change is not
> supported\n");
> +            goto error;
> +        }
> +        if (av_frame_get_channels(frame) != link->channels) {
> +            av_log(link->dst, AV_LOG_ERROR, "Channel count change is not
> supported\n");
> +            goto error;
> +        }
> +        if (frame->channel_layout != link->channel_layout) {
> +            av_log(link->dst, AV_LOG_ERROR, "Channel layout change is not
> supported\n");
> +            goto error;
> +        }
> +        if (frame->sample_rate != link->sample_rate) {
> +            av_log(link->dst, AV_LOG_ERROR, "Sample rate change is not
> supported\n");
> +            goto error;
> +        }
>      }
>
>      /* Go directly to actual filtering if possible */
> @@ -1163,6 +1175,9 @@ int ff_filter_frame(AVFilterLink *link, AVFrame
> *frame)
>      } else {
>          return ff_filter_frame_framed(link, frame);
>      }
> +error:
> +    av_frame_free(&frame);
> +    return AVERROR_PATCHWELCOME;
>  }
>
>  const AVClass *avfilter_get_class(void)
> --
> 1.7.9.5
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
probably ok


More information about the ffmpeg-devel mailing list