[FFmpeg-devel] [PATCH 1/1] avformat/mpegenc.c: vbvsize option

Nicolas Gaullier nicolas.gaullier at arkena.com
Thu Oct 31 19:04:58 EET 2019


Allow the user to set or override the vbv size
---
 libavformat/mpegenc.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
index f6980231a2..1613c8afa1 100644
--- a/libavformat/mpegenc.c
+++ b/libavformat/mpegenc.c
@@ -67,6 +67,7 @@ typedef struct MpegMuxContext {
     int system_header_freq;
     int system_header_size;
     int user_mux_rate; /* bitrate in units of bits/s */
+    int user_vbv_size; /* vbv buffer size in units of bits/s */
     int mux_rate; /* bitrate in units of 50 bytes/s */
     /* stream info */
     int audio_bound;
@@ -433,7 +434,9 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
                 stream->id = mpv_id++;
 
             props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL);
-            if (props && props->buffer_size)
+            if (s->user_vbv_size)
+                stream->max_buffer_size = 6 * 1024 + s->user_vbv_size / 8;
+            else if (props && props->buffer_size)
                 stream->max_buffer_size = 6 * 1024 + props->buffer_size / 8;
             else {
                 av_log(ctx, AV_LOG_WARNING,
@@ -1268,6 +1271,7 @@ static void mpeg_mux_deinit(AVFormatContext *ctx)
 #define E AV_OPT_FLAG_ENCODING_PARAM
 static const AVOption options[] = {
     { "muxrate", NULL,                                          OFFSET(user_mux_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, ((1<<22) - 1) * (8 * 50), E },
+    { "vbvsize", "set vbv buffer size (in bits)",               OFFSET(user_vbv_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, (1LL<<32) - 1, E},
     { "preload", "Initial demux-decode delay in microseconds.", OFFSET(preload),  AV_OPT_TYPE_INT, { .i64 = 500000 }, 0, INT_MAX, E },
     { NULL },
 };
-- 
2.22.0



More information about the ffmpeg-devel mailing list