summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
Diffstat (limited to 'stream')
-rw-r--r--stream/stream_dvd.c23
-rw-r--r--stream/stream_dvd.h4
-rw-r--r--stream/stream_dvdnav.c16
-rw-r--r--stream/stream_dvdnav.h4
4 files changed, 19 insertions, 28 deletions
diff --git a/stream/stream_dvd.c b/stream/stream_dvd.c
index a302da81f1..f257ab78bd 100644
--- a/stream/stream_dvd.c
+++ b/stream/stream_dvd.c
@@ -125,24 +125,21 @@ int dvd_lang_from_aid(stream_t *stream, int id) {
return 0;
}
-int dvd_aid_from_lang(stream_t *stream, const unsigned char* lang) {
+int dvd_aid_from_lang(stream_t *stream, char **lang) {
dvd_priv_t *d=stream->priv;
int code,i;
- if(lang) {
- while(strlen(lang)>=2) {
- code=lang[1]|(lang[0]<<8);
+ for (int n = 0; lang[n]; n++) {
+ code = lang[n][1] | (lang[n][0] << 8);
for(i=0;i<d->nr_of_channels;i++) {
if(d->audio_streams[i].language==code) {
mp_tmsg(MSGT_OPEN,MSGL_INFO,"Selected DVD audio channel: %d language: %c%c\n",
- d->audio_streams[i].id, lang[0],lang[1]);
+ d->audio_streams[i].id, lang[n][0], lang[n][1]);
return d->audio_streams[i].id;
}
//printf("%X != %X (%c%c)\n",code,d->audio_streams[i].language,lang[0],lang[1]);
}
- lang+=2; while (lang[0]==',' || lang[0]==' ') ++lang;
- }
- mp_tmsg(MSGT_OPEN,MSGL_WARN,"No matching DVD audio language found!\n");
}
+ mp_tmsg(MSGT_OPEN,MSGL_WARN,"No matching DVD audio language found!\n");
return -1;
}
@@ -169,19 +166,17 @@ int dvd_lang_from_sid(stream_t *stream, int id) {
return 0;
}
-int dvd_sid_from_lang(stream_t *stream, const unsigned char* lang) {
+int dvd_sid_from_lang(stream_t *stream, char **lang) {
dvd_priv_t *d=stream->priv;
int code,i;
- while(lang && strlen(lang)>=2) {
- code=lang[1]|(lang[0]<<8);
+ for (int n = 0; lang[n]; n++) {
+ code = lang[n][1] | (lang[n][0] << 8);
for(i=0;i<d->nr_of_subtitles;i++) {
if(d->subtitles[i].language==code) {
- mp_tmsg(MSGT_OPEN,MSGL_INFO,"Selected DVD subtitle channel: %d language: %c%c\n", i, lang[0],lang[1]);
+ mp_tmsg(MSGT_OPEN,MSGL_INFO,"Selected DVD subtitle channel: %d language: %c%c\n", i, lang[n][0], lang[n][1]);
return d->subtitles[i].id;
}
}
- lang+=2;
- while (lang[0]==',' || lang[0]==' ') ++lang;
}
mp_tmsg(MSGT_OPEN,MSGL_WARN,"No matching DVD subtitle language found!\n");
return -1;
diff --git a/stream/stream_dvd.h b/stream/stream_dvd.h
index f0f0b5d08f..fe52d4399a 100644
--- a/stream/stream_dvd.h
+++ b/stream/stream_dvd.h
@@ -59,8 +59,8 @@ typedef struct {
int dvd_number_of_subs(stream_t *stream);
int dvd_lang_from_aid(stream_t *stream, int id);
int dvd_lang_from_sid(stream_t *stream, int id);
-int dvd_aid_from_lang(stream_t *stream, const unsigned char* lang);
-int dvd_sid_from_lang(stream_t *stream, const unsigned char* lang);
+int dvd_aid_from_lang(stream_t *stream, char **lang);
+int dvd_sid_from_lang(stream_t *stream, char **lang);
int dvd_chapter_from_cell(dvd_priv_t *dvd,int title,int cell);
#endif /* MPLAYER_STREAM_DVD_H */
diff --git a/stream/stream_dvdnav.c b/stream/stream_dvdnav.c
index 21522f8b6b..b1c51e68e9 100644
--- a/stream/stream_dvdnav.c
+++ b/stream/stream_dvdnav.c
@@ -733,14 +733,14 @@ static int mp_dvdnav_get_aid_from_format (stream_t *stream, int index, uint8_t l
* \param lang: 2-characters language code[s], eventually separated by spaces of commas
* \return -1 on error, current subtitle id if successful
*/
-int mp_dvdnav_aid_from_lang(stream_t *stream, const unsigned char *language) {
+int mp_dvdnav_aid_from_lang(stream_t *stream, char **language) {
dvdnav_priv_t * priv = stream->priv;
int k;
uint8_t lg;
uint16_t lang, lcode;
- while(language && strlen(language)>=2) {
- lcode = (language[0] << 8) | (language[1]);
+ for (int i = 0; language[i]; i++) {
+ lcode = (language[i][0] << 8) | (language[i][1]);
for(k=0; k<32; k++) {
lg = dvdnav_get_audio_logical_stream(priv->dvdnav, k);
if(lg == 0xff) continue;
@@ -748,8 +748,6 @@ int mp_dvdnav_aid_from_lang(stream_t *stream, const unsigned char *language) {
if(lang != 0xFFFF && lang == lcode)
return mp_dvdnav_get_aid_from_format (stream, k, lg);
}
- language += 2;
- while(language[0]==',' || language[0]==' ') ++language;
}
return -1;
}
@@ -785,13 +783,13 @@ int mp_dvdnav_lang_from_aid(stream_t *stream, int aid, unsigned char *buf) {
* \param lang: 2-characters language code[s], eventually separated by spaces of commas
* \return -1 on error, current subtitle id if successful
*/
-int mp_dvdnav_sid_from_lang(stream_t *stream, const unsigned char *language) {
+int mp_dvdnav_sid_from_lang(stream_t *stream, char **language) {
dvdnav_priv_t * priv = stream->priv;
uint8_t lg, k;
uint16_t lang, lcode;
- while(language && strlen(language)>=2) {
- lcode = (language[0] << 8) | (language[1]);
+ for (int i = 0; language[i]; i++) {
+ lcode = (language[i][0] << 8) | (language[i][1]);
for(k=0; k<32; k++) {
lg = dvdnav_get_spu_logical_stream(priv->dvdnav, k);
if(lg == 0xff) continue;
@@ -800,8 +798,6 @@ int mp_dvdnav_sid_from_lang(stream_t *stream, const unsigned char *language) {
return lg;
}
}
- language += 2;
- while(language[0]==',' || language[0]==' ') ++language;
}
return -1;
}
diff --git a/stream/stream_dvdnav.h b/stream/stream_dvdnav.h
index 97c2cb6d71..ae58367320 100644
--- a/stream/stream_dvdnav.h
+++ b/stream/stream_dvdnav.h
@@ -30,9 +30,9 @@ typedef struct {
int mp_dvdnav_number_of_subs(stream_t *stream);
int mp_dvdnav_aid_from_audio_num(stream_t *stream, int audio_num);
-int mp_dvdnav_aid_from_lang(stream_t *stream, const unsigned char *language);
+int mp_dvdnav_aid_from_lang(stream_t *stream, char **language);
int mp_dvdnav_lang_from_aid(stream_t *stream, int id, unsigned char *buf);
-int mp_dvdnav_sid_from_lang(stream_t *stream, const unsigned char *language);
+int mp_dvdnav_sid_from_lang(stream_t *stream, char **language);
int mp_dvdnav_lang_from_sid(stream_t *stream, int sid, unsigned char *buf);
void mp_dvdnav_handle_input(stream_t *stream, int cmd, int *button);
void mp_dvdnav_update_mouse_pos(stream_t *stream, int32_t x, int32_t y, int* button);