Mercurial > mplayer.hg
changeset 3618:772729dd7b40
better dvd support
author | pontscho |
---|---|
date | Wed, 19 Dec 2001 16:55:32 +0000 |
parents | d435bda20a3e |
children | fe69adbfac7a |
files | Gui/mplayer/gtk/menu.c Gui/mplayer/mw.h Gui/mplayer/play.h mplayer.c |
diffstat | 4 files changed, 63 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/Gui/mplayer/gtk/menu.c Wed Dec 19 16:54:04 2001 +0000 +++ b/Gui/mplayer/gtk/menu.c Wed Dec 19 16:55:32 2001 +0000 @@ -13,7 +13,7 @@ void ActivateMenuItem( int Item ) { -// fprintf( stderr,"[menu] item: %d\n",Item ); +// fprintf( stderr,"[menu] item: %d.%d\n",Item&0xffff,Item>>16 ); gtkShMem->popupmenu=Item & 0x0000ffff; gtkShMem->popupmenuparam=Item >> 16; gtkShMem->visiblepopupmenu=0;
--- a/Gui/mplayer/mw.h Wed Dec 19 16:54:04 2001 +0000 +++ b/Gui/mplayer/mw.h Wed Dec 19 16:55:32 2001 +0000 @@ -197,6 +197,8 @@ #define IZE(x) printf("@@@ " x " @@@\n"); extern void exit_player(char* how); +extern int audio_id; +extern int dvdsub_id; void mplMsgHandle( int msg,float param ) { @@ -212,16 +214,19 @@ #ifdef USE_DVDREAD case evPlayDVD: + dvd_title=1; + dvd_chapter=1; + dvd_angle=1; +play_dvd_2: mplShMem->StreamType=STREAMTYPE_DVD; #endif - case evPlay: case evPlaySwitchToPause: btnModify( evPlaySwitchToPause,btnDisabled ); btnModify( evPauseSwitchToPlay,btnReleased ); if ( ( msg == evPlaySwitchToPause )&( mplShMem->Playing == 1 ) ) goto NoPause; mplMainRender=1; - + switch ( mplShMem->StreamType ) { case STREAMTYPE_STREAM: @@ -231,9 +236,6 @@ break; #ifdef USE_DVDREAD case STREAMTYPE_DVD: - dvd_title=1; - dvd_chapter=1; - dvd_angle=1; strcpy( mplShMem->Filename,"/dev/dvd" ); break; #endif @@ -241,30 +243,48 @@ mplPlay(); break; case evSetDVDSubtitle: +#ifdef USE_DVDREAD + dvdsub_id=(int)param; + dvd_title=mplShMem->DVD.current_title; + dvd_angle=mplShMem->DVD.current_angle; + dvd_chapter=mplShMem->DVD.current_chapter; + mplShMem->DVDChanged=1; + goto play_dvd_2; +#endif break; case evSetDVDAudio: +#ifdef USE_DVDREAD + audio_id=(int)param; + dvd_title=mplShMem->DVD.current_title; + dvd_angle=mplShMem->DVD.current_angle; + dvd_chapter=mplShMem->DVD.current_chapter; + mplShMem->DVDChanged=1; + goto play_dvd_2; +#endif break; case evSetDVDChapter: - mplStop(); - dvd_title=mplShMem->DVD.current_title - 1; - dvd_angle=mplShMem->DVD.current_angle - 1; +#ifdef USE_DVDREAD + dvd_title=mplShMem->DVD.current_title; + dvd_angle=mplShMem->DVD.current_angle; dvd_chapter=(int)param; - strcpy( mplShMem->Filename,"/dev/dvd" ); - mplPlay(); + mplShMem->DVDChanged=1; + goto play_dvd_2; +#endif break; case evSetDVDTitle: - mplStop(); +#ifdef USE_DVDREAD dvd_title=(int)param; dvd_chapter=1; dvd_angle=1; - strcpy( mplShMem->Filename,"/dev/dvd" ); - mplPlay(); + mplShMem->DVDChanged=1; + goto play_dvd_2; +#endif break; case evPause: case evPauseSwitchToPlay: - btnModify( evPlaySwitchToPause,btnReleased ); - btnModify( evPauseSwitchToPlay,btnDisabled ); +// btnModify( evPlaySwitchToPause,btnReleased ); +// btnModify( evPauseSwitchToPlay,btnDisabled ); NoPause: mplMainRender=1; mplPause();
--- a/Gui/mplayer/play.h Wed Dec 19 16:54:04 2001 +0000 +++ b/Gui/mplayer/play.h Wed Dec 19 16:55:32 2001 +0000 @@ -58,6 +58,7 @@ mplUnknowErrorStruct error; #ifdef USE_DVDREAD mplDVDStruct DVD; + int DVDChanged; #endif int Playing;
--- a/mplayer.c Wed Dec 19 16:54:04 2001 +0000 +++ b/mplayer.c Wed Dec 19 16:55:32 2001 +0000 @@ -188,7 +188,7 @@ // streaming: int audio_id=-1; int video_id=-1; -static int dvdsub_id=-1; +int dvdsub_id=-1; static int vcd_track=0; // cache2: @@ -628,7 +628,7 @@ printf("Using %s timing\n",softsleep?"software":"usleep()"); #ifdef USE_TERMCAP - load_termcap(NULL); // load key-codes + if ( !use_gui ) load_termcap(NULL); // load key-codes #endif // ========== Init keyboard FIFO (connection to libvo) ============ @@ -657,6 +657,17 @@ #ifdef HAVE_NEW_GUI if ( use_gui ) { + +#ifdef USE_DVDREAD + if ( mplShMem->DVDChanged ) + { + mplShMem->DVDChanged=0; + mplShMem->Playing=1; + filename="/dev/dvd"; + goto play_dvd; + } +#endif + if(filename && !mplShMem->FilenameChanged) strcpy( mplShMem->Filename,filename ); // mplShMem->Playing= (gui_no_filename) ? 0 : 1; while(mplShMem->Playing!=1){ @@ -664,6 +675,8 @@ EventHandling(); } +play_dvd: + #ifdef USE_SUB if ( mplShMem->SubtitleChanged || !mplShMem->FilenameChanged ) { @@ -2095,6 +2108,7 @@ } mplShMem->Volume=(float)mixer_getbothvolume(); #ifdef USE_DVDREAD + if ( mplShMem->DVDChanged ) goto goto_next_file; if ( stream->type == STREAMTYPE_DVD ) { dvd_priv_t * dvdp = stream->priv; @@ -2164,6 +2178,7 @@ } +goto_next_file: // don't jump here after ao/vo/getch initialization! if(curr_filename+1<num_filenames || use_gui){ // partial uninit: @@ -2172,16 +2187,21 @@ } -goto_next_file: // don't jump here after ao/vo/getch initialization! - #ifdef HAVE_NEW_GUI if(use_gui) { - mplStop(); +#ifdef USE_DVDREAD + if ( !mplShMem->DVDChanged ) +#endif + mplStop(); } #endif -if(use_gui || ++curr_filename<num_filenames){ +if(use_gui || ++curr_filename<num_filenames +#if defined( HAVE_NEW_GUI ) && defined( USE_DVDREAD ) + || mplShMem->DVDChanged +#endif +){ current_module="uninit_vcodec"; if(sh_video) uninit_video(sh_video);