[FFmpeg-devel] [PATCH 03/15] lavfi/atempo: raise filter_frame() error.

Pavel Koshevoy pkoshevoy at gmail.com
Thu Mar 14 06:28:41 CET 2013


On 3/13/13 3:10 AM, Clément Bœsch wrote:
> ---
>   libavfilter/af_atempo.c | 23 ++++++++++++++++-------
>   1 file changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c
> index 53bf9e2..9547969 100644
> --- a/libavfilter/af_atempo.c
> +++ b/libavfilter/af_atempo.c
> @@ -1020,10 +1020,12 @@ static int config_props(AVFilterLink *inlink)
>       return yae_reset(atempo, format, sample_rate, channels);
>   }
>   
> -static void push_samples(ATempoContext *atempo,
> -                         AVFilterLink *outlink,
> -                         int n_out)
> +static int push_samples(ATempoContext *atempo,
> +                        AVFilterLink *outlink,
> +                        int n_out)
>   {
> +    int ret;
> +
>       atempo->dst_buffer->sample_rate = outlink->sample_rate;
>       atempo->dst_buffer->nb_samples  = n_out;
>   
> @@ -1033,12 +1035,15 @@ static void push_samples(ATempoContext *atempo,
>                        (AVRational){ 1, outlink->sample_rate },
>                        outlink->time_base);
>   
> -    ff_filter_frame(outlink, atempo->dst_buffer);
> +    ret = ff_filter_frame(outlink, atempo->dst_buffer);
> +    if (ret < 0)
> +        return ret;
>       atempo->dst_buffer = NULL;
>       atempo->dst        = NULL;
>       atempo->dst_end    = NULL;
>   
>       atempo->nsamples_out += n_out;
> +    return 0;
>   }
>   
>   static int filter_frame(AVFilterLink *inlink, AVFrame *src_buffer)
> @@ -1047,6 +1052,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *src_buffer)
>       ATempoContext *atempo = ctx->priv;
>       AVFilterLink *outlink = ctx->outputs[0];
>   
> +    int ret = 0;
>       int n_in = src_buffer->nb_samples;
>       int n_out = (int)(0.5 + ((double)n_in) / atempo->tempo);
>   
> @@ -1065,14 +1071,17 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *src_buffer)
>           yae_apply(atempo, &src, src_end, &atempo->dst, atempo->dst_end);
>   
>           if (atempo->dst == atempo->dst_end) {
> -            push_samples(atempo, outlink, n_out);
> +            ret = push_samples(atempo, outlink, n_out);
> +            if (ret < 0)
> +                goto end;
>               atempo->request_fulfilled = 1;
>           }
>       }
>   
>       atempo->nsamples_in += n_in;
> +end:
>       av_frame_free(&src_buffer);
> -    return 0;
> +    return ret;
>   }
>   
>   static int request_frame(AVFilterLink *outlink)
> @@ -1107,7 +1116,7 @@ static int request_frame(AVFilterLink *outlink)
>                        atempo->stride);
>   
>               if (n_out) {
> -                push_samples(atempo, outlink, n_out);
> +                ret = push_samples(atempo, outlink, n_out);
>               }
>           }
>   

Looks fine to me. Just curious, why is this error propagation required now?

Pavel.



More information about the ffmpeg-devel mailing list