diff options
author | pontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-06-03 15:06:32 +0000 |
---|---|---|
committer | pontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-06-03 15:06:32 +0000 |
commit | af8bd4f39477073aae0d23e5efe0fad524234f50 (patch) | |
tree | f3efb1fde3975d95911a34b8887273978cb60bef /Gui | |
parent | 8d36b5de7865af8c6d355abe2854af781e36488e (diff) | |
download | mpv-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.c | 3 | ||||
-rw-r--r-- | Gui/events.h | 2 | ||||
-rw-r--r-- | Gui/interface.c | 36 | ||||
-rw-r--r-- | Gui/interface.h | 14 | ||||
-rw-r--r-- | Gui/mplayer/gtk/menu.c | 27 | ||||
-rw-r--r-- | Gui/mplayer/mplayer.c | 7 | ||||
-rw-r--r-- | Gui/mplayer/mw.h | 50 | ||||
-rw-r--r-- | Gui/mplayer/play.c | 27 |
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 ); } |