# HG changeset patch # User conrad # Date 1188951841 0 # Node ID 12ec768e51666114749654fcd9782bf753da3c3a # Parent 6395824043bd0180c314d8fdaf46f767ac1e681d Write the creation time diff -r 6395824043bd -r 12ec768e5166 matroskaenc.c --- a/matroskaenc.c Wed Sep 05 00:23:59 2007 +0000 +++ b/matroskaenc.c Wed Sep 05 00:24:01 2007 +0000 @@ -127,6 +127,18 @@ put_ebml_binary(pb, elementid, str, strlen(str)); } +// avtime is POSIX time, microseconds +static void put_ebml_date(ByteIOContext *pb, unsigned int elementid, int64_t avtime) +{ + // midnight Jan 1, 1970 in UNIX epoch, microseconds + const int64_t ebmlDateStart = 978307200ULL * 1000000; + int64_t ebmlTime = (avtime - ebmlDateStart) * 1000; + + put_ebml_id(pb, elementid); + put_ebml_size(pb, 8, 0); + put_be64(pb, ebmlTime); +} + // this reserves exactly the amount of space specified by size, which must be at least 2 static void put_ebml_void(ByteIOContext *pb, uint64_t size) { @@ -526,6 +538,7 @@ if (!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) { 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() ); } // XXX: segment UID // reserve space for the duration