aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2023-05-28 14:35:46 +0200
committerPaul B Mahol <onemda@gmail.com>2023-05-29 11:47:07 +0200
commitaa4acc111e6ea1117dfec230435fdb26ec7631d9 (patch)
treed04d82fa45a2560d9c79e568412ce129a45a34a9
parent364c03d9fe1b7ca1b54644f5477eb75563e11bda (diff)
downloadffmpeg-aa4acc111e6ea1117dfec230435fdb26ec7631d9.tar.gz
avfilter/af_silenceremove: use separate variable for size of cache
-rw-r--r--libavfilter/af_silenceremove.c17
-rw-r--r--libavfilter/silenceremove_template.c8
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,