[FFmpeg-devel] [PATCH] Pass VBV delay to the calling application via ctx

Christophe Massiot massiot
Tue Feb 8 15:12:34 CET 2011


VBV delay is useful for T-STD compliance in some TS muxers. It is
certainly possible to retrieve it by parsing the output of FFmpeg, but
getting it from the context makes it simpler and less error-prone.
---
 doc/APIchanges             |    3 +++
 libavcodec/avcodec.h       |    9 ++++++++-
 libavcodec/mpegvideo_enc.c |    1 +
 3 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index b44182d..05e15bf 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil:   2009-03-08
 
 API changes, most recent first:
 
+2011-02-08 - X - lavc 52.110.0 - vbv_delay
+  Add vbv_delay field to AVCodecContext
+
 2011-02-06 - fe174fc - lavf 52.97.0 - avio.h
   Add flag for non-blocking protocols: URL_FLAG_NONBLOCK
 
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index f96ae84..05fa743 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -32,7 +32,7 @@
 #include "libavutil/cpu.h"
 
 #define LIBAVCODEC_VERSION_MAJOR 52
-#define LIBAVCODEC_VERSION_MINOR 109
+#define LIBAVCODEC_VERSION_MINOR 110
 #define LIBAVCODEC_VERSION_MICRO  0
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
@@ -2843,6 +2843,13 @@ typedef struct AVCodecContext {
     int64_t pts_correction_last_pts;       /// PTS of the last frame
     int64_t pts_correction_last_dts;       /// DTS of the last frame
 
+    /**
+     * VBV delay coded in the last frame (in seconds).
+     * Used for compliant TS muxing.
+     * - encoding: Set by libavcodec.
+     * - decoding: unused.
+     */
+    double vbv_delay;
 } AVCodecContext;
 
 /**
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 6167a9b..5b9c34f 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -1381,6 +1381,7 @@ vbv_retry:
             s->vbv_delay_ptr[1]  = vbv_delay>>5;
             s->vbv_delay_ptr[2] &= 0x07;
             s->vbv_delay_ptr[2] |= vbv_delay<<3;
+            avctx->vbv_delay = vbv_delay/90000.;
         }
         s->total_bits += s->frame_bits;
         avctx->frame_bits  = s->frame_bits;
-- 
1.7.1




More information about the ffmpeg-devel mailing list