[FFmpeg-cvslog] avfilter/avf_showspectrum: add option to set gain for calculating color intensity
Paul B Mahol
git at videolan.org
Mon Jan 4 14:07:36 CET 2016
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Mon Jan 4 12:50:36 2016 +0100| [6defda1cdb41cad1e9fe37c558a9d859b983946f] | committer: Paul B Mahol
avfilter/avf_showspectrum: add option to set gain for calculating color intensity
Inspired by Sonic Visualizer.
Signed-off-by: Paul B Mahol <onemda at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6defda1cdb41cad1e9fe37c558a9d859b983946f
---
doc/filters.texi | 8 ++++++++
libavfilter/avf_showspectrum.c | 6 +++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/doc/filters.texi b/doc/filters.texi
index 35a0e71..cff6db7 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -14688,6 +14688,10 @@ Set orientation of time vs frequency axis. Can be @code{vertical} or
Set ratio of overlap window. Default value is @code{0}.
When value is @code{1} overlap is set to recommended size for specific
window function currently used.
+
+ at item gain
+Set scale gain for calculating intensity color values.
+Default value is @code{1}.
@end table
The usage is very similar to the showwaves filter; see the examples in that
@@ -14809,6 +14813,10 @@ Default value is @code{hann}.
@item orientation
Set orientation of time vs frequency axis. Can be @code{vertical} or
@code{horizontal}. Default is @code{vertical}.
+
+ at item gain
+Set scale gain for calculating intensity color values.
+Default value is @code{1}.
@end table
@subsection Examples
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c
index 48d811e..accd8c7 100644
--- a/libavfilter/avf_showspectrum.c
+++ b/libavfilter/avf_showspectrum.c
@@ -68,6 +68,7 @@ typedef struct {
int win_size;
double win_scale;
float overlap;
+ float gain;
int skip_samples;
float *combine_buffer; ///< color combining buffer (3 * h items)
AVAudioFifo *fifo;
@@ -125,6 +126,7 @@ static const AVOption showspectrum_options[] = {
{ "vertical", NULL, 0, AV_OPT_TYPE_CONST, {.i64=VERTICAL}, 0, 0, FLAGS, "orientation" },
{ "horizontal", NULL, 0, AV_OPT_TYPE_CONST, {.i64=HORIZONTAL}, 0, 0, FLAGS, "orientation" },
{ "overlap", "set window overlap", OFFSET(overlap), AV_OPT_TYPE_FLOAT, {.dbl = 0}, 0, 1, FLAGS },
+ { "gain", "set scale gain", OFFSET(gain), AV_OPT_TYPE_FLOAT, {.dbl = 1}, 0, 128, FLAGS },
{ NULL }
};
@@ -497,6 +499,7 @@ static int plot_spectrum_column(AVFilterLink *inlink, AVFrame *insamples)
ShowSpectrumContext *s = ctx->priv;
AVFrame *outpicref = s->outpicref;
const double w = s->win_scale;
+ const float g = s->gain;
int h = s->orientation == VERTICAL ? s->channel_height : s->channel_width;
int ch, plane, x, y;
@@ -562,7 +565,7 @@ static int plot_spectrum_column(AVFilterLink *inlink, AVFrame *insamples)
float *out = &s->combine_buffer[3 * row];
/* get magnitude */
- float a = w * magnitudes[y];
+ float a = g * w * magnitudes[y];
/* apply scale */
switch (s->scale) {
@@ -814,6 +817,7 @@ static const AVOption showspectrumpic_options[] = {
{ "orientation", "set orientation", OFFSET(orientation), AV_OPT_TYPE_INT, {.i64=VERTICAL}, 0, NB_ORIENTATIONS-1, FLAGS, "orientation" },
{ "vertical", NULL, 0, AV_OPT_TYPE_CONST, {.i64=VERTICAL}, 0, 0, FLAGS, "orientation" },
{ "horizontal", NULL, 0, AV_OPT_TYPE_CONST, {.i64=HORIZONTAL}, 0, 0, FLAGS, "orientation" },
+ { "gain", "set scale gain", OFFSET(gain), AV_OPT_TYPE_FLOAT, {.dbl = 1}, 0, 128, FLAGS },
{ NULL }
};
More information about the ffmpeg-cvslog
mailing list