[FFmpeg-devel] [PATCH 4/4] af_silencedetect : fix missing log silence_end at EOS

Michael Niedermayer michael at niedermayer.cc
Sat Feb 3 04:50:23 EET 2018


On Fri, Feb 02, 2018 at 10:59:51AM +0000, Gaullier Nicolas wrote:
> Attached patch fixes missing log of "silence_end" when the silence continue until the end of the stream.
> Nicolas Gaullier

>  af_silencedetect.c |   14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 12dc8501a25c838eb7f0d4fadc70aa5d6244231e  0004-avfilter-af_silencedetect-fix-missing-log-silence_en.patch
> From c9909a0454b393a08ee42dabb51b7b5cebbb02ed Mon Sep 17 00:00:00 2001
> From: nicolas gaullier <nicolas.gaullier at arkena.com>
> Date: Fri, 2 Feb 2018 11:31:01 +0100
> Subject: [PATCH 4/4] avfilter/af_silencedetect : fix missing log silence_end
>  at EOS
> 
> ---
>  libavfilter/af_silencedetect.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/libavfilter/af_silencedetect.c b/libavfilter/af_silencedetect.c
> index fedbed8113..ea7e15d0bc 100644
> --- a/libavfilter/af_silencedetect.c
> +++ b/libavfilter/af_silencedetect.c
> @@ -41,6 +41,7 @@ typedef struct SilenceDetectContext {
>      int independant_channels;   ///< number of entries in following arrays (always 1 in mono mode)
>      int64_t *nb_null_samples;   ///< (array) current number of continuous zero samples
>      int64_t *start;             ///< (array) if silence is detected, this value contains the time of the first zero sample (default/unset = INT64_MIN)
> +    int64_t frame_end;          ///< pts of the end of the current frame (used to compute duration of silence at EOS)
>      int last_sample_rate;       ///< last sample rate to check for sample rate changes
>      AVRational time_base;       ///< time_base
>  
> @@ -90,10 +91,12 @@ static av_always_inline void update(SilenceDetectContext *s, AVFrame *insamples,
>          }
>      } else {
>          if (s->start[channel] > INT64_MIN) {
> -            int64_t end_pts = insamples->pts;
> +            int64_t end_pts = insamples ? insamples->pts : s->frame_end;
>              int64_t duration_ts = end_pts - s->start[channel];
> -            set_meta(insamples, s->mono ? channel + 1 : 0, "silence_end", av_ts2timestr(end_pts, &s->time_base));
> -            set_meta(insamples, s->mono ? channel + 1 : 0, "silence_duration", av_ts2timestr(duration_ts, &s->time_base));
> +            if (insamples) {
> +                set_meta(insamples, s->mono ? channel + 1 : 0, "silence_end", av_ts2timestr(end_pts, &s->time_base));
> +                set_meta(insamples, s->mono ? channel + 1 : 0, "silence_duration", av_ts2timestr(duration_ts, &s->time_base));
> +            }
>              if (s->mono)
>                  av_log(s, AV_LOG_INFO, "channel: %d | ", channel);
>              av_log(s, AV_LOG_INFO, "silence_end: %s | silence_duration: %s\n",

> @@ -172,6 +175,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
>          }
>      s->last_sample_rate = srate;
>      s->time_base = inlink->time_base;
> +    s->frame_end = insamples->pts + (int64_t)((double)insamples->nb_samples / srate / av_q2d(s->time_base) + .5);

please use av_rescale* or something to avoid using double/float which
can result in differences between platforms



[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

You can kill me, but you cannot change the truth.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180203/f702f238/attachment.sig>


More information about the ffmpeg-devel mailing list