[FFmpeg-cvslog] avfilter/af_silenceremove: use separate variable for size of cache

Paul B Mahol git at videolan.org
Mon May 29 12:41:50 EEST 2023


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sun May 28 14:35:46 2023 +0200| [aa4acc111e6ea1117dfec230435fdb26ec7631d9] | committer: Paul B Mahol

avfilter/af_silenceremove: use separate variable for size of cache

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=aa4acc111e6ea1117dfec230435fdb26ec7631d9
---

 libavfilter/af_silenceremove.c       | 17 +++++++++++++++--
 libavfilter/silenceremove_template.c |  8 +++++---
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/libavfilter/af_silenceremove.c b/libavfilter/af_silenceremove.c
index 6f152146de..c7975a9365 100644
--- a/libavfilter/af_silenceremove.c
+++ b/libavfilter/af_silenceremove.c
@@ -94,6 +94,7 @@ typedef struct SilenceRemoveContext {
     int *stop_back;
 
     int64_t window_duration;
+    int cache_size;
 
     int start_window_pos;
     int start_window_size;
@@ -224,10 +225,22 @@ static int config_output(AVFilterLink *outlink)
     AVFilterContext *ctx = outlink->src;
     SilenceRemoveContext *s = ctx->priv;
 
+    switch (s->detection) {
+    case D_AVG:
+    case D_RMS:
+        s->cache_size = 1;
+        break;
+    case D_MEDIAN:
+    case D_PEAK:
+    case D_PTP:
+        s->cache_size = s->window_duration;
+        break;
+    }
+
     s->start_window = ff_get_audio_buffer(outlink, s->window_duration);
     s->stop_window = ff_get_audio_buffer(outlink, s->window_duration);
-    s->start_cache = av_calloc(outlink->ch_layout.nb_channels, s->window_duration * sizeof(*s->start_cache));
-    s->stop_cache = av_calloc(outlink->ch_layout.nb_channels, s->window_duration * sizeof(*s->stop_cache));
+    s->start_cache = av_calloc(outlink->ch_layout.nb_channels, s->cache_size * sizeof(*s->start_cache));
+    s->stop_cache = av_calloc(outlink->ch_layout.nb_channels, s->cache_size * sizeof(*s->stop_cache));
     if (!s->start_window || !s->stop_window || !s->start_cache || !s->stop_cache)
         return AVERROR(ENOMEM);
 
diff --git a/libavfilter/silenceremove_template.c b/libavfilter/silenceremove_template.c
index aaaba04f69..8536d5e723 100644
--- a/libavfilter/silenceremove_template.c
+++ b/libavfilter/silenceremove_template.c
@@ -328,6 +328,7 @@ static void fn(filter_start)(AVFilterContext *ctx,
     ftype *start_cache = (ftype *)s->start_cache;
     const int start_silence = s->start_silence;
     int window_size = start_window_nb_samples;
+    const int cache_size = s->cache_size;
     int *front = s->start_front;
     int *back = s->start_back;
 
@@ -352,7 +353,7 @@ static void fn(filter_start)(AVFilterContext *ctx,
         ftype start_ow = startw[start_wpos + ch];
         ftype tstart;
 
-        tstart = fn(s->compute)(start_cache + ch * start_window_nb_samples,
+        tstart = fn(s->compute)(start_cache + ch * cache_size,
                                 start_sample,
                                 start_ow,
                                 window_size,
@@ -423,8 +424,9 @@ static void fn(filter_stop)(AVFilterContext *ctx,
     const int stop_duration = s->stop_duration;
     ftype *stop_cache = (ftype *)s->stop_cache;
     const int stop_silence = s->stop_silence;
-    const int restart = s->restart;
     int window_size = stop_window_nb_samples;
+    const int cache_size = s->cache_size;
+    const int restart = s->restart;
     int *front = s->stop_front;
     int *back = s->stop_back;
 
@@ -446,7 +448,7 @@ static void fn(filter_stop)(AVFilterContext *ctx,
         ftype stop_ow = stopw[stop_wpos + ch];
         ftype tstop;
 
-        tstop = fn(s->compute)(stop_cache + ch * stop_window_nb_samples,
+        tstop = fn(s->compute)(stop_cache + ch * cache_size,
                                stop_sample,
                                stop_ow,
                                window_size,



More information about the ffmpeg-cvslog mailing list