[FFmpeg-devel] [PATCH] lavfi/af_volumedetect: print stats in uninit().

Stefano Sabatini stefasab at gmail.com
Wed Oct 17 22:06:40 CEST 2012


On date Wednesday 2012-10-17 19:49:19 +0200, Nicolas George encoded:
> If the stats are printed when request_frame on the input
> returns EOF, then they are never printed if the filter is
> not flushed, in particular when using the -t ffmpeg option.
> 
> Fix trac ticket #1727.
> 
> Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
> ---
>  libavfilter/af_volumedetect.c |   11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> 
> Note: I could have used ".uninit = print_stats" directly but I find that
> solution ugly.
> 
> 
> diff --git a/libavfilter/af_volumedetect.c b/libavfilter/af_volumedetect.c
> index 9bc40f6..cffcb85 100644
> --- a/libavfilter/af_volumedetect.c
> +++ b/libavfilter/af_volumedetect.c
> @@ -129,10 +129,12 @@ static void print_stats(AVFilterContext *ctx)

>  static int request_frame(AVFilterLink *outlink)
>  {
>      AVFilterContext *ctx = outlink->src;
> -    int ret = ff_request_frame(ctx->inputs[0]);
> -    if (ret == AVERROR_EOF)
> -        print_stats(ctx);
> -    return ret;
> +    return ff_request_frame(ctx->inputs[0]);
> +}

Is this even required, or can you drop the wrapper altogether?

> +
> +static void uninit(AVFilterContext *ctx)
> +{
> +    print_stats(ctx);
>  }
>  
>  AVFilter avfilter_af_volumedetect = {
> @@ -141,6 +143,7 @@ AVFilter avfilter_af_volumedetect = {
>  
>      .priv_size     = sizeof(VolDetectContext),
>      .query_formats = query_formats,
> +    .uninit        = uninit,
>  
>      .inputs    = (const AVFilterPad[]) {
>          { .name             = "default",
> -- 
> 1.7.10.4

Looks good otherwise, thank you.
-- 
FFmpeg = Frenzy & Fundamentalist Majestic Plastic Evil Gadget


More information about the ffmpeg-devel mailing list