aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2023-07-09 20:50:04 +0200
committerPaul B Mahol <onemda@gmail.com>2023-07-09 20:53:55 +0200
commitfcbee7efdfb55a25d573669114b5a968a72deb9f (patch)
tree2bc8ab9db8c1bbb003090252ad9cc237c6711c8c
parentaee8689ba5700c0335fbc020910eab0f13009086 (diff)
downloadffmpeg-fcbee7efdfb55a25d573669114b5a968a72deb9f.tar.gz
avfilter/avf_showcwt: add qdrt 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 1a07e03bad..a8e0dbde15 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -30711,6 +30711,7 @@ Set the frequency scale used. Allowed values are:
@item erbs
@item sqrt
@item cbrt
+@item qdrt
@end table
Default value is @code{linear}.
diff --git a/libavfilter/avf_showcwt.c b/libavfilter/avf_showcwt.c
index b989beab11..ff2c06fb7a 100644
--- a/libavfilter/avf_showcwt.c
+++ b/libavfilter/avf_showcwt.c
@@ -42,6 +42,7 @@ enum FrequencyScale {
FSCALE_ERBS,
FSCALE_SQRT,
FSCALE_CBRT,
+ FSCALE_QDRT,
NB_FSCALE
};
@@ -131,6 +132,7 @@ static const AVOption showcwt_options[] = {
{ "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" },
{ "cbrt", "cbrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_CBRT}, 0, 0, FLAGS, "scale" },
+ { "qdrt", "qdrt", 0, AV_OPT_TYPE_CONST,{.i64=FSCALE_QDRT}, 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 },
@@ -253,6 +255,10 @@ static void frequency_band(float *frequency_band,
frequency = frequency * frequency * frequency;
frequency_derivative *= 3.f * powf(frequency, 2.f / 3.f);
break;
+ case FSCALE_QDRT:
+ frequency = frequency * frequency * frequency * frequency;
+ frequency_derivative *= 4.f * powf(frequency, 3.f / 4.f);
+ break;
}
frequency_band[y*2 ] = frequency;
@@ -700,6 +706,10 @@ static int config_output(AVFilterLink *outlink)
minimum_frequency = cbrtf(minimum_frequency);
maximum_frequency = cbrtf(maximum_frequency);
break;
+ case FSCALE_QDRT:
+ minimum_frequency = powf(minimum_frequency, 0.25f);
+ maximum_frequency = powf(maximum_frequency, 0.25f);
+ break;
}
frequency_band(s->frequency_band,