aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2023-07-09 19:56:10 +0200
committerPaul B Mahol <onemda@gmail.com>2023-07-09 20:53:52 +0200
commit7f23b72dde9db1a6867e9897b786fba064fe685d (patch)
treecffbcd38935bc04941759bbf3c081503772f2579
parent7357012bb5205e0d03634aff48fc0167a9248190 (diff)
downloadffmpeg-7f23b72dde9db1a6867e9897b786fba064fe685d.tar.gz
avfilter/avf_showcwt: add sqrt frequency scale
-rw-r--r--doc/filters.texi1
-rw-r--r--libavfilter/avf_showcwt.c10
2 files changed, 11 insertions, 0 deletions
diff --git a/doc/filters.texi b/doc/filters.texi
index 54cc5ba820..ab90f2a876 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -30709,6 +30709,7 @@ Set the frequency scale used. Allowed values are:
@item bark
@item mel
@item erbs
+@item sqrt
@end table
Default value is @code{linear}.
diff --git a/libavfilter/avf_showcwt.c b/libavfilter/avf_showcwt.c
index 0ee4414ea2..f9bbcb8ab3 100644
--- a/libavfilter/avf_showcwt.c
+++ b/libavfilter/avf_showcwt.c
@@ -40,6 +40,7 @@ enum FrequencyScale {
FSCALE_BARK,
FSCALE_MEL,
FSCALE_ERBS,
+ FSCALE_SQRT,
NB_FSCALE
};
@@ -127,6 +128,7 @@ static const AVOption showcwt_options[] = {
{ "bark", "bark", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_BARK}, 0, 0, FLAGS, "scale" },
{ "mel", "mel", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_MEL}, 0, 0, FLAGS, "scale" },
{ "erbs", "erbs", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_ERBS}, 0, 0, FLAGS, "scale" },
+ { "sqrt", "sqrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_SQRT}, 0, 0, FLAGS, "scale" },
{ "min", "set minimum frequency", OFFSET(minimum_frequency), AV_OPT_TYPE_FLOAT, {.dbl = 20.}, 1, 2000, FLAGS },
{ "max", "set maximum frequency", OFFSET(maximum_frequency), AV_OPT_TYPE_FLOAT, {.dbl = 20000.}, 0, 192000, FLAGS },
{ "logb", "set logarithmic basis", OFFSET(logarithmic_basis), AV_OPT_TYPE_FLOAT, {.dbl = 0.0001}, 0, 1, FLAGS },
@@ -241,6 +243,10 @@ static void frequency_band(float *frequency_band,
frequency = 676170.4f / (47.06538f - expf(frequency * 0.08950404f)) - 14678.49f;
frequency_derivative *= (frequency * frequency + 14990.4 * frequency + 4577850.f) / 160514.f;
break;
+ case FSCALE_SQRT:
+ frequency = frequency * frequency;
+ frequency_derivative *= 2.f * sqrtf(frequency);
+ break;
}
frequency_band[y*2 ] = frequency;
@@ -680,6 +686,10 @@ static int config_output(AVFilterLink *outlink)
minimum_frequency = 11.17268f * log(1.f + (46.06538f * minimum_frequency) / (minimum_frequency + 14678.49f));
maximum_frequency = 11.17268f * log(1.f + (46.06538f * maximum_frequency) / (maximum_frequency + 14678.49f));
break;
+ case FSCALE_SQRT:
+ minimum_frequency = sqrtf(minimum_frequency);
+ maximum_frequency = sqrtf(maximum_frequency);
+ break;
}
frequency_band(s->frequency_band,