summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gui/interface.c36
-rw-r--r--Gui/interface.h16
-rw-r--r--mplayer.c32
3 files changed, 61 insertions, 23 deletions
diff --git a/Gui/interface.c b/Gui/interface.c
index 5608c22c04..76939f43ad 100644
--- a/Gui/interface.c
+++ b/Gui/interface.c
@@ -13,8 +13,11 @@
#include "mplayer/mplayer.h"
#include "app.h"
#include "../libvo/x11_common.h"
+#include "../libvo/video_out.h"
#include "../input/input.h"
+
#include "../libmpdemux/stream.h"
+#include "../libmpdemux/demuxer.h"
guiInterface_t guiIntfStruct;
@@ -45,6 +48,20 @@ int guiCMDArray[] =
evSkinBrowser
};
+typedef struct
+{
+ demux_stream_t *ds;
+ unsigned int format;
+ struct codecs_st *codec;
+ int inited;
+ // output format:
+ float timer;
+ float fps;
+ float frametime;
+ int i_bps;
+ int disp_w,disp_h;
+} tmp_sh_video_t;
+
void guiGetEvent( int type,char * arg )
{
#ifdef USE_DVDREAD
@@ -70,6 +87,23 @@ void guiGetEvent( int type,char * arg )
case guiSetFileName:
if ( arg ) guiSetFilename( guiIntfStruct.Filename,arg );
break;
+ case guiSetAudioOnly:
+ guiIntfStruct.AudioOnly=(int)arg;
+ if ( (int)arg ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow );
+ else wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow );
+ break;
+ case guiReDrawSubWindow:
+ wsPostRedisplay( &appMPlayer.subWindow );
+ break;
+ case guiSetShVideo:
+ if ( arg )
+ {
+ tmp_sh_video_t * sh_video = (tmp_sh_video_t *)arg;
+ mplResizeToMovieSize( sh_video->disp_w,sh_video->disp_h );
+ guiIntfStruct.MovieWidth=sh_video->disp_w;
+ guiIntfStruct.MovieHeight=sh_video->disp_h;
+ }
+ break;
#ifdef USE_DVDREAD
case guiSetDVD:
guiIntfStruct.DVD.titles=dvdp->vmg_file->tt_srpt->nr_of_srpts;
@@ -106,7 +140,7 @@ void guiGetEvent( int type,char * arg )
void guiEventHandling( void )
{
- if ( use_gui && !guiIntfStruct.Playing ) wsHandleEvents();
+ if ( ( use_gui && !guiIntfStruct.Playing )||( guiIntfStruct.AudioOnly ) ) wsHandleEvents();
gtkEventHandling();
mplTimerHandler(); // handle GUI timer events
}
diff --git a/Gui/interface.h b/Gui/interface.h
index d7a1a4b006..28c5d67000 100644
--- a/Gui/interface.h
+++ b/Gui/interface.h
@@ -75,6 +75,7 @@ typedef struct
int Track;
int AudioType;
int StreamType;
+ int AudioOnly;
int TimeSec;
int LengthInSec;
int FrameDrop;
@@ -93,12 +94,15 @@ typedef struct
extern guiInterface_t guiIntfStruct;
-#define guiXEvent 0
-#define guiCEvent 1
-#define guiIEvent 2
-#define guiSetDVD 3
-#define guiSetFileName 4
-#define guiSetState 5
+#define guiXEvent 0
+#define guiCEvent 1
+#define guiIEvent 2
+#define guiSetDVD 3
+#define guiSetFileName 4
+#define guiSetState 5
+#define guiSetAudioOnly 6
+#define guiReDrawSubWindow 7
+#define guiSetShVideo 8
#define guiSetStop 0
#define guiSetPlay 1
diff --git a/mplayer.c b/mplayer.c
index 05b1a009cb..5ec8fac784 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -769,6 +769,7 @@ if(!use_stdin && !slave_mode){
#ifdef HAVE_NEW_GUI
if ( use_gui ) {
+ guiGetEvent( guiReDrawSubWindow,0 );
while ( guiIntfStruct.Playing != 1 )
{
#ifdef HAVE_NEW_INPUT
@@ -1280,22 +1281,6 @@ if(auto_quality>0){
// ========== Init display (sh_video->disp_w*sh_video->disp_h/out_fmt) ============
-#ifdef HAVE_NEW_GUI
- if ( use_gui )
- {
- mplResizeToMovieSize( sh_video->disp_w,sh_video->disp_h );
- guiIntfStruct.MovieWidth=sh_video->disp_w;
- guiIntfStruct.MovieHeight=sh_video->disp_h;
- guiIntfStruct.StreamType=stream->type;
- guiGetEvent( guiSetFileName,filename );
- if ( sh_audio ) guiIntfStruct.AudioType=sh_audio->channels;
- else guiIntfStruct.AudioType=0;
-#ifdef USE_DVDREAD
- if ( stream->type == STREAMTYPE_DVD ) guiGetEvent( guiSetDVD,(char *)stream->priv );
-#endif
- }
-#endif
-
current_module="init_vo_vaa";
if(video_out->control(VOCTRL_QUERY_VAA, &vo_vaa)==VO_NOTIMPL)
@@ -1327,6 +1312,20 @@ if(!sh_video) osd_level = 0;
fflush(stdout);
+#ifdef HAVE_NEW_GUI
+ if ( use_gui )
+ {
+ guiGetEvent( guiSetShVideo,(char *)sh_video );
+ guiGetEvent( guiSetFileName,filename );
+ guiIntfStruct.StreamType=stream->type;
+ if ( sh_audio ) guiIntfStruct.AudioType=sh_audio->channels; else guiIntfStruct.AudioType=0;
+ if ( !sh_video && sh_audio ) guiGetEvent( guiSetAudioOnly,1 ); else guiGetEvent( guiSetAudioOnly,0 );
+#ifdef USE_DVDREAD
+ if ( stream->type == STREAMTYPE_DVD ) guiGetEvent( guiSetDVD,(char *)stream->priv );
+#endif
+ }
+#endif
+
{
//int frame_corr_num=0; //
//float v_frame=0; // Video
@@ -2734,6 +2733,7 @@ if(rel_seek_secs || abs_seek_pos){
#ifdef HAVE_NEW_GUI
if(use_gui){
+ guiEventHandling();
if(demuxer->file_format==DEMUXER_TYPE_AVI && sh_video->video.dwLength>2){
// get pos from frame number / total frames
guiIntfStruct.Position=(float)d_video->pack_no*100.0f/sh_video->video.dwLength;