summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_ts.c2
-rw-r--r--libmpdemux/demuxer.c28
-rw-r--r--libmpdemux/demuxer.h6
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 */