From a0b2e8e1556499551c626930ee30e82533ea3706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Thu, 6 Dec 2012 15:08:38 +0100 Subject: [PATCH] lavfi/silencedetect: use eval builtin to parse dB. Also update FATE test to use the dB form. --- libavfilter/af_silencedetect.c | 16 ++++------------ tests/fate/filter.mak | 2 +- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/libavfilter/af_silencedetect.c b/libavfilter/af_silencedetect.c index f5fccc5399..ef014f61fc 100644 --- a/libavfilter/af_silencedetect.c +++ b/libavfilter/af_silencedetect.c @@ -23,6 +23,8 @@ * Audio silence detector */ +#include /* DBL_MAX */ + #include "libavutil/channel_layout.h" #include "libavutil/opt.h" #include "libavutil/timestamp.h" @@ -33,7 +35,6 @@ typedef struct { const AVClass *class; - char *noise_str; ///< noise option string double noise; ///< noise amplitude ratio double duration; ///< minimum duration of silence until notification int64_t nb_null_samples; ///< current number of continuous zero samples @@ -44,8 +45,8 @@ typedef struct { #define OFFSET(x) offsetof(SilenceDetectContext, x) #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_AUDIO_PARAM static const AVOption silencedetect_options[] = { - { "n", "set noise tolerance", OFFSET(noise_str), AV_OPT_TYPE_STRING, {.str="-60dB"}, CHAR_MIN, CHAR_MAX, FLAGS }, - { "noise", "set noise tolerance", OFFSET(noise_str), AV_OPT_TYPE_STRING, {.str="-60dB"}, CHAR_MIN, CHAR_MAX, FLAGS }, + { "n", "set noise tolerance", OFFSET(noise), AV_OPT_TYPE_DOUBLE, {.dbl=0.001}, 0, DBL_MAX, FLAGS }, + { "noise", "set noise tolerance", OFFSET(noise), AV_OPT_TYPE_DOUBLE, {.dbl=0.001}, 0, DBL_MAX, FLAGS }, { "d", "set minimum duration in seconds", OFFSET(duration), AV_OPT_TYPE_DOUBLE, {.dbl=2.}, 0, 24*60*60, FLAGS }, { "duration", "set minimum duration in seconds", OFFSET(duration), AV_OPT_TYPE_DOUBLE, {.dbl=2.}, 0, 24*60*60, FLAGS }, { NULL }, @@ -56,7 +57,6 @@ AVFILTER_DEFINE_CLASS(silencedetect); static av_cold int init(AVFilterContext *ctx, const char *args) { int ret; - char *tail; SilenceDetectContext *silence = ctx->priv; silence->class = &silencedetect_class; @@ -65,14 +65,6 @@ static av_cold int init(AVFilterContext *ctx, const char *args) if ((ret = av_set_options_string(silence, args, "=", ":")) < 0) return ret; - silence->noise = strtod(silence->noise_str, &tail); - if (!strcmp(tail, "dB")) { - silence->noise = pow(10, silence->noise/20); - } else if (*tail) { - av_log(ctx, AV_LOG_ERROR, "Invalid value '%s' for noise parameter.\n", - silence->noise_str); - return AVERROR(EINVAL); - } av_opt_free(silence); return 0; diff --git a/tests/fate/filter.mak b/tests/fate/filter.mak index d8623b9cb2..1c0a574237 100644 --- a/tests/fate/filter.mak +++ b/tests/fate/filter.mak @@ -68,7 +68,7 @@ fate-filter-metadata-scenedetect: CMD = run $(FILTER_METADATA_COMMAND) "sws_flag SILENCEDETECT_DEPS = FFPROBE LAVFI_INDEV AMOVIE_FILTER AMR_DEMUXER AMRWB_DECODER FATE_METADATA_FILTER-$(call ALLYES, $(SILENCEDETECT_DEPS)) += fate-filter-metadata-silencedetect fate-filter-metadata-silencedetect: SRC = $(SAMPLES)/amrwb/seed-12k65.awb -fate-filter-metadata-silencedetect: CMD = run $(FILTER_METADATA_COMMAND) "amovie='$(SRC)',silencedetect=d=.1" +fate-filter-metadata-silencedetect: CMD = run $(FILTER_METADATA_COMMAND) "amovie='$(SRC)',silencedetect=d=-20dB" FATE_SAMPLES_FFPROBE += $(FATE_METADATA_FILTER-yes)