Correctly mark non-default streams when muxing matroska.
Fixes ticket #1815. Reviewed-by: Hendrik Leppkes
This commit is contained in:
parent
71f8d70456
commit
91f359292a
@ -530,12 +530,16 @@ static int mkv_write_tracks(AVFormatContext *s)
|
|||||||
MatroskaMuxContext *mkv = s->priv_data;
|
MatroskaMuxContext *mkv = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
ebml_master tracks;
|
ebml_master tracks;
|
||||||
int i, j, ret;
|
int i, j, ret, default_stream_exists = 0;
|
||||||
|
|
||||||
ret = mkv_add_seekhead_entry(mkv->main_seekhead, MATROSKA_ID_TRACKS, avio_tell(pb));
|
ret = mkv_add_seekhead_entry(mkv->main_seekhead, MATROSKA_ID_TRACKS, avio_tell(pb));
|
||||||
if (ret < 0) return ret;
|
if (ret < 0) return ret;
|
||||||
|
|
||||||
tracks = start_ebml_master(pb, MATROSKA_ID_TRACKS, 0);
|
tracks = start_ebml_master(pb, MATROSKA_ID_TRACKS, 0);
|
||||||
|
for (i = 0; i < s->nb_streams; i++) {
|
||||||
|
AVStream *st = s->streams[i];
|
||||||
|
default_stream_exists |= st->disposition & AV_DISPOSITION_DEFAULT;
|
||||||
|
}
|
||||||
for (i = 0; i < s->nb_streams; i++) {
|
for (i = 0; i < s->nb_streams; i++) {
|
||||||
AVStream *st = s->streams[i];
|
AVStream *st = s->streams[i];
|
||||||
AVCodecContext *codec = st->codec;
|
AVCodecContext *codec = st->codec;
|
||||||
@ -570,8 +574,9 @@ static int mkv_write_tracks(AVFormatContext *s)
|
|||||||
tag = av_dict_get(st->metadata, "language", NULL, 0);
|
tag = av_dict_get(st->metadata, "language", NULL, 0);
|
||||||
put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, tag ? tag->value:"und");
|
put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, tag ? tag->value:"und");
|
||||||
|
|
||||||
if (st->disposition)
|
if (default_stream_exists) {
|
||||||
put_ebml_uint(pb, MATROSKA_ID_TRACKFLAGDEFAULT, !!(st->disposition & AV_DISPOSITION_DEFAULT));
|
put_ebml_uint(pb, MATROSKA_ID_TRACKFLAGDEFAULT, !!(st->disposition & AV_DISPOSITION_DEFAULT));
|
||||||
|
}
|
||||||
if (st->disposition & AV_DISPOSITION_FORCED)
|
if (st->disposition & AV_DISPOSITION_FORCED)
|
||||||
put_ebml_uint(pb, MATROSKA_ID_TRACKFLAGFORCED, 1);
|
put_ebml_uint(pb, MATROSKA_ID_TRACKFLAGFORCED, 1);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user