mirror of
https://github.com/mpv-player/mpv
synced 2024-10-22 08:51:57 +02:00
better dvd support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3619 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
4854fe36ae
commit
44d4752274
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
void ActivateMenuItem( int Item )
|
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->popupmenu=Item & 0x0000ffff;
|
||||||
gtkShMem->popupmenuparam=Item >> 16;
|
gtkShMem->popupmenuparam=Item >> 16;
|
||||||
gtkShMem->visiblepopupmenu=0;
|
gtkShMem->visiblepopupmenu=0;
|
||||||
|
@ -197,6 +197,8 @@ drawrenderedtext:
|
|||||||
#define IZE(x) printf("@@@ " x " @@@\n");
|
#define IZE(x) printf("@@@ " x " @@@\n");
|
||||||
|
|
||||||
extern void exit_player(char* how);
|
extern void exit_player(char* how);
|
||||||
|
extern int audio_id;
|
||||||
|
extern int dvdsub_id;
|
||||||
|
|
||||||
void mplMsgHandle( int msg,float param )
|
void mplMsgHandle( int msg,float param )
|
||||||
{
|
{
|
||||||
@ -212,16 +214,19 @@ void mplMsgHandle( int msg,float param )
|
|||||||
|
|
||||||
#ifdef USE_DVDREAD
|
#ifdef USE_DVDREAD
|
||||||
case evPlayDVD:
|
case evPlayDVD:
|
||||||
|
dvd_title=1;
|
||||||
|
dvd_chapter=1;
|
||||||
|
dvd_angle=1;
|
||||||
|
play_dvd_2:
|
||||||
mplShMem->StreamType=STREAMTYPE_DVD;
|
mplShMem->StreamType=STREAMTYPE_DVD;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case evPlay:
|
case evPlay:
|
||||||
case evPlaySwitchToPause:
|
case evPlaySwitchToPause:
|
||||||
btnModify( evPlaySwitchToPause,btnDisabled );
|
btnModify( evPlaySwitchToPause,btnDisabled );
|
||||||
btnModify( evPauseSwitchToPlay,btnReleased );
|
btnModify( evPauseSwitchToPlay,btnReleased );
|
||||||
if ( ( msg == evPlaySwitchToPause )&( mplShMem->Playing == 1 ) ) goto NoPause;
|
if ( ( msg == evPlaySwitchToPause )&( mplShMem->Playing == 1 ) ) goto NoPause;
|
||||||
mplMainRender=1;
|
mplMainRender=1;
|
||||||
|
|
||||||
switch ( mplShMem->StreamType )
|
switch ( mplShMem->StreamType )
|
||||||
{
|
{
|
||||||
case STREAMTYPE_STREAM:
|
case STREAMTYPE_STREAM:
|
||||||
@ -231,9 +236,6 @@ void mplMsgHandle( int msg,float param )
|
|||||||
break;
|
break;
|
||||||
#ifdef USE_DVDREAD
|
#ifdef USE_DVDREAD
|
||||||
case STREAMTYPE_DVD:
|
case STREAMTYPE_DVD:
|
||||||
dvd_title=1;
|
|
||||||
dvd_chapter=1;
|
|
||||||
dvd_angle=1;
|
|
||||||
strcpy( mplShMem->Filename,"/dev/dvd" );
|
strcpy( mplShMem->Filename,"/dev/dvd" );
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
@ -241,30 +243,48 @@ void mplMsgHandle( int msg,float param )
|
|||||||
mplPlay();
|
mplPlay();
|
||||||
break;
|
break;
|
||||||
case evSetDVDSubtitle:
|
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;
|
break;
|
||||||
case evSetDVDAudio:
|
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;
|
break;
|
||||||
case evSetDVDChapter:
|
case evSetDVDChapter:
|
||||||
mplStop();
|
#ifdef USE_DVDREAD
|
||||||
dvd_title=mplShMem->DVD.current_title - 1;
|
dvd_title=mplShMem->DVD.current_title;
|
||||||
dvd_angle=mplShMem->DVD.current_angle - 1;
|
dvd_angle=mplShMem->DVD.current_angle;
|
||||||
dvd_chapter=(int)param;
|
dvd_chapter=(int)param;
|
||||||
strcpy( mplShMem->Filename,"/dev/dvd" );
|
mplShMem->DVDChanged=1;
|
||||||
mplPlay();
|
goto play_dvd_2;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case evSetDVDTitle:
|
case evSetDVDTitle:
|
||||||
mplStop();
|
#ifdef USE_DVDREAD
|
||||||
dvd_title=(int)param;
|
dvd_title=(int)param;
|
||||||
dvd_chapter=1;
|
dvd_chapter=1;
|
||||||
dvd_angle=1;
|
dvd_angle=1;
|
||||||
strcpy( mplShMem->Filename,"/dev/dvd" );
|
mplShMem->DVDChanged=1;
|
||||||
mplPlay();
|
goto play_dvd_2;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case evPause:
|
case evPause:
|
||||||
case evPauseSwitchToPlay:
|
case evPauseSwitchToPlay:
|
||||||
btnModify( evPlaySwitchToPause,btnReleased );
|
// btnModify( evPlaySwitchToPause,btnReleased );
|
||||||
btnModify( evPauseSwitchToPlay,btnDisabled );
|
// btnModify( evPauseSwitchToPlay,btnDisabled );
|
||||||
NoPause:
|
NoPause:
|
||||||
mplMainRender=1;
|
mplMainRender=1;
|
||||||
mplPause();
|
mplPause();
|
||||||
|
@ -58,6 +58,7 @@ typedef struct
|
|||||||
mplUnknowErrorStruct error;
|
mplUnknowErrorStruct error;
|
||||||
#ifdef USE_DVDREAD
|
#ifdef USE_DVDREAD
|
||||||
mplDVDStruct DVD;
|
mplDVDStruct DVD;
|
||||||
|
int DVDChanged;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int Playing;
|
int Playing;
|
||||||
|
32
mplayer.c
32
mplayer.c
@ -188,7 +188,7 @@ int allow_dshow=0;
|
|||||||
// streaming:
|
// streaming:
|
||||||
int audio_id=-1;
|
int audio_id=-1;
|
||||||
int video_id=-1;
|
int video_id=-1;
|
||||||
static int dvdsub_id=-1;
|
int dvdsub_id=-1;
|
||||||
static int vcd_track=0;
|
static int vcd_track=0;
|
||||||
|
|
||||||
// cache2:
|
// cache2:
|
||||||
@ -628,7 +628,7 @@ if(!parse_codec_cfg(get_path("codecs.conf"))){
|
|||||||
printf("Using %s timing\n",softsleep?"software":"usleep()");
|
printf("Using %s timing\n",softsleep?"software":"usleep()");
|
||||||
|
|
||||||
#ifdef USE_TERMCAP
|
#ifdef USE_TERMCAP
|
||||||
load_termcap(NULL); // load key-codes
|
if ( !use_gui ) load_termcap(NULL); // load key-codes
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ========== Init keyboard FIFO (connection to libvo) ============
|
// ========== Init keyboard FIFO (connection to libvo) ============
|
||||||
@ -657,6 +657,17 @@ play_next_file:
|
|||||||
|
|
||||||
#ifdef HAVE_NEW_GUI
|
#ifdef HAVE_NEW_GUI
|
||||||
if ( use_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 );
|
if(filename && !mplShMem->FilenameChanged) strcpy( mplShMem->Filename,filename );
|
||||||
// mplShMem->Playing= (gui_no_filename) ? 0 : 1;
|
// mplShMem->Playing= (gui_no_filename) ? 0 : 1;
|
||||||
while(mplShMem->Playing!=1){
|
while(mplShMem->Playing!=1){
|
||||||
@ -664,6 +675,8 @@ play_next_file:
|
|||||||
EventHandling();
|
EventHandling();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
play_dvd:
|
||||||
|
|
||||||
#ifdef USE_SUB
|
#ifdef USE_SUB
|
||||||
if ( mplShMem->SubtitleChanged || !mplShMem->FilenameChanged )
|
if ( mplShMem->SubtitleChanged || !mplShMem->FilenameChanged )
|
||||||
{
|
{
|
||||||
@ -2095,6 +2108,7 @@ if(rel_seek_secs || abs_seek_pos){
|
|||||||
}
|
}
|
||||||
mplShMem->Volume=(float)mixer_getbothvolume();
|
mplShMem->Volume=(float)mixer_getbothvolume();
|
||||||
#ifdef USE_DVDREAD
|
#ifdef USE_DVDREAD
|
||||||
|
if ( mplShMem->DVDChanged ) goto goto_next_file;
|
||||||
if ( stream->type == STREAMTYPE_DVD )
|
if ( stream->type == STREAMTYPE_DVD )
|
||||||
{
|
{
|
||||||
dvd_priv_t * dvdp = stream->priv;
|
dvd_priv_t * dvdp = stream->priv;
|
||||||
@ -2164,6 +2178,7 @@ mp_msg(MSGT_GLOBAL,MSGL_V,"EOF code: %d \n",eof);
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
goto_next_file: // don't jump here after ao/vo/getch initialization!
|
||||||
|
|
||||||
if(curr_filename+1<num_filenames || use_gui){
|
if(curr_filename+1<num_filenames || use_gui){
|
||||||
// partial uninit:
|
// partial uninit:
|
||||||
@ -2172,16 +2187,21 @@ if(curr_filename+1<num_filenames || use_gui){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
goto_next_file: // don't jump here after ao/vo/getch initialization!
|
|
||||||
|
|
||||||
#ifdef HAVE_NEW_GUI
|
#ifdef HAVE_NEW_GUI
|
||||||
if(use_gui)
|
if(use_gui)
|
||||||
{
|
{
|
||||||
mplStop();
|
#ifdef USE_DVDREAD
|
||||||
|
if ( !mplShMem->DVDChanged )
|
||||||
|
#endif
|
||||||
|
mplStop();
|
||||||
}
|
}
|
||||||
#endif
|
#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";
|
current_module="uninit_vcodec";
|
||||||
if(sh_video) uninit_video(sh_video);
|
if(sh_video) uninit_video(sh_video);
|
||||||
|
Loading…
Reference in New Issue
Block a user