diff options
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/demux_ts.c | 2 | ||||
-rw-r--r-- | libmpdemux/demuxer.c | 28 | ||||
-rw-r--r-- | libmpdemux/demuxer.h | 6 |
3 files changed, 14 insertions, 22 deletions
diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c index 237a524bd4..0085f286e0 100644 --- a/libmpdemux/demux_ts.c +++ b/libmpdemux/demux_ts.c @@ -1029,7 +1029,7 @@ static demuxer_t *demux_open_ts(demuxer_t * demuxer) if(demuxer->opts->audio_lang != NULL) { - strncpy(params.alang, demuxer->opts->audio_lang, 3); + strncpy(params.alang, demuxer->opts->audio_lang[0], 3); params.alang[3] = 0; } else diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 9efcf91862..a4cee9b8ea 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -1561,18 +1561,15 @@ int demuxer_set_angle(demuxer_t *demuxer, int angle) return angle; } -int demuxer_audio_track_by_lang_and_default(struct demuxer *d, char *lang) +int demuxer_audio_track_by_lang_and_default(struct demuxer *d, char **langt) { - if (!lang) - lang = ""; + int n = 0; while (1) { - lang += strspn(lang, ","); - int len = strcspn(lang, ","); + char *lang = langt ? langt[n++] : NULL; int id = -1; for (int i = 0; i < MAX_A_STREAMS; i++) { struct sh_audio *sh = d->a_streams[i]; - if (sh && (!len || sh->lang && strlen(sh->lang) == len && - !memcmp(lang, sh->lang, len))) { + if (sh && (!lang || sh->lang && !strcmp(lang, sh->lang))) { if (sh->default_track) return sh->aid; if (id < 0) @@ -1581,34 +1578,29 @@ int demuxer_audio_track_by_lang_and_default(struct demuxer *d, char *lang) } if (id >= 0) return id; - if (!len) + if (!lang) return -1; - lang += len; } } -int demuxer_sub_track_by_lang_and_default(struct demuxer *d, char *lang) +int demuxer_sub_track_by_lang_and_default(struct demuxer *d, char **langt) { - if (!lang) - lang = ""; + int n = 0; while (1) { - lang += strspn(lang, ","); - int len = strcspn(lang, ","); + char *lang = langt ? langt[n++] : NULL; int id = -1; for (int i = 0; i < MAX_S_STREAMS; i++) { struct sh_sub *sh = d->s_streams[i]; - if (sh && (!len || sh->lang && strlen(sh->lang) == len && - !memcmp(lang, sh->lang, len))) { + if (sh && (!lang || sh->lang && !strcmp(lang, sh->lang))) { if (sh->default_track) return sh->sid; if (id < 0) id = sh->sid; } } - if (!len) + if (!lang) return -1; if (id >= 0) return id; - lang += len; } } diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index 4a8a7545d1..ed2d651a8c 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -421,7 +421,7 @@ int demuxer_set_angle(struct demuxer *demuxer, int angle); int demuxer_angles_count(struct demuxer *demuxer); /* Get the index of a track. - * lang is a comma-separated list, NULL is same as empty list + * lang is a string list, NULL is same as empty list * Sort tracks based on the following criteria: * 1) earlier match in lang list, or last no match * 2) track is marked default (default wins) @@ -431,7 +431,7 @@ int demuxer_angles_count(struct demuxer *demuxer); * For subs, select best track according to the same criteria, but return -1 * if all tracks are no-lang-match, not-default. */ -int demuxer_audio_track_by_lang_and_default(struct demuxer *d, char *lang); -int demuxer_sub_track_by_lang_and_default(struct demuxer *d, char *lang); +int demuxer_audio_track_by_lang_and_default(struct demuxer *d, char **langt); +int demuxer_sub_track_by_lang_and_default(struct demuxer *d, char **langt); #endif /* MPLAYER_DEMUXER_H */ |