diff options
author | Clément Bœsch <ubitux@gmail.com> | 2012-10-21 21:01:18 +0200 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2012-10-25 22:20:22 +0200 |
commit | 13d26716fb58ff705b9896bb80f26756245d2648 (patch) | |
tree | 50e1a9ba22e3739c78596d9109edbe74ad76ca7f | |
parent | b19bfd6c9f42588c7a172bb019e27696972b8d2c (diff) | |
download | ffmpeg-13d26716fb58ff705b9896bb80f26756245d2648.tar.gz |
lavfi/showspectrum: add sliding mode.
-rw-r--r-- | doc/filters.texi | 3 | ||||
-rw-r--r-- | libavfilter/avf_showspectrum.c | 17 | ||||
-rw-r--r-- | libavfilter/version.h | 2 |
3 files changed, 17 insertions, 5 deletions
diff --git a/doc/filters.texi b/doc/filters.texi index 93fdcec39f..c4e29c30f1 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -4704,6 +4704,9 @@ The filter accepts the following named parameters: @table @option @item size, s Specify the video size for the output. Default value is @code{640x480}. +@item slide +Specify if the spectrum should slide along the window. Default value is +@code{0}. @end table The usage is very similar to the showwaves filter; see the examples in that diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c index 641c27f9bf..1600265415 100644 --- a/libavfilter/avf_showspectrum.c +++ b/libavfilter/avf_showspectrum.c @@ -37,6 +37,7 @@ typedef struct { int w, h; AVFilterBufferRef *outpicref; int req_fullfilled; + int sliding; ///< 1 if sliding mode, 0 otherwise int xpos; ///< x position (current column) RDFTContext *rdft; ///< Real Discrete Fourier Transform context int rdft_bits; ///< number of bits (RDFT window size = 1<<rdft_bits) @@ -52,6 +53,7 @@ typedef struct { static const AVOption showspectrum_options[] = { { "size", "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "640x480"}, 0, 0, FLAGS }, { "s", "set video size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "640x480"}, 0, 0, FLAGS }, + { "slide", "set sliding mode", OFFSET(sliding), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, FLAGS }, { NULL }, }; @@ -247,16 +249,23 @@ static int plot_spectrum_column(AVFilterLink *inlink, AVFilterBufferRef *insampl for (y = 0; y < outlink->h; y++) { // FIXME: bin[0] contains first and last bins - const int pos = showspectrum->xpos * 3 + (outlink->h - y - 1) * outpicref->linesize[0]; + uint8_t *p = outpicref->data[0] + (outlink->h - y - 1) * outpicref->linesize[0]; const double w = 1. / sqrt(nb_freq); int a = sqrt(w * MAGNITUDE(RE(0), IM(0))); int b = nb_display_channels > 1 ? sqrt(w * MAGNITUDE(RE(1), IM(1))) : a; + if (showspectrum->sliding) { + memmove(p, p + 3, (outlink->w - 1) * 3); + p += (outlink->w - 1) * 3; + } else { + p += showspectrum->xpos * 3; + } + a = FFMIN(a, 255); b = FFMIN(b, 255); - outpicref->data[0][pos] = a; - outpicref->data[0][pos+1] = b; - outpicref->data[0][pos+2] = (a + b) / 2; + p[0] = a; + p[1] = b; + p[2] = (a + b) / 2; } outpicref->pts = insamples->pts + av_rescale_q(showspectrum->consumed, diff --git a/libavfilter/version.h b/libavfilter/version.h index 672472bd89..7b559031be 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 20 -#define LIBAVFILTER_VERSION_MICRO 105 +#define LIBAVFILTER_VERSION_MICRO 106 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ |