[FFmpeg-devel] [PATCH 4/6] ffmpeg: deprecate passing numbers to -vsync

Anton Khirnov anton at khirnov.net
Sat Dec 4 19:41:16 EET 2021


There is never a reason to do this, using symbolic names is always
preferred.
---
 doc/ffmpeg.texi      | 16 +++++++++-------
 fftools/ffmpeg_opt.c |  7 +++++--
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
index 20a547381c..164419cad3 100644
--- a/doc/ffmpeg.texi
+++ b/doc/ffmpeg.texi
@@ -1620,23 +1620,25 @@ It is useful for when flow speed of output packets is important, such as live st
 Read input at native frame rate. This is equivalent to setting @code{-readrate 1}.
 @item -vsync @var{parameter}
 Video sync method.
-For compatibility reasons old values can be specified as numbers.
-Newly added values will have to be specified as strings always.
+
+For compatibility reasons some of the values can be specified as numbers (shown
+in parentheses in the following table). This is deprecated and will stop working
+in the future.
 
 @table @option
- at item 0, passthrough
+ at item passthrough (0)
 Each frame is passed with its timestamp from the demuxer to the muxer.
- at item 1, cfr
+ at item cfr (1)
 Frames will be duplicated and dropped to achieve exactly the requested
 constant frame rate.
- at item 2, vfr
+ at item vfr (2)
 Frames are passed through with their timestamp or dropped so as to
 prevent 2 frames from having the same timestamp.
 @item drop
 As passthrough but destroys all timestamps, making the muxer generate
 fresh timestamps based on frame-rate.
- at item -1, auto
-Chooses between 1 and 2 depending on muxer capabilities. This is the
+ at item auto (-1)
+Chooses between cfr and vfr depending on muxer capabilities. This is the
 default method.
 @end table
 
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index 585e1018a3..a2a880e8e3 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -1741,7 +1741,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in
 
     if ((frame_rate || max_frame_rate) &&
         video_sync_method == VSYNC_PASSTHROUGH)
-        av_log(NULL, AV_LOG_ERROR, "Using -vsync 0 and -r/-fpsmax can produce invalid output files\n");
+        av_log(NULL, AV_LOG_ERROR, "Using -vsync passthrough and -r/-fpsmax can produce invalid output files\n");
 
     MATCH_PER_STREAM_OPT(frame_aspect_ratios, str, frame_aspect_ratio, oc, st);
     if (frame_aspect_ratio) {
@@ -3201,8 +3201,11 @@ static int opt_vsync(void *optctx, const char *opt, const char *arg)
     else if (!av_strcasecmp(arg, "passthrough")) video_sync_method = VSYNC_PASSTHROUGH;
     else if (!av_strcasecmp(arg, "drop"))        video_sync_method = VSYNC_DROP;
 
-    if (video_sync_method == VSYNC_AUTO)
+    if (video_sync_method == VSYNC_AUTO) {
         video_sync_method = parse_number_or_die("vsync", arg, OPT_INT, VSYNC_AUTO, VSYNC_VFR);
+        av_log(NULL, AV_LOG_WARNING, "Passing a number to -vsync is deprecated,"
+               " use a string argument as described in the manual.\n");
+    }
     return 0;
 }
 
-- 
2.33.0



More information about the ffmpeg-devel mailing list