From 4b8f58eea507e70fecc31717b909fc387e7a9ded Mon Sep 17 00:00:00 2001 From: David Conrad Date: Wed, 5 Sep 2007 00:24:03 +0000 Subject: [PATCH] Write segment UID Originally committed as revision 10337 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/matroskaenc.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 703a05d734..5247c5350c 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -20,6 +20,7 @@ */ #include "avformat.h" +#include "random.h" #include "riff.h" #include "xiph.h" #include "matroska.h" @@ -61,6 +62,8 @@ typedef struct MatroskaMuxContext { mkv_seekhead *main_seekhead; mkv_seekhead *cluster_seekhead; mkv_cues *cues; + + AVRandomState rand_state; } MatroskaMuxContext; static void put_ebml_id(ByteIOContext *pb, unsigned int id) @@ -507,6 +510,9 @@ static int mkv_write_header(AVFormatContext *s) MatroskaMuxContext *mkv = s->priv_data; ByteIOContext *pb = &s->pb; offset_t ebml_header, segment_info; + int i; + + av_init_random(av_gettime(), &mkv->rand_state); ebml_header = start_ebml_master(pb, EBML_ID_HEADER); put_ebml_uint (pb, EBML_ID_EBMLVERSION , 1); @@ -536,11 +542,16 @@ static int mkv_write_header(AVFormatContext *s) if (strlen(s->title)) put_ebml_string(pb, MATROSKA_ID_TITLE, s->title); if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) { + uint8_t segmentuid[16]; + for (i = 0; i < 16; i++) + segmentuid[i] = av_random(&mkv->rand_state); + put_ebml_string(pb, MATROSKA_ID_MUXINGAPP , LIBAVFORMAT_IDENT); put_ebml_string(pb, MATROSKA_ID_WRITINGAPP, LIBAVFORMAT_IDENT); put_ebml_date (pb, MATROSKA_ID_DATEUTC , av_gettime() ); + put_ebml_binary(pb, MATROSKA_ID_SEGMENTUID, segmentuid, 16); } - // XXX: segment UID + // reserve space for the duration mkv->duration = 0; mkv->duration_offset = url_ftell(pb);