The metadata key is "segment_uid", and is formatted as 32 hex nibbles grouped in 32 bits words by dashes.
Signed-off-by: Nicolas George <geo...@nsup.org> --- libavformat/matroskadec.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 6c0d0d5..f8519b7 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -273,6 +273,7 @@ typedef struct MatroskaDemuxContext { char *title; char *muxingapp; EbmlBin date_utc; + EbmlBin segment_uid; EbmlList tracks; EbmlList attachments; EbmlList chapters; @@ -342,7 +343,7 @@ static EbmlSyntax matroska_info[] = { { MATROSKA_ID_WRITINGAPP, EBML_NONE }, { MATROSKA_ID_MUXINGAPP, EBML_UTF8, 0, offsetof(MatroskaDemuxContext, muxingapp) }, { MATROSKA_ID_DATEUTC, EBML_BIN, 0, offsetof(MatroskaDemuxContext, date_utc) }, - { MATROSKA_ID_SEGMENTUID, EBML_NONE }, + { MATROSKA_ID_SEGMENTUID, EBML_BIN, 0, offsetof(MatroskaDemuxContext, segment_uid) }, { 0 } }; @@ -1575,6 +1576,27 @@ static void matroska_metadata_creation_time(AVDictionary **metadata, int64_t dat av_dict_set(metadata, "creation_time", buffer, 0); } +static void matroska_metadata_uid(AVFormatContext *s, AVDictionary **metadata, EbmlBin *uid) +{ + char buffer[36], *p = buffer; + unsigned i; + + if(uid->size != 16) { + if (uid->size) + av_log(s, AV_LOG_WARNING, "Invalid SegmentUID length %d\n", uid->size); + return; + } + for (i = 0; i < uid->size; i++) { + if (i > 0 && !(i & 3)) + *(p++) = '-'; + snprintf(p, 3, "%02x", uid->data[i]); + p += 2; + } + *(p++) = 0; + av_assert0(p == buffer + sizeof(buffer)); + av_dict_set(metadata, "segment_uid", buffer, 0); +} + static int matroska_parse_flac(AVFormatContext *s, MatroskaTrack *track, int *offset) @@ -2125,6 +2147,7 @@ static int matroska_read_header(AVFormatContext *s) if (matroska->date_utc.size == 8) matroska_metadata_creation_time(&s->metadata, AV_RB64(matroska->date_utc.data)); + matroska_metadata_uid(s, &s->metadata, &matroska->segment_uid); res = matroska_parse_tracks(s); if (res < 0) -- 2.1.4 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel