summaryrefslogtreecommitdiffstats
path: root/Gui
diff options
context:
space:
mode:
authorpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-06-03 15:06:32 +0000
committerpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-06-03 15:06:32 +0000
commitaf8bd4f39477073aae0d23e5efe0fad524234f50 (patch)
treef3efb1fde3975d95911a34b8887273978cb60bef /Gui
parent8d36b5de7865af8c6d355abe2854af781e36488e (diff)
downloadmpv-af8bd4f39477073aae0d23e5efe0fad524234f50.tar.bz2
mpv-af8bd4f39477073aae0d23e5efe0fad524234f50.tar.xz
add VCD support for GUI
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6281 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'Gui')
-rw-r--r--Gui/events.c3
-rw-r--r--Gui/events.h2
-rw-r--r--Gui/interface.c36
-rw-r--r--Gui/interface.h14
-rw-r--r--Gui/mplayer/gtk/menu.c27
-rw-r--r--Gui/mplayer/mplayer.c7
-rw-r--r--Gui/mplayer/mw.h50
-rw-r--r--Gui/mplayer/play.c27
8 files changed, 148 insertions, 18 deletions
diff --git a/Gui/events.c b/Gui/events.c
index 0c25637d47..8c93a1322a 100644
--- a/Gui/events.c
+++ b/Gui/events.c
@@ -43,7 +43,8 @@ evName evNames[] =
{ evSetBalance, "evSetBalance" },
{ evHelp, "evHelp" },
{ evLoadSubtitle, "evLoadSubtitle" },
- { evPlayDVD, "evPlayDVD" }
+ { evPlayDVD, "evPlayDVD" },
+ { evPlayVCD, "evPlayVCD" }
};
int evBoxs = sizeof( evNames ) / sizeof( evName );
diff --git a/Gui/events.h b/Gui/events.h
index 4c21cdbb99..a5607932c4 100644
--- a/Gui/events.h
+++ b/Gui/events.h
@@ -48,6 +48,7 @@
#define evLoadSubtitle 38
#define evPlayDVD 39
+#define evPlayVCD 40
#define evExit 1000
@@ -65,6 +66,7 @@
#define evSetDVDTitle 5009
#define evSetDVDChapter 5010
#define evSubtitleLoaded 5011
+#define evSetVCDTrack 5012
#define evFName 7000
#define evMovieTime 7001
diff --git a/Gui/interface.c b/Gui/interface.c
index f0233cb023..84f6967f38 100644
--- a/Gui/interface.c
+++ b/Gui/interface.c
@@ -1,4 +1,4 @@
-
+
#include <inttypes.h>
#include <stdlib.h>
#include <stdio.h>
@@ -16,6 +16,9 @@
#include "../libvo/video_out.h"
#include "../input/input.h"
+#include <inttypes.h>
+#include <sys/types.h>
+
#include "../libmpdemux/stream.h"
#include "../libmpdemux/demuxer.h"
@@ -64,6 +67,7 @@ typedef struct
void guiGetEvent( int type,char * arg )
{
+ stream_t * stream = (stream_t *) arg;
#ifdef USE_DVDREAD
dvd_priv_t * dvdp = (dvd_priv_t *) arg;
#endif
@@ -122,6 +126,28 @@ void guiGetEvent( int type,char * arg )
guiIntfStruct.Track=dvd_title + 1;
break;
#endif
+ case guiSetStream:
+ guiIntfStruct.StreamType=stream->type;
+ switch( stream->type )
+ {
+ case STREAMTYPE_DVD:
+ guiGetEvent( guiSetDVD,(char *)stream->priv );
+ break;
+#ifdef HAVE_VCD
+ case STREAMTYPE_VCD:
+ {
+ int i;
+ for ( i=1;i < 100;i++ )
+ if ( vcd_seek_to_track( stream->fd,i ) < 0 ) break;
+ vcd_seek_to_track( stream->fd,vcd_track );
+ guiIntfStruct.VCDTracks=--i;
+ mp_msg( MSGT_GPLAYER,MSGL_INFO,"[interface] vcd tracks: %d\n",guiIntfStruct.VCDTracks );
+ guiIntfStruct.Track=vcd_track;
+ break;
+ }
+#endif
+ }
+ break;
#ifdef HAVE_NEW_INPUT
case guiIEvent:
printf( "cmd: %d\n",(int)arg );
@@ -138,6 +164,14 @@ void guiGetEvent( int type,char * arg )
}
break;
#endif
+ case guiClearStruct:
+#ifdef USE_DVDREAD
+ if ( (unsigned int)arg & guiDVD ) memset( &guiIntfStruct.DVD,0,sizeof( guiDVDStruct ) );
+#endif
+#ifdef HAVE_VCD
+ if ( (unsigned int)arg & guiVCD ) guiIntfStruct.VCDTracks=0;
+#endif
+ break;
}
}
diff --git a/Gui/interface.h b/Gui/interface.h
index 08e57024ca..4a1eb6d61c 100644
--- a/Gui/interface.h
+++ b/Gui/interface.h
@@ -56,9 +56,15 @@ typedef struct
guiResizeStruct resize;
guiVideoStruct videodata;
guiUnknowErrorStruct error;
+
+ int DiskChanged;
+
#ifdef USE_DVDREAD
guiDVDStruct DVD;
- int DVDChanged;
+#endif
+
+#ifdef HAVE_VCD
+ int VCDTracks;
#endif
int Playing;
@@ -103,11 +109,17 @@ extern guiInterface_t guiIntfStruct;
#define guiSetAudioOnly 6
#define guiReDrawSubWindow 7
#define guiSetShVideo 8
+#define guiSetStream 9
+#define guiClearStruct 10
#define guiSetStop 0
#define guiSetPlay 1
#define guiSetPause 2
+#define guiDVD 1
+#define guiVCD 2
+#define guiALL 0xffffffff
+
extern char *get_path(char *filename);
extern void guiInit( void );
diff --git a/Gui/mplayer/gtk/menu.c b/Gui/mplayer/gtk/menu.c
index b5738934ba..641fc61746 100644
--- a/Gui/mplayer/gtk/menu.c
+++ b/Gui/mplayer/gtk/menu.c
@@ -254,6 +254,9 @@ GtkWidget * DVDChapterMenu;
GtkWidget * DVDAudioLanguageMenu;
GtkWidget * DVDSubtitleLanguageMenu;
+GtkWidget * VCDSubMenu;
+GtkWidget * VCDTitleMenu;
+
GtkWidget * create_PopUpMenu( void )
{
GtkWidget * Menu = NULL;
@@ -266,7 +269,9 @@ GtkWidget * create_PopUpMenu( void )
AddSeparator( Menu );
SubMenu=AddSubMenu( Menu,MSGTR_MENU_Open );
AddMenuItem( SubMenu,MSGTR_MENU_PlayFile" ", evLoadPlay );
- AddMenuItem( SubMenu,MSGTR_MENU_PlayVCD, evNone );
+#ifdef HAVE_VCD
+ AddMenuItem( SubMenu,MSGTR_MENU_PlayVCD, evPlayVCD );
+#endif
#ifdef USE_DVDREAD
AddMenuItem( SubMenu,MSGTR_MENU_PlayDVD, evPlayDVD );
#endif
@@ -287,6 +292,26 @@ GtkWidget * create_PopUpMenu( void )
AddMenuItem( SubMenu,MSGTR_MENU_NormalSize" ", evNormalSize );
AddMenuItem( SubMenu,MSGTR_MENU_DoubleSize, evDoubleSize );
AddMenuItem( SubMenu,MSGTR_MENU_FullScreen, evFullScreen );
+#ifdef HAVE_VCD
+ VCDSubMenu=AddSubMenu( Menu,MSGTR_MENU_VCD );
+ AddMenuItem( VCDSubMenu,MSGTR_MENU_PlayDisc,evPlayVCD );
+ AddSeparator( VCDSubMenu );
+ VCDTitleMenu=AddSubMenu( VCDSubMenu,MSGTR_MENU_Titles );
+ if ( guiIntfStruct.VCDTracks )
+ {
+ char tmp[32]; int i;
+ for ( i=0;i < guiIntfStruct.VCDTracks;i++ )
+ {
+ sprintf( tmp,MSGTR_MENU_Title,i+1 );
+ AddMenuItem( VCDTitleMenu,tmp,( (i+1) << 16 ) + evSetVCDTrack );
+ }
+ }
+ else
+ {
+ MenuItem=AddMenuItem( VCDTitleMenu,MSGTR_MENU_None,evNone );
+ gtk_widget_set_sensitive( MenuItem,FALSE );
+ }
+#endif
#ifdef USE_DVDREAD
DVDSubMenu=AddSubMenu( Menu,MSGTR_MENU_DVD );
AddMenuItem( DVDSubMenu,MSGTR_MENU_PlayDisc" ", evPlayDVD );
diff --git a/Gui/mplayer/mplayer.c b/Gui/mplayer/mplayer.c
index bddcbec4ee..4286841780 100644
--- a/Gui/mplayer/mplayer.c
+++ b/Gui/mplayer/mplayer.c
@@ -71,8 +71,9 @@ void mplInit( void * disp )
vo_setwindow( appMPlayer.subWindow.WindowID, appMPlayer.subWindow.wGC );
- i=wsHideFrame|wsMaxSize|wsHideWindow;
- if ( appMPlayer.mainDecoration ) i=wsShowFrame|wsMaxSize|wsHideWindow;
+// i=wsHideFrame|wsMaxSize|wsHideWindow;
+// if ( appMPlayer.mainDecoration ) i=wsShowFrame|wsMaxSize|wsHideWindow;
+ i=wsShowFrame|wsMaxSize|wsHideWindow;
wsCreateWindow( &appMPlayer.mainWindow,
appMPlayer.main.x,appMPlayer.main.y,appMPlayer.main.width,appMPlayer.main.height,
wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,i,"MPlayer" ); //wsMinSize|
@@ -114,6 +115,8 @@ void mplInit( void * disp )
guiIntfStruct.Playing=0;
+ if ( !appMPlayer.mainDecoration ) wsWindowDecoration( &appMPlayer.mainWindow,0 );
+
wsVisibleWindow( &appMPlayer.mainWindow,wsShowWindow );
wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow );
}
diff --git a/Gui/mplayer/mw.h b/Gui/mplayer/mw.h
index 4f0263e875..9d5da0a09a 100644
--- a/Gui/mplayer/mw.h
+++ b/Gui/mplayer/mw.h
@@ -35,6 +35,11 @@ inline void TranslateFilename( int c,char * tmp )
else strcat( tmp,"no chapter" );
break;
#endif
+#ifdef HAVE_VCD
+ case STREAMTYPE_VCD:
+ sprintf( tmp,"VCD track %d",guiIntfStruct.Track );
+ break;
+#endif
default: strcpy( tmp,"no media opened" );
}
if ( c )
@@ -102,7 +107,9 @@ calclengthmmmmss:
switch ( guiIntfStruct.StreamType )
{
case STREAMTYPE_FILE: strcat( trbuf,"f" ); break;
+#ifdef HAVE_VCD
case STREAMTYPE_VCD: strcat( trbuf,"v" ); break;
+#endif
case STREAMTYPE_STREAM: strcat( trbuf,"u" ); break;
#ifdef USE_DVDREAD
case STREAMTYPE_DVD: strcat( trbuf,"d" ); break;
@@ -200,6 +207,8 @@ extern void exit_player(char* how);
extern int audio_id;
extern int dvdsub_id;
extern char * dvd_device;
+extern int vcd_track;
+extern char * cdrom_device;
void mplEventHandling( int msg,float param )
{
@@ -212,6 +221,13 @@ void mplEventHandling( int msg,float param )
exit_player( "Exit" );
break;
+#ifdef HAVE_VCD
+ case evSetVCDTrack:
+ guiIntfStruct.Track=(int)param;
+ case evPlayVCD:
+ guiIntfStruct.StreamType=STREAMTYPE_VCD;
+ goto play;
+#endif
#ifdef USE_DVDREAD
case evPlayDVD:
guiIntfStruct.DVD.current_title=1;
@@ -222,18 +238,41 @@ play_dvd_2:
#endif
case evPlay:
case evPlaySwitchToPause:
+play:
mplMainAutoPlay=0;
if ( ( msg == evPlaySwitchToPause )&&( guiIntfStruct.Playing == 1 ) ) goto NoPause;
+ vcd_track=0;
+ dvd_title=0;
+
switch ( guiIntfStruct.StreamType )
{
- case STREAMTYPE_STREAM:
+ case STREAMTYPE_FILE:
+ guiGetEvent( guiClearStruct,guiALL );
+ break;
+#ifdef HAVE_VCD
case STREAMTYPE_VCD:
- case STREAMTYPE_FILE:
- dvd_title=0;
- break;
+ guiGetEvent( guiClearStruct,guiALL - guiVCD );
+ if ( !cdrom_device )
+ {
+ cdrom_device=DEFAULT_CDROM_DEVICE;
+ guiSetFilename( guiIntfStruct.Filename,cdrom_device );
+ }
+ if ( guiIntfStruct.Playing != 2 )
+ {
+ if ( !guiIntfStruct.Track )
+ {
+ if ( guiIntfStruct.VCDTracks == 1 ) guiIntfStruct.Track=1;
+ else guiIntfStruct.Track=2;
+ }
+ vcd_track=guiIntfStruct.Track;
+ guiIntfStruct.DiskChanged=1;
+ }
+ break;
+#endif
#ifdef USE_DVDREAD
case STREAMTYPE_DVD:
+ guiGetEvent( guiClearStruct,guiALL - guiDVD );
if ( !dvd_device )
{
dvd_device=DEFAULT_DVD_DEVICE;
@@ -244,7 +283,7 @@ play_dvd_2:
dvd_title=guiIntfStruct.DVD.current_title;
dvd_angle=guiIntfStruct.DVD.current_angle;
dvd_chapter=guiIntfStruct.DVD.current_chapter;
- guiIntfStruct.DVDChanged=1;
+ guiIntfStruct.DiskChanged=1;
}
break;
#endif
@@ -287,6 +326,7 @@ NoPause:
case evLoadPlay:
mplMainAutoPlay=1;
+// guiIntfStruct.StreamType=STREAMTYPE_FILE;
case evLoad:
mplMainRender=1;
gtkShow( evLoad,NULL );
diff --git a/Gui/mplayer/play.c b/Gui/mplayer/play.c
index 436b102b7a..29490efbbf 100644
--- a/Gui/mplayer/play.c
+++ b/Gui/mplayer/play.c
@@ -230,31 +230,38 @@ void mplSetFileName( char * fname )
void mplPrev( void )
{
int stop = 0;
+
+ if ( guiIntfStruct.Playing == 2 ) return;
switch ( guiIntfStruct.StreamType )
{
-// case STREAMTYPE_FILE:
#ifdef USE_DVDREAD
case STREAMTYPE_DVD:
- if ( guiIntfStruct.Playing == 2 ) break;
if ( --guiIntfStruct.DVD.current_chapter == 0 )
{
guiIntfStruct.DVD.current_chapter=1;
if ( --guiIntfStruct.DVD.current_title <= 0 ) { guiIntfStruct.DVD.current_title=1; stop=1; }
}
guiIntfStruct.Track=guiIntfStruct.DVD.current_title;
- if ( stop ) mplEventHandling( evStop,0 );
- if ( guiIntfStruct.Playing == 1 ) mplEventHandling( evPlay,0 );
break;
#endif
+#ifdef HAVE_VCD
+ case STREAMTYPE_VCD:
+ if ( --guiIntfStruct.Track == 0 ) { guiIntfStruct.Track=1; stop=1; }
+ break;
+#endif
+ default: return;
}
+ if ( stop ) mplEventHandling( evStop,0 );
+ if ( guiIntfStruct.Playing == 1 ) mplEventHandling( evPlay,0 );
}
void mplNext( void )
{
int stop = 0;
+
+ if ( guiIntfStruct.Playing == 2 ) return;
switch ( guiIntfStruct.StreamType )
{
-// case STREAMTYPE_FILE:
#ifdef USE_DVDREAD
case STREAMTYPE_DVD:
if ( guiIntfStruct.DVD.current_chapter++ == guiIntfStruct.DVD.chapters )
@@ -263,9 +270,15 @@ void mplNext( void )
if ( ++guiIntfStruct.DVD.current_title > guiIntfStruct.DVD.titles ) { guiIntfStruct.DVD.current_title=guiIntfStruct.DVD.titles; stop=1; }
}
guiIntfStruct.Track=guiIntfStruct.DVD.current_title;
- if ( stop ) mplEventHandling( evStop,0 );
- if ( guiIntfStruct.Playing == 1 ) mplEventHandling( evPlay,0 );
break;
#endif
+#ifdef HAVE_VCD
+ case STREAMTYPE_VCD:
+ if ( ++guiIntfStruct.Track > guiIntfStruct.VCDTracks ) { guiIntfStruct.Track=guiIntfStruct.VCDTracks; stop=1; }
+ break;
+#endif
+ default: return;
}
+ if ( stop ) mplEventHandling( evStop,0 );
+ if ( guiIntfStruct.Playing == 1 ) mplEventHandling( evPlay,0 );
}