diff options
Diffstat (limited to 'stream')
-rw-r--r-- | stream/stream_dvd.c | 23 | ||||
-rw-r--r-- | stream/stream_dvd.h | 4 | ||||
-rw-r--r-- | stream/stream_dvdnav.c | 16 | ||||
-rw-r--r-- | stream/stream_dvdnav.h | 4 |
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); |