Merge commit 'f812eeda17e38797df5cb733ce99cdfd829d84ca'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 28 Aug 2013 09:32:02 +0000 (11:32 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 28 Aug 2013 09:33:59 +0000 (11:33 +0200)
* commit 'f812eeda17e38797df5cb733ce99cdfd829d84ca':
  matroskaenc: Fix writing TRACKDEFAULTFLAG

Conflicts:
libavformat/matroskaenc.c
tests/fate/wavpack.mak
tests/ref/lavf/mkv
tests/ref/seek/lavf-mkv

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/matroskaenc.c

@@@ -607,43 -585,20 +607,45 @@@ static int mkv_write_tracks(AVFormatCon
          if ((tag = av_dict_get(st->metadata, "title", NULL, 0)))
              put_ebml_string(pb, MATROSKA_ID_TRACKNAME, tag->value);
          tag = av_dict_get(st->metadata, "language", NULL, 0);
 -        put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, tag ? tag->value:"und");
 +        if (mkv->mode != MODE_WEBM || codec->codec_id != AV_CODEC_ID_WEBVTT) {
 +            put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, tag ? tag->value:"und");
 +        } else if (tag && tag->value) {
 +            put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, tag->value);
 +        }
  
-         if (default_stream_exists) {
+         // The default value for TRACKFLAGDEFAULT is 1, so add element
+         // if we need to clear it.
 -        if (!(st->disposition & AV_DISPOSITION_DEFAULT))
++        if (default_stream_exists && !(st->disposition & AV_DISPOSITION_DEFAULT))
              put_ebml_uint(pb, MATROSKA_ID_TRACKFLAGDEFAULT, !!(st->disposition & AV_DISPOSITION_DEFAULT));
-         }
 -        // look for a codec ID string specific to mkv to use,
 -        // if none are found, use AVI codes
 -        for (j = 0; ff_mkv_codec_tags[j].id != AV_CODEC_ID_NONE; j++) {
 -            if (ff_mkv_codec_tags[j].id == codec->codec_id) {
 -                put_ebml_string(pb, MATROSKA_ID_CODECID, ff_mkv_codec_tags[j].str);
 -                native_id = 1;
 -                break;
 +        if (st->disposition & AV_DISPOSITION_FORCED)
 +            put_ebml_uint(pb, MATROSKA_ID_TRACKFLAGFORCED, 1);
 +
 +        if (mkv->mode == MODE_WEBM && codec->codec_id == AV_CODEC_ID_WEBVTT) {
 +            const char *codec_id;
 +            if (st->disposition & AV_DISPOSITION_CAPTIONS) {
 +                codec_id = "D_WEBVTT/CAPTIONS";
 +                native_id = MATROSKA_TRACK_TYPE_SUBTITLE;
 +            } else if (st->disposition & AV_DISPOSITION_DESCRIPTIONS) {
 +                codec_id = "D_WEBVTT/DESCRIPTIONS";
 +                native_id = MATROSKA_TRACK_TYPE_METADATA;
 +            } else if (st->disposition & AV_DISPOSITION_METADATA) {
 +                codec_id = "D_WEBVTT/METADATA";
 +                native_id = MATROSKA_TRACK_TYPE_METADATA;
 +            } else {
 +                codec_id = "D_WEBVTT/SUBTITLES";
 +                native_id = MATROSKA_TRACK_TYPE_SUBTITLE;
 +            }
 +            put_ebml_string(pb, MATROSKA_ID_CODECID, codec_id);
 +        } else {
 +            // look for a codec ID string specific to mkv to use,
 +            // if none are found, use AVI codes
 +            for (j = 0; ff_mkv_codec_tags[j].id != AV_CODEC_ID_NONE; j++) {
 +                if (ff_mkv_codec_tags[j].id == codec->codec_id) {
 +                    put_ebml_string(pb, MATROSKA_ID_CODECID, ff_mkv_codec_tags[j].str);
 +                    native_id = 1;
 +                    break;
 +                }
              }
          }