]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/matroskadec.c
avformat/nut: add support for per frame side & meta data with version 4
[ffmpeg] / libavformat / matroskadec.c
index eb3b4e6ea7fb319da88a42534312026cddc4f1ba..e05101f4f9b843720c37c8d353f8d970ceec0360 100644 (file)
@@ -253,6 +253,7 @@ typedef struct {
     uint64_t time_scale;
     double   duration;
     char    *title;
+    char    *muxingapp;
     EbmlBin date_utc;
     EbmlList tracks;
     EbmlList attachments;
@@ -317,7 +318,7 @@ static EbmlSyntax matroska_info[] = {
     { MATROSKA_ID_DURATION,           EBML_FLOAT, 0, offsetof(MatroskaDemuxContext,duration) },
     { MATROSKA_ID_TITLE,              EBML_UTF8,  0, offsetof(MatroskaDemuxContext,title) },
     { MATROSKA_ID_WRITINGAPP,         EBML_NONE },
-    { MATROSKA_ID_MUXINGAPP,          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 },
     { 0 }
@@ -1587,6 +1588,7 @@ static int matroska_read_header(AVFormatContext *s)
         matroska->ctx->duration = matroska->duration * matroska->time_scale
                                   * 1000 / AV_TIME_BASE;
     av_dict_set(&s->metadata, "title", matroska->title, 0);
+    av_dict_set(&s->metadata, "encoder", matroska->muxingapp, 0);
 
     if (matroska->date_utc.size == 8)
         matroska_metadata_creation_time(&s->metadata, AV_RB64(matroska->date_utc.data));
@@ -1803,7 +1805,7 @@ static int matroska_read_header(AVFormatContext *s)
             track->audio.sub_packet_h    = avio_rb16(&b);
             track->audio.frame_size      = avio_rb16(&b);
             track->audio.sub_packet_size = avio_rb16(&b);
-            if (flavor <= 0 || track->audio.coded_framesize <= 0 ||
+            if (flavor < 0 || track->audio.coded_framesize <= 0 ||
                 track->audio.sub_packet_h <= 0 || track->audio.frame_size <= 0 ||
                 track->audio.sub_packet_size <= 0)
                 return AVERROR_INVALIDDATA;
@@ -1834,7 +1836,7 @@ static int matroska_read_header(AVFormatContext *s)
         avpriv_set_pts_info(st, 64, matroska->time_scale*track->time_scale, 1000*1000*1000); /* 64 bit pts in ns */
 
         st->codec->codec_id = codec_id;
-        st->start_time = 0;
+
         if (strcmp(track->language, "und"))
             av_dict_set(&st->metadata, "language", track->language, 0);
         av_dict_set(&st->metadata, "title", track->name, 0);