summaryrefslogtreecommitdiffstats
path: root/Gui
diff options
context:
space:
mode:
authorgpoirier <gpoirier@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-04-16 16:58:36 +0000
committergpoirier <gpoirier@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-04-16 16:58:36 +0000
commit6a425eee5c55451f80dc5c5b33a538f948dec57d (patch)
tree1725a6c6fefc7cef16c96154f9de0e2e58a5de6a /Gui
parent1e390288edab15855ee84d864f01635d4b97d155 (diff)
downloadmpv-6a425eee5c55451f80dc5c5b33a538f948dec57d.tar.bz2
mpv-6a425eee5c55451f80dc5c5b33a538f948dec57d.tar.xz
Adds "cheap" subtitle switching for non-DVD playouts (for ex. OGG or MKV).
Patch by Stanislav Maslovski <stanislav POIS maslovski AH gmail POIS com> Original thread: Date: Apr 12, 2006 1:50 PM Subject: [MPlayer-dev-eng] [PATCH] GUI: add cheap subtitle switching for non-DVD git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@18119 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'Gui')
-rw-r--r--Gui/app.h3
-rw-r--r--Gui/mplayer/gtk/menu.c16
-rw-r--r--Gui/mplayer/mw.c24
3 files changed, 42 insertions, 1 deletions
diff --git a/Gui/app.h b/Gui/app.h
index fd5a638e48..49e9a81bb5 100644
--- a/Gui/app.h
+++ b/Gui/app.h
@@ -60,7 +60,8 @@
#define evSetAspect 44
#define evSetAudio 45
#define evSetVideo 46
-// 47 ...
+#define evSetSubtitle 47
+// 48 ...
#define evExit 1000
diff --git a/Gui/mplayer/gtk/menu.c b/Gui/mplayer/gtk/menu.c
index dad04c9355..ea3d917ff4 100644
--- a/Gui/mplayer/gtk/menu.c
+++ b/Gui/mplayer/gtk/menu.c
@@ -377,6 +377,8 @@ char * GetLanguage( int language )
return NULL;
}
+extern int global_sub_size;
+
GtkWidget * DVDSubMenu;
GtkWidget * DVDTitleMenu;
GtkWidget * DVDChapterMenu;
@@ -569,6 +571,20 @@ GtkWidget * create_PopUpMenu( void )
}
}
}
+
+ /* cheap subtitle switching for non-DVD streams */
+ if ( global_sub_size && guiIntfStruct.StreamType != STREAMTYPE_DVD )
+ {
+ int i;
+ SubMenu=AddSubMenu( window1, (const char*)empty_xpm, Menu, MSGTR_MENU_Subtitles );
+ AddMenuItem( window1, (const char*)empty_xpm, SubMenu, MSGTR_MENU_None, (-1 << 16) + evSetSubtitle );
+ for ( i=0;i < global_sub_size;i++ )
+ {
+ char tmp[32];
+ snprintf( tmp, 32, MSGTR_MENU_Track, i );
+ AddMenuItem( window1,(const char*)empty_xpm,SubMenu,tmp,( i << 16 ) + evSetSubtitle );
+ }
+ }
AddSeparator( Menu );
MenuItem=AddMenuCheckItem( window1, (const char*)sound_xpm, Menu,MSGTR_MENU_Mute,mixer.muted,evMute );
diff --git a/Gui/mplayer/mw.c b/Gui/mplayer/mw.c
index 6a31222af7..811d0998c3 100644
--- a/Gui/mplayer/mw.c
+++ b/Gui/mplayer/mw.c
@@ -32,6 +32,12 @@
#include "widgets.h"
extern mixer_t mixer; // mixer from mplayer.c
+extern int global_sub_size;
+extern int global_sub_pos;
+extern int global_sub_indices[];
+extern int sub_source(void);
+#define SUB_SOURCE_VOBSUB 1
+#define SUB_SOURCE_DEMUX 2
extern unsigned int GetTimerMS( void );
@@ -110,6 +116,24 @@ void mplEventHandling( int msg,float param )
video_id=iparam;
goto play;
+ case evSetSubtitle:
+ if ( !guiIntfStruct.demuxer || global_sub_pos == iparam ) break;
+ global_sub_pos = iparam;
+ if ( global_sub_pos >= 0 )
+ switch ( sub_source() )
+ {
+ case SUB_SOURCE_VOBSUB:
+ vobsub_id = global_sub_pos - global_sub_indices[SUB_SOURCE_VOBSUB];
+ goto play;
+ case SUB_SOURCE_DEMUX:
+ vobsub_id = -1;
+ dvdsub_id = global_sub_pos - global_sub_indices[SUB_SOURCE_DEMUX];
+ goto play;
+ }
+ vobsub_id = -1;
+ dvdsub_id = -2;
+ goto play;
+
#ifdef HAVE_VCD
case evSetVCDTrack:
guiIntfStruct.Track=iparam;