{demux_mkv,TOOLS/matroska}: map, expose hearing/visual impaired flags

Were brought up recently in the user channel, and seemed like an
easy enough win. Unfortunately `sh_stream` currently lacks other
fields, so the rest of the flags will be added as the player's
functionality gets extended further.

Ref: https://datatracker.ietf.org/doc/rfc9559/
This commit is contained in:
Jan Ekström
2025-09-11 00:15:01 +03:00
parent 77dee9be2f
commit d837c43656
2 changed files with 16 additions and 0 deletions

View File

@@ -88,6 +88,8 @@ elements_matroska = (
"FlagEnabled, b9, uint", "FlagEnabled, b9, uint",
"FlagDefault, 88, uint", "FlagDefault, 88, uint",
"FlagForced, 55aa, uint", "FlagForced, 55aa, uint",
"FlagHearingImpaired, 55ab, uint",
"FlagVisualImpaired, 55ac, uint",
"FlagLacing, 9c, uint", "FlagLacing, 9c, uint",
"MinCache, 6de7, uint", "MinCache, 6de7, uint",
"MaxCache, 6df8, uint", "MaxCache, 6df8, uint",

View File

@@ -129,6 +129,8 @@ typedef struct mkv_track {
int default_track; int default_track;
int forced_track; int forced_track;
int visual_impaired_track;
int hearing_impaired_track;
unsigned char *private_data; unsigned char *private_data;
unsigned int private_size; unsigned int private_size;
@@ -952,6 +954,16 @@ static void parse_trackentry(struct demuxer *demuxer,
MP_DBG(demuxer, "| + Forced flag: %d\n", track->forced_track); MP_DBG(demuxer, "| + Forced flag: %d\n", track->forced_track);
} }
if (entry->n_flag_visual_impaired) {
track->visual_impaired_track = entry->flag_visual_impaired;
MP_DBG(demuxer, "| + Visual-Impaired flag: %d\n", track->visual_impaired_track);
}
if (entry->n_flag_hearing_impaired) {
track->hearing_impaired_track = entry->flag_hearing_impaired;
MP_DBG(demuxer, "| + Hearing-Impaired flag: %d\n", track->hearing_impaired_track);
}
if (entry->n_default_duration) { if (entry->n_default_duration) {
track->default_duration = entry->default_duration / 1e9; track->default_duration = entry->default_duration / 1e9;
if (entry->default_duration == 0) { if (entry->default_duration == 0) {
@@ -1538,6 +1550,8 @@ static void init_track(demuxer_t *demuxer, mkv_track_t *track,
sh->title = track->name; sh->title = track->name;
sh->default_track = track->default_track; sh->default_track = track->default_track;
sh->forced_track = track->forced_track; sh->forced_track = track->forced_track;
sh->visual_impaired_track = track->visual_impaired_track;
sh->hearing_impaired_track = track->hearing_impaired_track;
} }
static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track); static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track);