[FFmpeg-devel] [PATCH 8/8] lavfi/avf_showspatial: add framerate option

Anton Khirnov anton at khirnov.net
Wed Sep 28 12:21:32 EEST 2022


Apparently this option was intended (the context contains a
currently-unused frame_rate field), but was never added. This results in
the output timebase being unset after config_output(), so the input
audio timebase ends up being used for video output, which is clearly
wrong.

Add an option for setting output video framerate. Also set output frame
durations.
---
 doc/filters.texi              | 3 +++
 libavfilter/avf_showspatial.c | 4 ++++
 libavfilter/version.h         | 2 +-
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index d0f718678c..7e516a43ba 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -29337,6 +29337,9 @@ Default value is @code{hann}.
 Set ratio of overlap window. Default value is @code{0.5}.
 When value is @code{1} overlap is set to recommended size for specific
 window function currently used.
+
+ at item rate, r
+Set output framerate.
 @end table
 
 @anchor{showspectrum}
diff --git a/libavfilter/avf_showspatial.c b/libavfilter/avf_showspatial.c
index 7807628540..3db4db9af0 100644
--- a/libavfilter/avf_showspatial.c
+++ b/libavfilter/avf_showspatial.c
@@ -62,6 +62,8 @@ static const AVOption showspatial_options[] = {
     { "win_size", "set window size", OFFSET(win_size), AV_OPT_TYPE_INT, {.i64 = 4096}, 1024, 65536, FLAGS },
     WIN_FUNC_OPTION("win_func", OFFSET(win_func), FLAGS, WFUNC_HANNING),
     { "overlap", "set window overlap", OFFSET(overlap), AV_OPT_TYPE_FLOAT, {.dbl=0.5}, 0, 1, FLAGS },
+    { "rate", "set video rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str="25"}, 0, INT_MAX, FLAGS },
+    { "r",    "set video rate", OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str="25"}, 0, INT_MAX, FLAGS },
     { NULL }
 };
 
@@ -187,6 +189,7 @@ static int config_output(AVFilterLink *outlink)
         }
     }
 
+    outlink->frame_rate = s->frame_rate;
     outlink->time_base = av_inv_q(outlink->frame_rate);
 
     av_audio_fifo_free(s->fifo);
@@ -253,6 +256,7 @@ static int draw_spatial(AVFilterLink *inlink, AVFrame *insamples)
     }
 
     outpicref->pts = av_rescale_q(insamples->pts, inlink->time_base, outlink->time_base);
+    outpicref->duration = 1;
 
     return ff_filter_frame(outlink, outpicref);
 }
diff --git a/libavfilter/version.h b/libavfilter/version.h
index 5aac9c513a..4ccbf5641c 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -32,7 +32,7 @@
 #include "version_major.h"
 
 #define LIBAVFILTER_VERSION_MINOR  49
-#define LIBAVFILTER_VERSION_MICRO 100
+#define LIBAVFILTER_VERSION_MICRO 101
 
 
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
-- 
2.35.1



More information about the ffmpeg-devel mailing list