summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2011-02-18 15:32:40 +0100
committerUoti Urpala <uau@mplayer2.org>2011-04-20 04:22:42 +0300
commit59fff90d94e01ae7cf5c3ff3a274020f4d4b2785 (patch)
treea6f161866ae6918c4d2a2aebd9327716f3b53ea2 /stream
parent2a7c5a1365ad194a42e3f667f85828a152544857 (diff)
downloadmpv-59fff90d94e01ae7cf5c3ff3a274020f4d4b2785.tar.bz2
mpv-59fff90d94e01ae7cf5c3ff3a274020f4d4b2785.tar.xz
options: change -alang and -slang to use string list type
There is no reason to use manual language list splitting when an automatic split function is already available. Some types change from "unsigned char" to "char", but this shouldn't cause issues since [as]lang settings are unlikely to have characters above 127.
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);