From 26f52c5730bbe66229e05f11be8a94a539786318 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 27 Jun 2015 22:02:24 +0200 Subject: demux: export forced flag At least Matroska files have a "forced" flag (in addition to the "default" flag). Export this flag. Treat it almost like the default flag, but with slightly higher priority. --- demux/demux_lavf.c | 4 +++- demux/demux_mkv.c | 7 +++++++ demux/stheader.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) (limited to 'demux') diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 659452b5f1..db4c8edac9 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -636,7 +636,9 @@ static void handle_stream(demuxer_t *demuxer, int i) sh->lav_headers = codec; if (st->disposition & AV_DISPOSITION_DEFAULT) - sh->default_track = 1; + sh->default_track = true; + if (st->disposition & AV_DISPOSITION_FORCED) + sh->forced_track = true; if (priv->format_hack.use_stream_ids) sh->demuxer_id = st->id; AVDictionaryEntry *title = av_dict_get(st->metadata, "title", NULL, 0); diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index cadb1a3a7f..0b2bd719ee 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -114,6 +114,7 @@ typedef struct mkv_track { double codec_delay; int default_track; + int forced_track; unsigned char *private_data; unsigned int private_size; @@ -631,6 +632,11 @@ static void parse_trackentry(struct demuxer *demuxer, track->default_track = 1; } + if (entry->n_flag_forced) { + track->forced_track = entry->flag_forced; + MP_VERBOSE(demuxer, "| + Forced flag: %u\n", track->forced_track); + } + if (entry->n_default_duration) { track->default_duration = entry->default_duration / 1e9; if (entry->default_duration == 0) { @@ -1171,6 +1177,7 @@ static void init_track(demuxer_t *demuxer, mkv_track_t *track, sh->demuxer_id = track->tnum; sh->title = track->name; sh->default_track = track->default_track; + sh->forced_track = track->forced_track; } static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track); diff --git a/demux/stheader.h b/demux/stheader.h index fdb302713c..a615867685 100644 --- a/demux/stheader.h +++ b/demux/stheader.h @@ -58,6 +58,7 @@ struct sh_stream { char *title; char *lang; // language code bool default_track; // container default track flag + bool forced_track; // container forced track flag int hls_bitrate; bool missing_timestamps; -- cgit v1.2.3