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);