mirror of
https://github.com/mpv-player/mpv
synced 2024-12-18 04:45:33 +00:00
add gui support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@724 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
1350b62e4a
commit
8ffaf8a85e
5
Makefile
5
Makefile
@ -62,7 +62,10 @@ opendivx/libdecore.a:
|
||||
encore/libencore.a:
|
||||
$(MAKE) -C encore
|
||||
|
||||
$(PRG): .depend mplayer.o $(OBJS) loader/libloader.a $(DS_DEP) libmpeg2/libmpeg2.a opendivx/libdecore.a $(COMMONLIBS) encore/libencore.a
|
||||
mplayerwithoutlink: .depend mplayer.o $(OBJS) loader/libloader.a $(DS_DEP) libmpeg2/libmpeg2.a opendivx/libdecore.a $(COMMONLIBS) encore/libencore.a
|
||||
@for a in mp3lib libac3 libmpeg2 libvo opendivx encore loader/DirectShow ; do $(MAKE) -C $$a all ; done
|
||||
|
||||
$(PRG): mplayerwithoutlink
|
||||
$(CC) $(CFLAGS) -o $(PRG) mplayer.o $(OBJS) $(XMM_LIBS) $(LIRC_LIBS) $(A_LIBS) -lm $(TERMCAP_LIB) -Lloader -lloader $(DS_LIB) -ldl -Llibmpeg2 -lmpeg2 -Lopendivx -ldecore $(VO_LIBS) $(CSS_LIB) -Lencore -lencore -lpthread
|
||||
|
||||
# $(PRG_HQ): .depend mplayerHQ.o $(OBJS) loader/libloader.a libmpeg2/libmpeg2.a opendivx/libdecore.a $(COMMONLIBS) encore/libencore.a
|
||||
|
@ -116,9 +116,9 @@ struct config conf[]={
|
||||
|
||||
{"verbose", &verbose, CONF_TYPE_INT, CONF_RANGE, 0, 100},
|
||||
{"v", cfg_inc_verbose, CONF_TYPE_FUNC, 0, 0, 0},
|
||||
{"-help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
|
||||
{"help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
|
||||
{"h", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
|
||||
// {"-help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
|
||||
// {"help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
|
||||
// {"h", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
|
||||
{NULL, NULL, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
17
configure
vendored
17
configure
vendored
@ -229,6 +229,8 @@ _x11lib=
|
||||
|
||||
_select='#define HAVE_AUDIO_SELECT'
|
||||
|
||||
_gui=no;
|
||||
|
||||
for i in `echo $pparam`; do
|
||||
|
||||
case "$i" in
|
||||
@ -589,6 +591,9 @@ do
|
||||
--enable-select)
|
||||
_select='#define HAVE_AUDIO_SELECT'
|
||||
;;
|
||||
--enable-gui)
|
||||
_gui=yes
|
||||
;;
|
||||
--disable-css)
|
||||
_css=no
|
||||
;;
|
||||
@ -656,6 +661,9 @@ do
|
||||
--disable-fastmemcpy)
|
||||
_fastmemcpy=no
|
||||
;;
|
||||
--disable-gui)
|
||||
_gui=no
|
||||
;;
|
||||
--with-win32libdir=*)
|
||||
_win32libdir=`echo $ac_option | cut -d '=' -f 2`
|
||||
_win32libdirnotify=no
|
||||
@ -983,6 +991,12 @@ else
|
||||
_mpg123='#undef DEFAULT_MPG123'
|
||||
fi
|
||||
|
||||
if [ $_gui = yes ]; then
|
||||
_gui='#define HAVE_GUI'
|
||||
else
|
||||
_gui='#undef HAVE_GUI'
|
||||
fi
|
||||
|
||||
cat > $CCONF << EOF
|
||||
|
||||
/* -------- Generated by ./configure ----------- */
|
||||
@ -1037,6 +1051,9 @@ $_dshow
|
||||
/* Use 3dnow/mmxext/sse/mmx optimized fast memcpy() [maybe buggy... signal 4]*/
|
||||
$_fastmemcpy
|
||||
|
||||
/* gui support, please do not edit this option */
|
||||
$_gui
|
||||
|
||||
/* Define if your processor stores words with the most significant
|
||||
byte first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
/* #define WORDS_BIGENDIAN */
|
||||
|
115
libvo/vo_xmga.c
115
libvo/vo_xmga.c
@ -87,6 +87,10 @@ static Window mRoot;
|
||||
static uint32_t drwX,drwY,drwWidth,drwHeight,drwBorderWidth,drwDepth;
|
||||
static uint32_t drwcX,drwcY,dwidth,dheight,mFullscreen;
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
static uint32_t mdwidth,mdheight;
|
||||
#endif
|
||||
|
||||
static XSetWindowAttributes xWAttribs;
|
||||
|
||||
#include "mga_common.c"
|
||||
@ -106,6 +110,20 @@ static void set_window(){
|
||||
XTranslateCoordinates( mDisplay,mWindow,mRoot,0,0,&drwcX,&drwcY,&mRoot );
|
||||
//fprintf( stderr,"[xmga] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
if ( vo_window != None )
|
||||
{
|
||||
mFullscreen=0;
|
||||
dwidth=mdwidth; dheight=mdheight;
|
||||
if ( ( drwWidth == vo_screenwidth )&&( drwHeight == vo_screenheight ) )
|
||||
{
|
||||
mFullscreen=1;
|
||||
dwidth=vo_screenwidth;
|
||||
dheight=vo_screenwidth * mdheight / mdwidth;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( mFullscreen )
|
||||
{
|
||||
drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2;
|
||||
@ -224,19 +242,11 @@ static uint32_t init( uint32_t width, uint32_t height, uint32_t d_width, uint32_
|
||||
wndX=0; wndY=0;
|
||||
wndWidth=d_width; wndHeight=d_height;
|
||||
dwidth=d_width; dheight=d_height;
|
||||
#ifdef HAVE_GUI
|
||||
mdwidth=d_width; mdheight=d_height;
|
||||
#endif
|
||||
mFullscreen=fullscreen;
|
||||
|
||||
if ( fullscreen )
|
||||
{
|
||||
wndWidth=vo_screenwidth;
|
||||
wndHeight=vo_screenheight;
|
||||
}
|
||||
|
||||
XGetWindowAttributes( mDisplay,DefaultRootWindow( mDisplay ),&attribs );
|
||||
mDepth=attribs.depth;
|
||||
if ( mDepth != 15 && mDepth != 16 && mDepth != 24 && mDepth != 32 ) mDepth=24;
|
||||
XMatchVisualInfo( mDisplay,mScreen,mDepth,TrueColor,&vinfo );
|
||||
xWAttribs.colormap=XCreateColormap( mDisplay,RootWindow( mDisplay,mScreen ),vinfo.visual,AllocNone );
|
||||
switch ( vo_depthonscreen )
|
||||
{
|
||||
case 32:
|
||||
@ -245,34 +255,62 @@ static uint32_t init( uint32_t width, uint32_t height, uint32_t d_width, uint32_
|
||||
case 15: fgColor=0x7c1fL; break;
|
||||
default: printf( "Sorry, this (%d) color depth not supported.\n",vo_depthonscreen ); return -1;
|
||||
}
|
||||
xWAttribs.background_pixel=0;
|
||||
xWAttribs.border_pixel=0;
|
||||
xWAttribs.event_mask=StructureNotifyMask | ExposureMask | KeyPressMask;
|
||||
xswamask=CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
|
||||
|
||||
mWindow=XCreateWindow( mDisplay,RootWindow( mDisplay,mScreen ),
|
||||
wndX,wndY,
|
||||
wndWidth,wndHeight,
|
||||
xWAttribs.border_pixel,
|
||||
mDepth,
|
||||
InputOutput,
|
||||
vinfo.visual,xswamask,&xWAttribs );
|
||||
vo_hidecursor(mDisplay,mWindow);
|
||||
#ifdef HAVE_GUI
|
||||
if ( vo_window == None )
|
||||
{
|
||||
#endif
|
||||
if ( fullscreen )
|
||||
{
|
||||
wndWidth=vo_screenwidth;
|
||||
wndHeight=vo_screenheight;
|
||||
}
|
||||
|
||||
if ( fullscreen ) vo_x11_decoration( mDisplay,mWindow,0 );
|
||||
XGetWindowAttributes( mDisplay,DefaultRootWindow( mDisplay ),&attribs );
|
||||
mDepth=attribs.depth;
|
||||
if ( mDepth != 15 && mDepth != 16 && mDepth != 24 && mDepth != 32 ) mDepth=24;
|
||||
XMatchVisualInfo( mDisplay,mScreen,mDepth,TrueColor,&vinfo );
|
||||
xWAttribs.colormap=XCreateColormap( mDisplay,RootWindow( mDisplay,mScreen ),vinfo.visual,AllocNone );
|
||||
xWAttribs.background_pixel=0;
|
||||
xWAttribs.border_pixel=0;
|
||||
xWAttribs.event_mask=StructureNotifyMask | ExposureMask | KeyPressMask;
|
||||
xswamask=CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
|
||||
|
||||
XGetNormalHints( mDisplay,mWindow,&hint );
|
||||
hint.x=wndX; hint.y=wndY;
|
||||
hint.width=wndWidth; hint.height=wndHeight;
|
||||
hint.base_width=wndWidth; hint.base_height=wndHeight;
|
||||
hint.flags=USPosition | USSize;
|
||||
XSetNormalHints( mDisplay,mWindow,&hint );
|
||||
XStoreName( mDisplay,mWindow,mTitle );
|
||||
mWindow=XCreateWindow( mDisplay,RootWindow( mDisplay,mScreen ),
|
||||
wndX,wndY,
|
||||
wndWidth,wndHeight,
|
||||
xWAttribs.border_pixel,
|
||||
mDepth,
|
||||
InputOutput,
|
||||
vinfo.visual,xswamask,&xWAttribs );
|
||||
vo_hidecursor(mDisplay,mWindow);
|
||||
|
||||
if ( fullscreen ) vo_x11_decoration( mDisplay,mWindow,0 );
|
||||
|
||||
XGetNormalHints( mDisplay,mWindow,&hint );
|
||||
hint.x=wndX; hint.y=wndY;
|
||||
hint.width=wndWidth; hint.height=wndHeight;
|
||||
hint.base_width=wndWidth; hint.base_height=wndHeight;
|
||||
hint.flags=USPosition | USSize;
|
||||
XSetNormalHints( mDisplay,mWindow,&hint );
|
||||
XStoreName( mDisplay,mWindow,mTitle );
|
||||
XMapWindow( mDisplay,mWindow );
|
||||
#ifdef HAVE_GUI
|
||||
}
|
||||
else
|
||||
{
|
||||
mWindow=vo_window;
|
||||
fprintf( stderr,"[xmga] width: %d height: %d d_width: %d d_height: %d\n",width,height,d_width,d_height );
|
||||
if ( vo_screenwidth != d_width )
|
||||
{
|
||||
XMoveWindow( mDisplay,mWindow,( vo_screenwidth - d_width ) / 2,( vo_screenheight - d_height ) / 2 );
|
||||
XResizeWindow( mDisplay,mWindow,d_width,d_height );
|
||||
}
|
||||
else mFullscreen=1;
|
||||
}
|
||||
#endif
|
||||
mGC=XCreateGC( mDisplay,mWindow,GCForeground,&wGCV );
|
||||
|
||||
XMapWindow( mDisplay,mWindow );
|
||||
|
||||
set_window();
|
||||
|
||||
mga_vid_config.src_width=width;
|
||||
@ -285,8 +323,15 @@ static uint32_t init( uint32_t width, uint32_t height, uint32_t d_width, uint32_
|
||||
|
||||
if(mga_init()) return -1;
|
||||
|
||||
XFlush( mDisplay );
|
||||
XSync( mDisplay,False );
|
||||
#ifdef HAVE_GUI
|
||||
if ( vo_window == None )
|
||||
{
|
||||
#endif
|
||||
XFlush( mDisplay );
|
||||
XSync( mDisplay,False );
|
||||
#ifdef HAVE_GUI
|
||||
}
|
||||
#endif
|
||||
|
||||
saver_off(mDisplay);
|
||||
|
||||
|
@ -85,6 +85,10 @@ static Window mRoot;
|
||||
static uint32_t drwX,drwY,drwWidth,drwHeight,drwBorderWidth,drwDepth;
|
||||
static uint32_t drwcX,drwcY,dwidth,dheight,mFullscreen;
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
static uint32_t mdwidth,mdheight;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* connect to server, create and map window,
|
||||
* allocate colors and (shared) memory
|
||||
@ -121,36 +125,54 @@ static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t
|
||||
|
||||
screen = DefaultScreen(mydisplay);
|
||||
|
||||
hint.x = 0;
|
||||
hint.y = 0;
|
||||
hint.width = d_width;
|
||||
hint.height = d_height;
|
||||
if ( fullscreen )
|
||||
#ifdef HAVE_GUI
|
||||
if ( vo_window == None )
|
||||
{
|
||||
hint.width=vo_screenwidth;
|
||||
hint.height=vo_screenheight;
|
||||
#endif
|
||||
hint.x = 0;
|
||||
hint.y = 0;
|
||||
hint.width = d_width;
|
||||
hint.height = d_height;
|
||||
if ( fullscreen )
|
||||
{
|
||||
hint.width=vo_screenwidth;
|
||||
hint.height=vo_screenheight;
|
||||
}
|
||||
hint.flags = PPosition | PSize;
|
||||
XGetWindowAttributes(mydisplay, DefaultRootWindow(mydisplay), &attribs);
|
||||
depth=attribs.depth;
|
||||
if (depth != 15 && depth != 16 && depth != 24 && depth != 32) depth = 24;
|
||||
XMatchVisualInfo(mydisplay, screen, depth, TrueColor, &vinfo);
|
||||
|
||||
xswa.background_pixel = 0;
|
||||
xswa.border_pixel = 0;
|
||||
xswamask = CWBackPixel | CWBorderPixel;
|
||||
|
||||
mywindow = XCreateWindow(mydisplay, RootWindow(mydisplay,screen),
|
||||
hint.x, hint.y, hint.width, hint.height,
|
||||
0, depth,CopyFromParent,vinfo.visual,xswamask,&xswa);
|
||||
vo_hidecursor(mydisplay,mywindow);
|
||||
|
||||
XSelectInput(mydisplay, mywindow, StructureNotifyMask | KeyPressMask );
|
||||
XSetStandardProperties(mydisplay, mywindow, hello, hello, None, NULL, 0, &hint);
|
||||
if ( fullscreen ) vo_x11_decoration( mydisplay,mywindow,0 );
|
||||
XMapWindow(mydisplay, mywindow);
|
||||
XFlush(mydisplay);
|
||||
XSync(mydisplay, False);
|
||||
#ifdef HAVE_GUI
|
||||
}
|
||||
hint.flags = PPosition | PSize;
|
||||
XGetWindowAttributes(mydisplay, DefaultRootWindow(mydisplay), &attribs);
|
||||
depth=attribs.depth;
|
||||
if (depth != 15 && depth != 16 && depth != 24 && depth != 32) depth = 24;
|
||||
XMatchVisualInfo(mydisplay, screen, depth, TrueColor, &vinfo);
|
||||
|
||||
xswa.background_pixel = 0;
|
||||
xswa.border_pixel = 0;
|
||||
xswamask = CWBackPixel | CWBorderPixel;
|
||||
|
||||
mywindow = XCreateWindow(mydisplay, RootWindow(mydisplay,screen),
|
||||
hint.x, hint.y, hint.width, hint.height,
|
||||
0, depth,CopyFromParent,vinfo.visual,xswamask,&xswa);
|
||||
vo_hidecursor(mydisplay,mywindow);
|
||||
|
||||
XSelectInput(mydisplay, mywindow, StructureNotifyMask | KeyPressMask );
|
||||
XSetStandardProperties(mydisplay, mywindow, hello, hello, None, NULL, 0, &hint);
|
||||
if ( fullscreen ) vo_x11_decoration( mydisplay,mywindow,0 );
|
||||
XMapWindow(mydisplay, mywindow);
|
||||
XFlush(mydisplay);
|
||||
XSync(mydisplay, False);
|
||||
else
|
||||
{
|
||||
mywindow=vo_window;
|
||||
mygc=vo_gc;
|
||||
if ( vo_screenwidth != d_width )
|
||||
{
|
||||
XMoveWindow( mydisplay,mywindow,( vo_screenwidth - d_width ) / 2,( vo_screenheight - d_height ) / 2 );
|
||||
XResizeWindow( mydisplay,mywindow,d_width,d_height );
|
||||
}
|
||||
else mFullscreen=1;
|
||||
}
|
||||
#endif
|
||||
|
||||
mygc = XCreateGC(mydisplay, mywindow, 0L, &xgcv);
|
||||
|
||||
@ -253,6 +275,20 @@ static void check_events(void)
|
||||
XTranslateCoordinates( mydisplay,mywindow,mRoot,0,0,&drwcX,&drwcY,&mRoot );
|
||||
printf( "[xv] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
if ( vo_window != None )
|
||||
{
|
||||
mFullscreen=0;
|
||||
dwidth=mdwidth; dheight=mdheight;
|
||||
if ( ( drwWidth == vo_screenwidth )&&( drwHeight == vo_screenheight ) )
|
||||
{
|
||||
mFullscreen=1;
|
||||
dwidth=vo_screenwidth;
|
||||
dheight=vo_screenwidth * mdheight / mdwidth;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( mFullscreen )
|
||||
{
|
||||
drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2;
|
||||
|
@ -149,6 +149,17 @@ void vo_x11_decoration( Display * vo_Display,Window w,int d )
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
Window vo_window = None;
|
||||
GC vo_gc;
|
||||
int vo_xeventhandling = 1;
|
||||
int vo_resize = 0;
|
||||
int vo_expose = 0;
|
||||
|
||||
void vo_setwindow( Window w,GC g )
|
||||
{ vo_window=w; vo_gc=g; }
|
||||
#endif
|
||||
|
||||
int vo_x11_check_events(Display *mydisplay){
|
||||
int ret=0;
|
||||
XEvent Event;
|
||||
@ -157,26 +168,46 @@ int vo_x11_check_events(Display *mydisplay){
|
||||
XComposeStatus stat;
|
||||
// unsigned long vo_KeyTable[512];
|
||||
|
||||
while ( XPending( mydisplay ) )
|
||||
{
|
||||
XNextEvent( mydisplay,&Event );
|
||||
switch( Event.type )
|
||||
{
|
||||
case Expose:
|
||||
ret|=VO_EVENT_EXPOSE;
|
||||
break;
|
||||
case ConfigureNotify:
|
||||
vo_dwidth=Event.xconfigure.width;
|
||||
vo_dheight=Event.xconfigure.height;
|
||||
ret|=VO_EVENT_RESIZE;
|
||||
break;
|
||||
case KeyPress:
|
||||
XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat );
|
||||
vo_x11_putkey( ( (keySym&0xff00) != 0?( (keySym&0x00ff) + 256 ):( keySym ) ) );
|
||||
ret|=VO_EVENT_KEYPRESS;
|
||||
break;
|
||||
#ifdef HAVE_GUI
|
||||
if ( vo_xeventhandling )
|
||||
{
|
||||
#endif
|
||||
while ( XPending( mydisplay ) )
|
||||
{
|
||||
XNextEvent( mydisplay,&Event );
|
||||
switch( Event.type )
|
||||
{
|
||||
case Expose:
|
||||
ret|=VO_EVENT_EXPOSE;
|
||||
break;
|
||||
case ConfigureNotify:
|
||||
vo_dwidth=Event.xconfigure.width;
|
||||
vo_dheight=Event.xconfigure.height;
|
||||
ret|=VO_EVENT_RESIZE;
|
||||
break;
|
||||
case KeyPress:
|
||||
XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat );
|
||||
vo_x11_putkey( ( (keySym&0xff00) != 0?( (keySym&0x00ff) + 256 ):( keySym ) ) );
|
||||
ret|=VO_EVENT_KEYPRESS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#ifdef HAVE_GUI
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( vo_resize )
|
||||
{
|
||||
vo_resize=0;
|
||||
ret|=VO_EVENT_RESIZE;
|
||||
}
|
||||
if ( vo_expose )
|
||||
{
|
||||
vo_expose=0;
|
||||
ret|=VO_EVENT_EXPOSE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -13,5 +13,16 @@ void vo_x11_decoration( Display * vo_Display,Window w,int d );
|
||||
int vo_x11_check_events(Display *mydisplay);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
extern Window vo_window;
|
||||
extern Display * vo_display;
|
||||
extern GC vo_gc;
|
||||
extern int vo_xeventhandling;
|
||||
extern int vo_expose;
|
||||
extern int vo_resize;
|
||||
|
||||
extern void vo_setwindow( Window w,GC g );
|
||||
#endif
|
||||
|
||||
void saver_off( Display * );
|
||||
void saver_on( Display * );
|
||||
|
242
mplayer.c
242
mplayer.c
@ -88,6 +88,9 @@ extern int errno;
|
||||
#include "help_mp.h"
|
||||
|
||||
#define DEBUG if(0)
|
||||
#ifdef HAVE_GUI
|
||||
int nogui=1; // new
|
||||
#endif
|
||||
int verbose=0;
|
||||
|
||||
#define ABS(x) (((x)>=0)?(x):(-(x)))
|
||||
@ -325,7 +328,25 @@ static int play_in_bg=0;
|
||||
|
||||
extern void avi_fixate();
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
#include "../Gui/mplayer/psignal.h"
|
||||
#endif
|
||||
|
||||
void exit_player(char* how){
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui )
|
||||
{
|
||||
if ( how != NULL )
|
||||
{
|
||||
if ( !strcmp( how,"Quit" ) ) mplSendMessage( mplEndOfFile );
|
||||
if ( !strcmp( how,"End of file" ) ) mplSendMessage( mplEndOfFile );
|
||||
if ( !strcmp( how,"audio_init" ) ) mplSendMessage( mplAudioError );
|
||||
}
|
||||
else mplSendMessage( mplUnknowError );
|
||||
}
|
||||
#endif
|
||||
|
||||
if(how) printf("\nExiting... (%s)\n",how);
|
||||
if(verbose) printf("max framesize was %d bytes\n",max_framesize);
|
||||
// restore terminal:
|
||||
@ -340,6 +361,9 @@ void exit_player(char* how){
|
||||
#endif
|
||||
if(encode_name) avi_fixate();
|
||||
#ifdef HAVE_LIRC
|
||||
#ifdef HAVE_GUI
|
||||
if ( nogui )
|
||||
#endif
|
||||
lirc_mp_cleanup();
|
||||
#endif
|
||||
//if(play_in_bg) system("xsetroot -solid \\#000000");
|
||||
@ -359,6 +383,13 @@ void exit_sighandler(int x){
|
||||
printf("\nMPlayer interrupted by signal %d in module: %s \n",x,
|
||||
current_module?current_module:"unknown"
|
||||
);
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui )
|
||||
{
|
||||
mplShMem->items.error.signal=x;
|
||||
strcpy( mplShMem->items.error.module,current_module?current_module:"unknown" );
|
||||
}
|
||||
#endif
|
||||
exit_player(NULL);
|
||||
}
|
||||
|
||||
@ -372,7 +403,6 @@ extern void write_avi_header_1(FILE *f,int fcc,float fps,int width,int height);
|
||||
extern int vo_init(void);
|
||||
extern int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int maxlen);
|
||||
|
||||
int main(int argc,char* argv[], char *envp[]){
|
||||
char* filename=NULL; //"MI2-Trailer.avi";
|
||||
int i;
|
||||
int seek_to_sec=0;
|
||||
@ -437,11 +467,17 @@ char *stream_dump_name=NULL;
|
||||
int stream_dump_type=0;
|
||||
//int user_bpp=0;
|
||||
|
||||
int osd_visible=100;
|
||||
int osd_function=OSD_PLAY;
|
||||
int osd_last_pts=-303;
|
||||
|
||||
int rel_seek_secs=0;
|
||||
|
||||
#include "mixer.h"
|
||||
#include "cfg-mplayer.h"
|
||||
|
||||
printf("%s",banner_text);
|
||||
|
||||
void parse_cfgfiles( void )
|
||||
{
|
||||
if (parse_config_file(conf, "/etc/mplayer.conf") < 0)
|
||||
exit(1);
|
||||
if ((conffile = get_path("")) == NULL) {
|
||||
@ -462,26 +498,42 @@ if ((conffile = get_path("")) == NULL) {
|
||||
free(conffile);
|
||||
}
|
||||
}
|
||||
if (parse_command_line(conf, argc, argv, envp, &filename) < 0)
|
||||
exit(1);
|
||||
|
||||
// Many users forget to include command line in bugreports...
|
||||
if(verbose){
|
||||
printf("CommandLine:");
|
||||
for(i=1;i<argc;i++)printf(" '%s'",argv[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if(video_driver && strcmp(video_driver,"help")==0){
|
||||
printf("Available video output drivers:\n");
|
||||
i=0;
|
||||
while (video_out_drivers[i]) {
|
||||
const vo_info_t *info = video_out_drivers[i++]->get_info ();
|
||||
printf("\t%s\t%s\n", info->short_name, info->name);
|
||||
}
|
||||
printf("\n");
|
||||
exit(0);
|
||||
}
|
||||
#ifndef HAVE_GUI
|
||||
int main(int argc,char* argv[], char *envp[]){
|
||||
#else
|
||||
int mplayer(int argc,char* argv[], char *envp[]){
|
||||
#endif
|
||||
|
||||
printf("%s",banner_text);
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
if ( nogui )
|
||||
{
|
||||
#endif
|
||||
if (parse_command_line(conf, argc, argv, envp, &filename) < 0) exit(1);
|
||||
|
||||
// Many users forget to include command line in bugreports...
|
||||
if(verbose){
|
||||
printf("CommandLine:");
|
||||
for(i=1;i<argc;i++)printf(" '%s'",argv[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if(video_driver && strcmp(video_driver,"help")==0){
|
||||
printf("Available video output drivers:\n");
|
||||
i=0;
|
||||
while (video_out_drivers[i]) {
|
||||
const vo_info_t *info = video_out_drivers[i++]->get_info ();
|
||||
printf("\t%s\t%s\n", info->short_name, info->name);
|
||||
}
|
||||
printf("\n");
|
||||
exit(0);
|
||||
}
|
||||
#ifdef HAVE_GUI
|
||||
}
|
||||
#endif
|
||||
|
||||
if(!filename){
|
||||
if(vcd_track) filename="/dev/cdrom";
|
||||
@ -508,6 +560,9 @@ if(!filename){
|
||||
// check codec.conf
|
||||
if(!parse_codec_cfg(get_path("codecs.conf"))){
|
||||
printf("(copy/link DOCS/codecs.conf to ~/.mplayer/codecs.conf)\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplCodecConfNotFound ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -573,12 +628,20 @@ if(vcd_track){
|
||||
if (dvdimportkey) {
|
||||
if (dvd_import_key(dvdimportkey)) {
|
||||
fprintf(stderr,"Error processing DVD KEY.\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplErrorDVDKeyProcess ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
printf("DVD command line requested key is stored for descrambling.\n");
|
||||
}
|
||||
if (dvd_device) {
|
||||
if (dvd_auth(dvd_device,f)) exit(0);
|
||||
if (dvd_auth(dvd_device,f)) {
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplErrorDVDAuth ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(0);
|
||||
}
|
||||
printf("DVD auth sequence seems to be OK.\n");
|
||||
}
|
||||
#endif
|
||||
@ -653,6 +716,9 @@ if(file_format==DEMUXER_TYPE_MPEG_ES){ // little hack, see above!
|
||||
if(file_format==DEMUXER_TYPE_UNKNOWN){
|
||||
printf("============= Sorry, this file format not recognized/supported ===============\n");
|
||||
printf("=== If this file is an AVI, ASF or MPEG stream, please contact the author! ===\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplUnknowFileType ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
//====== File format recognized, set up these for compatibility: =========
|
||||
@ -703,6 +769,9 @@ switch(file_format){
|
||||
}
|
||||
if(v_pos==-1){
|
||||
printf("AVI_NI: missing video stream!? contact the author, it may be a bug :(\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplErrorAVINI ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
if(a_pos==-1){
|
||||
@ -727,6 +796,9 @@ switch(file_format){
|
||||
}
|
||||
if(!ds_fill_buffer(d_video)){
|
||||
printf("AVI: missing video stream!? contact the author, it may be a bug :(\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplAVIErrorMissingVideoStream ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
sh_video=d_video->sh;sh_video->ds=d_video;
|
||||
@ -768,6 +840,9 @@ switch(file_format){
|
||||
// demuxer->endpos=avi_header.movi_end;
|
||||
if(!ds_fill_buffer(d_video)){
|
||||
printf("ASF: missing video stream!? contact the author, it may be a bug :(\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplASFErrorMissingVideoStream ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
sh_video=d_video->sh;sh_video->ds=d_video;
|
||||
@ -836,6 +911,9 @@ switch(file_format){
|
||||
if(!i || !skip_video_packet(d_video)){
|
||||
if(verbose) printf("NONE :(\n");
|
||||
printf("MPEG: FATAL: EOF while searching for sequence header\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplMPEGErrorSeqHeaderSearch ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@ -845,17 +923,43 @@ switch(file_format){
|
||||
mpeg2_init();
|
||||
// ========= Read & process sequence header & extension ============
|
||||
videobuffer=shmem_alloc(VIDEOBUFFER_SIZE);
|
||||
if(!videobuffer){ printf("Cannot allocate shared memory\n");exit(0);}
|
||||
if(!videobuffer){
|
||||
printf("Cannot allocate shared memory\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplErrorShMemAlloc ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(0);
|
||||
}
|
||||
videobuf_len=0;
|
||||
if(!read_video_packet(d_video)){ printf("FATAL: Cannot read sequence header!\n");exit(1);}
|
||||
if(!read_video_packet(d_video)){
|
||||
printf("FATAL: Cannot read sequence header!\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplMPEGErrorCannotReadSeqHeader ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
if(header_process_sequence_header (picture, &videobuffer[4])) {
|
||||
printf ("bad sequence header!\n"); exit(1);
|
||||
printf ("bad sequence header!\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplMPEGErrorBadSeqHeader ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
if(sync_video_packet(d_video)==0x1B5){ // next packet is seq. ext.
|
||||
videobuf_len=0;
|
||||
if(!read_video_packet(d_video)){ printf("FATAL: Cannot read sequence header extension!\n");exit(1);}
|
||||
if(!read_video_packet(d_video)){
|
||||
printf("FATAL: Cannot read sequence header extension!\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplMPEGErrorCannotReadSeqHeaderExt ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
if(header_process_extension (picture, &videobuffer[4])) {
|
||||
printf ("bad sequence header extension!\n"); exit(1);
|
||||
printf ("bad sequence header extension!\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplMPEGErrorBadSeqHeaderExt ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
// display info:
|
||||
@ -940,6 +1044,14 @@ while(1){
|
||||
sh_video->bih?((unsigned int*) &sh_video->bih->biCompression):NULL,sh_video->codec,0);
|
||||
if(!sh_video->codec){
|
||||
printf("Can't find codec for video format 0x%X !\n",sh_video->format);
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui )
|
||||
{
|
||||
mplShMem->items.videodata.format=sh_video->format;
|
||||
mplSendMessage( mplCantFindCodecForVideoFormat );
|
||||
usleep( 10000 );
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
if(!allow_dshow && sh_video->codec->driver==4) continue; // skip DShow
|
||||
@ -959,6 +1071,9 @@ for(i=0;i<CODECS_MAX_OUTFMT;i++){
|
||||
}
|
||||
if(i>=CODECS_MAX_OUTFMT){
|
||||
printf("Sorry, selected video_out device is incompatible with this codec.\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplIncompatibleVideoOutDevice ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
sh_video->outfmtidx=i;
|
||||
@ -967,13 +1082,21 @@ if(verbose) printf("vo_debug1: out_fmt=0x%08X\n",out_fmt);
|
||||
|
||||
switch(sh_video->codec->driver){
|
||||
case 2: {
|
||||
if(!init_video_codec(sh_video)) exit(1);
|
||||
if(!init_video_codec(sh_video)) {
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplUnknowError ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
if(verbose) printf("INFO: Win32 video codec init OK!\n");
|
||||
break;
|
||||
}
|
||||
case 4: { // Win32/DirectShow
|
||||
#ifndef USE_DIRECTSHOW
|
||||
printf("MPlayer was compiled WITHOUT directshow support!\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplCompileWithoutDSSupport ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
#else
|
||||
sh_video->our_out_buffer=NULL;
|
||||
@ -983,6 +1106,14 @@ switch(sh_video->codec->driver){
|
||||
printf("Maybe you forget to upgrade your win32 codecs?? It's time to download the new\n");
|
||||
printf("package from: ftp://thot.banki.hu/esp-team/linux/MPlayer/w32codec.zip !\n");
|
||||
printf("Or you should disable DShow support: make distclean;make -f Makefile.No-DS\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui )
|
||||
{
|
||||
strcpy( mplShMem->items.videodata.codecdll,sh_video->codec->dll );
|
||||
mplSendMessage( mplDSCodecNotFound );
|
||||
usleep( 10000 );
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -1125,11 +1256,24 @@ make_pipe(&keyb_fifo_get,&keyb_fifo_put);
|
||||
|
||||
if(verbose) printf("vo_debug3: out_fmt=0x%08X\n",out_fmt);
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui )
|
||||
{
|
||||
mplShMem->items.videodata.width=sh_video->disp_w;
|
||||
mplShMem->items.videodata.height=sh_video->disp_h;
|
||||
mplSendMessage( mplSetVideoData );
|
||||
}
|
||||
#endif
|
||||
|
||||
if(video_out->init(sh_video->disp_w,sh_video->disp_h,
|
||||
screen_size_x,screen_size_y,
|
||||
fullscreen|(vidmode<<1)|(softzoom<<2),
|
||||
title,out_fmt)){
|
||||
printf("FATAL: Cannot initialize video driver!\n");exit(1);
|
||||
printf("FATAL: Cannot initialize video driver!\n");
|
||||
#ifdef HAVE_GUI
|
||||
if ( !nogui ) { mplSendMessage( mplCantInitVideoDriver ); usleep( 10000 ); }
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
if(verbose) printf("INFO: Video OUT driver init OK!\n");
|
||||
|
||||
@ -1156,13 +1300,13 @@ double vout_time_usage=0;
|
||||
double audio_time_usage=0;
|
||||
int grab_frames=0;
|
||||
char osd_text_buffer[64];
|
||||
int osd_visible=100;
|
||||
int osd_function=OSD_PLAY;
|
||||
int osd_last_pts=-303;
|
||||
int drop_frame=0;
|
||||
int drop_frame_cnt=0;
|
||||
|
||||
#ifdef HAVE_LIRC
|
||||
#ifdef HAVE_GUI
|
||||
if ( nogui )
|
||||
#endif
|
||||
lirc_mp_setup();
|
||||
#endif
|
||||
|
||||
@ -1175,7 +1319,12 @@ int drop_frame_cnt=0;
|
||||
// terminate requests:
|
||||
signal(SIGTERM,exit_sighandler); // kill
|
||||
signal(SIGHUP,exit_sighandler); // kill -HUP / xterm closed
|
||||
signal(SIGINT,exit_sighandler); // Interrupt from keyboard
|
||||
|
||||
#ifdef HAVE_GUI
|
||||
if ( nogui )
|
||||
#endif
|
||||
signal(SIGINT,exit_sighandler); // Interrupt from keyboard
|
||||
|
||||
signal(SIGQUIT,exit_sighandler); // Quit from keyboard
|
||||
// fatal errors:
|
||||
signal(SIGBUS,exit_sighandler); // bus error
|
||||
@ -1658,15 +1807,22 @@ switch(sh_video->codec->driver){
|
||||
|
||||
if(osd_function==OSD_PAUSE){
|
||||
printf("\n------ PAUSED -------\r");fflush(stdout);
|
||||
while(
|
||||
#ifdef HAVE_LIRC
|
||||
lirc_mp_getinput()<=0 &&
|
||||
#ifdef HAVE_GUI
|
||||
if ( nogui )
|
||||
{
|
||||
#endif
|
||||
while(
|
||||
#ifdef HAVE_LIRC
|
||||
lirc_mp_getinput()<=0 &&
|
||||
#endif
|
||||
(!f || getch2(20)<=0) && mplayer_get_key()<=0){
|
||||
video_out->check_events();
|
||||
if(!f) usleep(1000); // do not eat the CPU
|
||||
}
|
||||
osd_function=OSD_PLAY;
|
||||
#ifdef HAVE_GUI
|
||||
} else while( osd_function != OSD_PLAY ) usleep( 1000 );
|
||||
#endif
|
||||
(!f || getch2(20)<=0) && mplayer_get_key()<=0){
|
||||
video_out->check_events();
|
||||
if(!f) usleep(1000); // do not eat the CPU
|
||||
}
|
||||
osd_function=OSD_PLAY;
|
||||
}
|
||||
|
||||
} // while(v_frame<a_frame || force_redraw)
|
||||
@ -1674,8 +1830,7 @@ switch(sh_video->codec->driver){
|
||||
|
||||
//================= Keyboard events, SEEKing ====================
|
||||
|
||||
{ int rel_seek_secs=0;
|
||||
int c;
|
||||
{ int c;
|
||||
while(
|
||||
#ifdef HAVE_LIRC
|
||||
(c=lirc_mp_getinput())>0 ||
|
||||
@ -2041,6 +2196,7 @@ switch(file_format){
|
||||
// num_frames=real_num_frames=0;
|
||||
|
||||
}
|
||||
rel_seek_secs=0;
|
||||
} // keyboard event handler
|
||||
|
||||
//================= Update OSD ====================
|
||||
|
Loading…
Reference in New Issue
Block a user