[FFmpeg-devel] [PATCH] lavfi/showwaves: fail in case of push_frame() error

Paul B Mahol onemda at gmail.com
Thu Jan 24 11:19:57 CET 2013


On 1/24/13, Stefano Sabatini <stefasab at gmail.com> wrote:
> ---
>  libavfilter/avf_showwaves.c |   15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
>

Does this fixes something? If yes please document it in commit.

> diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
> index 998b4cb..1b9d28d 100644
> --- a/libavfilter/avf_showwaves.c
> +++ b/libavfilter/avf_showwaves.c
> @@ -160,14 +160,16 @@ static int config_output(AVFilterLink *outlink)
>      return 0;
>  }
>
> -inline static void push_frame(AVFilterLink *outlink)
> +inline static int push_frame(AVFilterLink *outlink)
>  {
>      ShowWavesContext *showwaves = outlink->src->priv;
> +    int ret;
>
> -    ff_filter_frame(outlink, showwaves->outpicref);
> -    showwaves->req_fullfilled = 1;
> +    if ((ret = ff_filter_frame(outlink, showwaves->outpicref)) >= 0)
> +        showwaves->req_fullfilled = 1;
>      showwaves->outpicref = NULL;
>      showwaves->buf_idx = 0;
> +    return ret;
>  }
>
>  static int request_frame(AVFilterLink *outlink)
> @@ -198,7 +200,7 @@ static int filter_frame(AVFilterLink *inlink,
> AVFilterBufferRef *insamples)
>      int linesize = outpicref ? outpicref->linesize[0] : 0;
>      int16_t *p = (int16_t *)insamples->data[0];
>      int nb_channels =
> av_get_channel_layout_nb_channels(insamples->audio->channel_layout);
> -    int i, j, k, h;
> +    int i, j, k, h, ret = 0;
>      const int n = showwaves->n;
>      const int x = 255 / (nb_channels * n); /* multiplication factor,
> pre-computed to avoid in-loop divisions */
>
> @@ -244,12 +246,13 @@ static int filter_frame(AVFilterLink *inlink,
> AVFilterBufferRef *insamples)
>              showwaves->buf_idx++;
>          }
>          if (showwaves->buf_idx == showwaves->w)
> -            push_frame(outlink);
> +            if ((ret = push_frame(outlink)) < 0)
> +                break;
>          outpicref = showwaves->outpicref;
>      }
>
>      avfilter_unref_buffer(insamples);
> -    return 0;
> +    return ret;
>  }
>
>  static const AVFilterPad showwaves_inputs[] = {
> --
> 1.7.9.5

I see nothing obviously wrong.


More information about the ffmpeg-devel mailing list