# HG changeset patch # User kmkaplan # Date 1034869481 0 # Node ID 9806d65986e408da0251d34c0a73155d7653095b # Parent f3166c864e9e90e4412c96477c9e52ded7faaf4f Mplayer can switch between subtitles of different languages during playing by press 'j', based on a patch by . diff -r f3166c864e9e -r 9806d65986e4 mplayer.c --- a/mplayer.c Thu Oct 17 15:41:20 2002 +0000 +++ b/mplayer.c Thu Oct 17 15:44:41 2002 +0000 @@ -517,6 +517,7 @@ int osd_show_av_delay = 0; int osd_show_sub_delay = 0; int osd_show_sub_visibility = 0; +int osd_show_vobsub_changed = 0; int rtc_fd=-1; @@ -2207,6 +2208,18 @@ vo_osd_changed(OSDTYPE_SUBTITLE); break; } + case MP_CMD_VOBSUB_LANG: + { + int new_id = vobsub_id + 1; + if (vobsub_id < 0) + new_id = 0; + if ((unsigned int) new_id >= vobsub_get_indexes_count(vo_vobsub)) + new_id = -1; + if(new_id != vobsub_id) + osd_show_vobsub_changed = 9; + vobsub_id = new_id; + break; + } case MP_CMD_SCREENSHOT : if(vo_config_count) video_out->control(VOCTRL_SCREENSHOT, NULL); break; @@ -2575,6 +2588,13 @@ sprintf(osd_text_tmp, "Subtitles: %sabled", sub_visibility?"en":"dis"); osd_show_sub_visibility--; } else + if (osd_show_vobsub_changed) { + const char *language = "none"; + if (vobsub_id >= 0) + language = vobsub_get_id(vo_vobsub, (unsigned int) vobsub_id); + sprintf(osd_text_tmp, "Subtitles: (%d) %s", vobsub_id, language ? language : "unknown"); + osd_show_vobsub_changed--; + } else if (osd_show_sub_delay) { sprintf(osd_text_tmp, "Sub delay: %d ms",(int)(sub_delay*1000)); osd_show_sub_delay--; diff -r f3166c864e9e -r 9806d65986e4 vobsub.c --- a/vobsub.c Thu Oct 17 15:41:20 2002 +0000 +++ b/vobsub.c Thu Oct 17 15:44:41 2002 +0000 @@ -1134,6 +1134,20 @@ free(vob); } +unsigned int +vobsub_get_indexes_count(void *vobhandle) +{ + vobsub_t *vob = (vobsub_t *) vobhandle; + return vob->spu_streams_size; +} + +char * +vobsub_get_id(void *vobhandle, unsigned int index) +{ + vobsub_t *vob = (vobsub_t *) vobhandle; + return (index < vob->spu_streams_size) ? vob->spu_streams[index].id : NULL; +} + int vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp) { vobsub_t *vob = (vobsub_t *)vobhandle; diff -r f3166c864e9e -r 9806d65986e4 vobsub.h --- a/vobsub.h Thu Oct 17 15:41:20 2002 +0000 +++ b/vobsub.h Thu Oct 17 15:44:41 2002 +0000 @@ -7,6 +7,8 @@ extern int vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp); extern int vobsub_get_next_packet(void *vobhandle, void** data, int* timestamp); extern void vobsub_close(void *this); +extern unsigned int vobsub_get_indexes_count(void * /* vobhandle */); +extern char *vobsub_get_id(void * /* vobhandle */, unsigned int /* index */); extern void *vobsub_out_open(const char *basename, const unsigned int *palette, unsigned int orig_width, unsigned int orig_height, const char *id, unsigned int index); extern void vobsub_out_output(void *me, const unsigned char *packet, int len, double pts);