[FFmpeg-devel] [PATCH] avfilter/af_loudnorm: correctly initialize PTS

Muhammad Faiz mfcc64 at gmail.com
Sun Feb 4 01:54:49 EET 2018


On Sat, Feb 3, 2018 at 9:22 PM, Niklas Haas <ffmpeg at haasn.xyz> wrote:
> From: Niklas Haas <git at haasn.xyz>
>
> Right now, the PTS always starts out as 0, which causes problems on a
> seek or when inserting this filter mid-stream.
>
> Initialize it instead to AV_NOPTS_VALUE and copy the PTS from the first
> frame instead if this is the case.
> ---
>  libavfilter/af_loudnorm.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c
> index a7f11cbe6e..314b25fa39 100644
> --- a/libavfilter/af_loudnorm.c
> +++ b/libavfilter/af_loudnorm.c
> @@ -431,6 +431,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
>          av_frame_copy_props(out, in);
>      }
>
> +    if (s->pts == AV_NOPTS_VALUE)
> +        s->pts = in->pts;
> +
>      out->pts = s->pts;
>      src = (const double *)in->data[0];
>      dst = (double *)out->data[0];
> @@ -763,7 +766,7 @@ static int config_input(AVFilterLink *inlink)
>          inlink->partial_buf_size = frame_size(inlink->sample_rate, 3000);
>      }
>
> -    s->pts =
> +    s->pts = AV_NOPTS_VALUE;
>      s->buf_index =
>      s->prev_buf_index =
>      s->limiter_buf_index = 0;
> --
> 2.16.1

Output pts ideally should be based on input pts in all cases
(not only in the first pts case), because input pts may be non-monotonic.


More information about the ffmpeg-devel mailing list