[FFmpeg-cvslog] lavf/matroska: Adding the new SeekPreRoll element

Vignesh Venkatasubramanian git at videolan.org
Sun Aug 18 00:12:38 CEST 2013


ffmpeg | branch: master | Vignesh Venkatasubramanian <vigneshv at google.com> | Fri Aug 16 11:08:06 2013 -0700| [571efd972986c857c50f2ddc6e3cfb320f06450f] | committer: Michael Niedermayer

lavf/matroska: Adding the new SeekPreRoll element

In order to encapsuate Opus in Matroska, there is a new element
that has been added to the Matroska Spec, SeekPreRoll. It has the
duration in nanoseconds that has to be decoded before every seek.
Spec: http://matroska.org/technical/specs/index.html#SeekPreRoll
Proposal for encapsulateing Opus in Matroska:
http://wiki.xiph.org/MatroskaOpus

Signed-off-by: Vignesh Venkatasubramanian <vigneshv at google.com>
Reviewed-by: Paul B Mahol <onemda at gmail.com>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=571efd972986c857c50f2ddc6e3cfb320f06450f
---

 libavformat/matroska.h    |    1 +
 libavformat/matroskaenc.c |    7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 2eb2fe6..9c8071a 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -91,6 +91,7 @@
 #define MATROSKA_ID_CODECINFOURL 0x3B4040
 #define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
 #define MATROSKA_ID_CODECDECODEALL 0xAA
+#define MATROSKA_ID_SEEKPREROLL 0x56BB
 #define MATROSKA_ID_TRACKNAME  0x536E
 #define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
 #define MATROSKA_ID_TRACKFLAGENABLED 0xB9
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index c201d5e..18e96c3 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -121,6 +121,9 @@ typedef struct MatroskaMuxContext {
 /** per-cuepoint - 2 1-byte EBML IDs, 2 1-byte EBML sizes, 8-byte uint max */
 #define MAX_CUEPOINT_SIZE(num_tracks) 12 + MAX_CUETRACKPOS_SIZE*num_tracks
 
+/** Seek preroll value for opus */
+#define OPUS_SEEK_PREROLL 80000000
+
 
 static int ebml_id_size(unsigned int id)
 {
@@ -642,6 +645,10 @@ static int mkv_write_tracks(AVFormatContext *s)
             }
         }
 
+        if (codec->codec_id == AV_CODEC_ID_OPUS) {
+            put_ebml_uint(pb, MATROSKA_ID_SEEKPREROLL, OPUS_SEEK_PREROLL);
+        }
+
         if (mkv->mode == MODE_WEBM && !(codec->codec_id == AV_CODEC_ID_VP8 ||
                                         codec->codec_id == AV_CODEC_ID_VP9 ||
                                       ((codec->codec_id == AV_CODEC_ID_OPUS)&&(codec->strict_std_compliance <= FF_COMPLIANCE_EXPERIMENTAL)) ||



More information about the ffmpeg-cvslog mailing list