summaryrefslogtreecommitdiffstats
path: root/libvo/vo_x11.c
diff options
context:
space:
mode:
authorattila <attila@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-06-14 04:53:03 +0000
committerattila <attila@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-06-14 04:53:03 +0000
commit0e4e21aac59563f297b3ece42cec0031fcfd47b1 (patch)
treef985373c16526ebb690273613e94b694b711b6db /libvo/vo_x11.c
parentb44c3a048ad7e1a7ac0e20316947783aa20ca226 (diff)
downloadmpv-0e4e21aac59563f297b3ece42cec0031fcfd47b1.tar.bz2
mpv-0e4e21aac59563f297b3ece42cec0031fcfd47b1.tar.xz
major reindentation of x11 code try #2
note that this is plain ident output, i didnt tweak it by hand like the last attempt. if anyone is interested in the indent profile i used, just drop me a mail. please contact me on irc on how to send me my share of cola, but be aware that i will only accept swiss or german cola, as the japanese is way to sweet :) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12583 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/vo_x11.c')
-rw-r--r--libvo/vo_x11.c1048
1 files changed, 586 insertions, 462 deletions
diff --git a/libvo/vo_x11.c b/libvo/vo_x11.c
index ccf6434256..adc17f5ce2 100644
--- a/libvo/vo_x11.c
+++ b/libvo/vo_x11.c
@@ -25,20 +25,21 @@
#include <X11/extensions/XShm.h>
static int Shmem_Flag;
+
//static int Quiet_Flag; Here also what is this for. It's used but isn't inited ?
static XShmSegmentInfo Shminfo[1];
static int gXErrorFlag;
-static int CompletionType=-1;
+static int CompletionType = -1;
/* since it doesn't seem to be defined on some platforms */
-int XShmGetEventBase( Display* );
+int XShmGetEventBase(Display *);
#endif
#include "fastmemcpy.h"
#include "sub.h"
#include "../postproc/swscale.h"
-#include "../postproc/swscale_internal.h" //FIXME
+#include "../postproc/swscale_internal.h" //FIXME
#include "../postproc/rgb2rgb.h"
#include "../libmpcodecs/vf_scale.h"
@@ -49,26 +50,26 @@ int XShmGetEventBase( Display* );
#include "../mplayer.h"
#endif
-static vo_info_t info =
-{
- "X11 ( XImage/Shm )",
- "x11",
- "Aaron Holtzman <aholtzma@ess.engr.uvic.ca>",
- ""
+static vo_info_t info = {
+ "X11 ( XImage/Shm )",
+ "x11",
+ "Aaron Holtzman <aholtzma@ess.engr.uvic.ca>",
+ ""
};
-LIBVO_EXTERN( x11 )
-
+LIBVO_EXTERN(x11)
/* private prototypes */
-static void Display_Image ( XImage * myximage,unsigned char *ImageData );
-static void (*draw_alpha_fnc)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride);
+static void Display_Image(XImage * myximage, unsigned char *ImageData);
+static void (*draw_alpha_fnc) (int x0, int y0, int w, int h,
+ unsigned char *src, unsigned char *srca,
+ int stride);
/* local data */
static unsigned char *ImageData;
/* X11 related variables */
static XImage *myximage = NULL;
-static int depth,bpp,mode;
+static int depth, bpp, mode;
static XWindowAttributes attribs;
static int int_pause;
@@ -80,48 +81,69 @@ static int zoomFlag;
static uint32_t image_width;
static uint32_t image_height;
static uint32_t in_format;
-static uint32_t out_format=0;
-static int srcW=-1;
-static int srcH=-1;
-static int aspect; // 1<<16 based fixed point aspect, so that the aspect stays correct during resizing
-
-static int old_vo_dwidth=-1;
-static int old_vo_dheight=-1;
-
-static void check_events(){
- int ret = vo_x11_check_events(mDisplay);
-
- /* clear left over borders and redraw frame if we are paused */
- if ( ret & VO_EVENT_EXPOSE && int_pause)
- {
- vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width, myximage->height, 0);
- flip_page();
- } else
- if ( (ret & VO_EVENT_RESIZE)||(ret & VO_EVENT_EXPOSE) )
- vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width, myximage->height, 0);
-
+static uint32_t out_format = 0;
+static int srcW = -1;
+static int srcH = -1;
+static int aspect; // 1<<16 based fixed point aspect, so that the aspect stays correct during resizing
+
+static int old_vo_dwidth = -1;
+static int old_vo_dheight = -1;
+
+static void check_events()
+{
+ int ret = vo_x11_check_events(mDisplay);
+
+ /* clear left over borders and redraw frame if we are paused */
+ if (ret & VO_EVENT_EXPOSE && int_pause)
+ {
+ vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width,
+ myximage->height, 0);
+ flip_page();
+ } else if ((ret & VO_EVENT_RESIZE) || (ret & VO_EVENT_EXPOSE))
+ vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width,
+ myximage->height, 0);
+
}
-static void draw_alpha_32(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
- vo_draw_alpha_rgb32(w,h,src,srca,stride,ImageData+4*(y0*image_width+x0),4*image_width);
+static void draw_alpha_32(int x0, int y0, int w, int h, unsigned char *src,
+ unsigned char *srca, int stride)
+{
+ vo_draw_alpha_rgb32(w, h, src, srca, stride,
+ ImageData + 4 * (y0 * image_width + x0),
+ 4 * image_width);
}
-static void draw_alpha_24(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
- vo_draw_alpha_rgb24(w,h,src,srca,stride,ImageData+3*(y0*image_width+x0),3*image_width);
+static void draw_alpha_24(int x0, int y0, int w, int h, unsigned char *src,
+ unsigned char *srca, int stride)
+{
+ vo_draw_alpha_rgb24(w, h, src, srca, stride,
+ ImageData + 3 * (y0 * image_width + x0),
+ 3 * image_width);
}
-static void draw_alpha_16(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
- vo_draw_alpha_rgb16(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width);
+static void draw_alpha_16(int x0, int y0, int w, int h, unsigned char *src,
+ unsigned char *srca, int stride)
+{
+ vo_draw_alpha_rgb16(w, h, src, srca, stride,
+ ImageData + 2 * (y0 * image_width + x0),
+ 2 * image_width);
}
-static void draw_alpha_15(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
- vo_draw_alpha_rgb15(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width);
+static void draw_alpha_15(int x0, int y0, int w, int h, unsigned char *src,
+ unsigned char *srca, int stride)
+{
+ vo_draw_alpha_rgb15(w, h, src, srca, stride,
+ ImageData + 2 * (y0 * image_width + x0),
+ 2 * image_width);
}
-static void draw_alpha_null(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
+static void draw_alpha_null(int x0, int y0, int w, int h,
+ unsigned char *src, unsigned char *srca,
+ int stride)
+{
}
-static SwsContext *swsContext=NULL;
+static SwsContext *swsContext = NULL;
extern int sws_flags;
static XVisualInfo vinfo;
@@ -129,464 +151,557 @@ static XVisualInfo vinfo;
static void getMyXImage()
{
#ifdef HAVE_SHM
- if ( mLocalDisplay && XShmQueryExtension( mDisplay ) ) Shmem_Flag=1;
- else
- {
- Shmem_Flag=0;
- mp_msg(MSGT_VO,MSGL_WARN, "Shared memory not supported\nReverting to normal Xlib\n" );
- }
- if ( Shmem_Flag ) CompletionType=XShmGetEventBase( mDisplay ) + ShmCompletion;
-
- if ( Shmem_Flag )
- {
- myximage=XShmCreateImage( mDisplay,vinfo.visual,depth,ZPixmap,NULL,&Shminfo[0],image_width,image_height );
- if ( myximage == NULL )
+ if (mLocalDisplay && XShmQueryExtension(mDisplay))
+ Shmem_Flag = 1;
+ else
{
- if ( myximage != NULL ) XDestroyImage( myximage );
- mp_msg(MSGT_VO,MSGL_WARN,"Shared memory error,disabling ( Ximage error )\n" );
- goto shmemerror;
+ Shmem_Flag = 0;
+ mp_msg(MSGT_VO, MSGL_WARN,
+ "Shared memory not supported\nReverting to normal Xlib\n");
}
- Shminfo[0].shmid=shmget( IPC_PRIVATE,
- myximage->bytes_per_line * myximage->height ,
- IPC_CREAT | 0777 );
- if ( Shminfo[0].shmid < 0 )
- {
- XDestroyImage( myximage );
- mp_msg(MSGT_VO,MSGL_V, "%s\n",strerror( errno ) );
- //perror( strerror( errno ) );
- mp_msg(MSGT_VO,MSGL_WARN,"Shared memory error,disabling ( seg id error )\n" );
- goto shmemerror;
- }
- Shminfo[0].shmaddr=( char * ) shmat( Shminfo[0].shmid,0,0 );
-
- if ( Shminfo[0].shmaddr == ( ( char * ) -1 ) )
- {
- XDestroyImage( myximage );
- if ( Shminfo[0].shmaddr != ( ( char * ) -1 ) ) shmdt( Shminfo[0].shmaddr );
- mp_msg(MSGT_VO,MSGL_WARN, "Shared memory error,disabling ( address error )\n" );
- goto shmemerror;
- }
- myximage->data=Shminfo[0].shmaddr;
- ImageData=( unsigned char * ) myximage->data;
- Shminfo[0].readOnly=False;
- XShmAttach( mDisplay,&Shminfo[0] );
-
- XSync( mDisplay,False );
-
- if ( gXErrorFlag )
- {
- XDestroyImage( myximage );
- shmdt( Shminfo[0].shmaddr );
- mp_msg(MSGT_VO,MSGL_WARN, "Shared memory error,disabling.\n" );
- gXErrorFlag=0;
- goto shmemerror;
- }
- else
- shmctl( Shminfo[0].shmid,IPC_RMID,0 );
-
- {
- static int firstTime=1;
- if ( firstTime){
- mp_msg(MSGT_VO,MSGL_V, "Sharing memory.\n" );
- firstTime=0;
- }
- }
- }
- else
- {
- shmemerror:
- Shmem_Flag=0;
+ if (Shmem_Flag)
+ CompletionType = XShmGetEventBase(mDisplay) + ShmCompletion;
+
+ if (Shmem_Flag)
+ {
+ myximage =
+ XShmCreateImage(mDisplay, vinfo.visual, depth, ZPixmap, NULL,
+ &Shminfo[0], image_width, image_height);
+ if (myximage == NULL)
+ {
+ if (myximage != NULL)
+ XDestroyImage(myximage);
+ mp_msg(MSGT_VO, MSGL_WARN,
+ "Shared memory error,disabling ( Ximage error )\n");
+ goto shmemerror;
+ }
+ Shminfo[0].shmid = shmget(IPC_PRIVATE,
+ myximage->bytes_per_line *
+ myximage->height, IPC_CREAT | 0777);
+ if (Shminfo[0].shmid < 0)
+ {
+ XDestroyImage(myximage);
+ mp_msg(MSGT_VO, MSGL_V, "%s\n", strerror(errno));
+ //perror( strerror( errno ) );
+ mp_msg(MSGT_VO, MSGL_WARN,
+ "Shared memory error,disabling ( seg id error )\n");
+ goto shmemerror;
+ }
+ Shminfo[0].shmaddr = (char *) shmat(Shminfo[0].shmid, 0, 0);
+
+ if (Shminfo[0].shmaddr == ((char *) -1))
+ {
+ XDestroyImage(myximage);
+ if (Shminfo[0].shmaddr != ((char *) -1))
+ shmdt(Shminfo[0].shmaddr);
+ mp_msg(MSGT_VO, MSGL_WARN,
+ "Shared memory error,disabling ( address error )\n");
+ goto shmemerror;
+ }
+ myximage->data = Shminfo[0].shmaddr;
+ ImageData = (unsigned char *) myximage->data;
+ Shminfo[0].readOnly = False;
+ XShmAttach(mDisplay, &Shminfo[0]);
+
+ XSync(mDisplay, False);
+
+ if (gXErrorFlag)
+ {
+ XDestroyImage(myximage);
+ shmdt(Shminfo[0].shmaddr);
+ mp_msg(MSGT_VO, MSGL_WARN, "Shared memory error,disabling.\n");
+ gXErrorFlag = 0;
+ goto shmemerror;
+ } else
+ shmctl(Shminfo[0].shmid, IPC_RMID, 0);
+
+ {
+ static int firstTime = 1;
+
+ if (firstTime)
+ {
+ mp_msg(MSGT_VO, MSGL_V, "Sharing memory.\n");
+ firstTime = 0;
+ }
+ }
+ } else
+ {
+ shmemerror:
+ Shmem_Flag = 0;
#endif
- myximage=XGetImage( mDisplay,vo_window,0,0,
- image_width,image_height,AllPlanes,ZPixmap );
- ImageData=myximage->data;
+ myximage = XGetImage(mDisplay, vo_window, 0, 0,
+ image_width, image_height, AllPlanes,
+ ZPixmap);
+ ImageData = myximage->data;
#ifdef HAVE_SHM
- }
+ }
#endif
}
static void freeMyXImage()
{
#ifdef HAVE_SHM
- if ( Shmem_Flag )
- {
- XShmDetach( mDisplay,&Shminfo[0] );
- XDestroyImage( myximage );
- shmdt( Shminfo[0].shmaddr );
- }
- else
+ if (Shmem_Flag)
+ {
+ XShmDetach(mDisplay, &Shminfo[0]);
+ XDestroyImage(myximage);
+ shmdt(Shminfo[0].shmaddr);
+ } else
#endif
- {
- XDestroyImage( myximage );
- }
- myximage=NULL;
+ {
+ XDestroyImage(myximage);
+ }
+ myximage = NULL;
}
-static uint32_t config( uint32_t width,uint32_t height,uint32_t d_width,uint32_t d_height,uint32_t flags,char *title,uint32_t format)
+static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
+ uint32_t d_height, uint32_t flags, char *title,
+ uint32_t format)
{
// int screen;
- int fullscreen=0;
- int vm=0;
+ int fullscreen = 0;
+ int vm = 0;
+
// int interval, prefer_blank, allow_exp, nothing;
- unsigned int fg,bg;
- XEvent xev;
- XGCValues xgcv;
- Colormap theCmap;
- XSetWindowAttributes xswa;
- unsigned long xswamask;
+ unsigned int fg, bg;
+ XEvent xev;
+ XGCValues xgcv;
+ Colormap theCmap;
+ XSetWindowAttributes xswa;
+ unsigned long xswamask;
+
#ifdef HAVE_XF86VM
- unsigned int modeline_width, modeline_height;
- static uint32_t vm_width;
- static uint32_t vm_height;
+ unsigned int modeline_width, modeline_height;
+ static uint32_t vm_width;
+ static uint32_t vm_height;
#endif
- vo_mouse_autohide=1;
- old_vo_dwidth=-1;
- old_vo_dheight=-1;
-
- if (!title)
- title = strdup("MPlayer X11 (XImage/Shm) render");
-
- in_format=format;
- srcW= width;
- srcH= height;
- vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2;
- geometry(&vo_dx, &vo_dy, &d_width, &d_height, vo_screenwidth, vo_screenheight);
- vo_dwidth=d_width; vo_dheight=d_height;
-
- if( flags&0x03 ) fullscreen = 1;
- if( flags&0x02 ) vm = 1;
- if( flags&0x08 ) Flip_Flag = 1;
- zoomFlag = flags&0x04;
-
- int_pause = 0;
+ vo_mouse_autohide = 1;
+ old_vo_dwidth = -1;
+ old_vo_dheight = -1;
+
+ if (!title)
+ title = strdup("MPlayer X11 (XImage/Shm) render");
+
+ in_format = format;
+ srcW = width;
+ srcH = height;
+ vo_dx = (vo_screenwidth - d_width) / 2;
+ vo_dy = (vo_screenheight - d_height) / 2;
+ geometry(&vo_dx, &vo_dy, &d_width, &d_height, vo_screenwidth,
+ vo_screenheight);
+ vo_dwidth = d_width;
+ vo_dheight = d_height;
+
+ if (flags & 0x03)
+ fullscreen = 1;
+ if (flags & 0x02)
+ vm = 1;
+ if (flags & 0x08)
+ Flip_Flag = 1;
+ zoomFlag = flags & 0x04;
+
+ int_pause = 0;
// if(!fullscreen) zoomFlag=1; //it makes no sense to avoid zooming on windowd mode
-
+
//printf( "w: %d h: %d\n\n",vo_dwidth,vo_dheight );
- XGetWindowAttributes( mDisplay,mRootWin,&attribs );
- depth=attribs.depth;
+ XGetWindowAttributes(mDisplay, mRootWin, &attribs);
+ depth = attribs.depth;
- if ( depth != 15 && depth != 16 && depth != 24 && depth != 32 ) {
- Visual *visual;
- depth = vo_find_depth_from_visuals(mDisplay, mScreen, &visual);
- }
- if ( !XMatchVisualInfo( mDisplay,mScreen,depth,DirectColor,&vinfo ) ||
- (WinID > 0 && vinfo.visualid != XVisualIDFromVisual(attribs.visual)))
- XMatchVisualInfo( mDisplay,mScreen,depth,TrueColor,&vinfo );
+ if (depth != 15 && depth != 16 && depth != 24 && depth != 32)
+ {
+ Visual *visual;
+
+ depth = vo_find_depth_from_visuals(mDisplay, mScreen, &visual);
+ }
+ if (!XMatchVisualInfo(mDisplay, mScreen, depth, DirectColor, &vinfo) ||
+ (WinID > 0
+ && vinfo.visualid != XVisualIDFromVisual(attribs.visual)))
+ XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo);
- /* set image size (which is indeed neither the input nor output size),
- if zoom is on it will be changed during draw_slice anyway so we don't duplicate the aspect code here
- */
- image_width=(width + 7) & (~7);
- image_height=height;
+ /* set image size (which is indeed neither the input nor output size),
+ if zoom is on it will be changed during draw_slice anyway so we don't duplicate the aspect code here
+ */
+ image_width = (width + 7) & (~7);
+ image_height = height;
- aspect= ((1<<16)*d_width + d_height/2)/d_height;
+ aspect = ((1 << 16) * d_width + d_height / 2) / d_height;
#ifdef HAVE_NEW_GUI
- if(use_gui) guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window
- else
-#endif
- {
+ if (use_gui)
+ guiGetEvent(guiSetShVideo, 0); // the GUI will set up / resize the window
+ else
+#endif
+ {
#ifdef HAVE_XF86VM
- if ( vm )
- {
- if ((d_width==0) && (d_height==0))
- { vm_width=image_width; vm_height=image_height; }
- else
- { vm_width=d_width; vm_height=d_height; }
- vo_vm_switch(vm_width, vm_height,&modeline_width, &modeline_height);
- vo_dx=(vo_screenwidth-modeline_width)/2;
- vo_dy=(vo_screenheight-modeline_height)/2;
- vo_dwidth=modeline_width;
- vo_dheight=modeline_height;
- }
+ if (vm)
+ {
+ if ((d_width == 0) && (d_height == 0))
+ {
+ vm_width = image_width;
+ vm_height = image_height;
+ } else
+ {
+ vm_width = d_width;
+ vm_height = d_height;
+ }
+ vo_vm_switch(vm_width, vm_height, &modeline_width,
+ &modeline_height);
+ vo_dx = (vo_screenwidth - modeline_width) / 2;
+ vo_dy = (vo_screenheight - modeline_height) / 2;
+ vo_dwidth = modeline_width;
+ vo_dheight = modeline_height;
+ }
#endif
- bg=WhitePixel( mDisplay,mScreen );
- fg=BlackPixel( mDisplay,mScreen );
+ bg = WhitePixel(mDisplay, mScreen);
+ fg = BlackPixel(mDisplay, mScreen);
- theCmap=vo_x11_create_colormap(&vinfo);
+ theCmap = vo_x11_create_colormap(&vinfo);
- xswa.background_pixel=0;
- xswa.border_pixel=0;
- xswa.colormap=theCmap;
- xswamask=CWBackPixel | CWBorderPixel | CWColormap;
+ xswa.background_pixel = 0;
+ xswa.border_pixel = 0;
+ xswa.colormap = theCmap;
+ xswamask = CWBackPixel | CWBorderPixel | CWColormap;
#ifdef HAVE_XF86VM
- if ( vm )
- {
- xswa.override_redirect=True;
- xswamask|=CWOverrideRedirect;
- }
+ if (vm)
+ {
+ xswa.override_redirect = True;
+ xswamask |= CWOverrideRedirect;
+ }
#endif
-
- if ( WinID>=0 ){
- vo_window = WinID ? ((Window)WinID) : mRootWin;
- if ( WinID )
- {
- XUnmapWindow( mDisplay,vo_window );
- XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa );
- vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask );
- XMapWindow( mDisplay,vo_window );
- } else XSelectInput( mDisplay,vo_window,ExposureMask );
- }
- else
- {
- if ( vo_window == None )
- {
- vo_window=vo_x11_create_smooth_window( mDisplay,mRootWin,vinfo.visual, vo_dx, vo_dy, vo_dwidth, vo_dheight, depth, theCmap );
-
- vo_x11_classhint( mDisplay,vo_window,"x11" );
- vo_hidecursor(mDisplay,vo_window);
- vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 );
- XSelectInput( mDisplay,vo_window,StructureNotifyMask );
- XStoreName( mDisplay,vo_window,title );
- XMapWindow( mDisplay,vo_window );
+
+ if (WinID >= 0)
+ {
+ vo_window = WinID ? ((Window) WinID) : mRootWin;
+ if (WinID)
+ {
+ XUnmapWindow(mDisplay, vo_window);
+ XChangeWindowAttributes(mDisplay, vo_window, xswamask,
+ &xswa);
+ vo_x11_selectinput_witherr(mDisplay, vo_window,
+ StructureNotifyMask |
+ KeyPressMask |
+ PropertyChangeMask |
+ PointerMotionMask |
+ ButtonPressMask |
+ ButtonReleaseMask |
+ ExposureMask);
+ XMapWindow(mDisplay, vo_window);
+ } else
+ XSelectInput(mDisplay, vo_window, ExposureMask);
+ } else
+ {
+ if (vo_window == None)
+ {
+ vo_window =
+ vo_x11_create_smooth_window(mDisplay, mRootWin,
+ vinfo.visual, vo_dx, vo_dy,
+ vo_dwidth, vo_dheight,
+ depth, theCmap);
+
+ vo_x11_classhint(mDisplay, vo_window, "x11");
+ vo_hidecursor(mDisplay, vo_window);
+ vo_x11_sizehint(vo_dx, vo_dy, vo_dwidth, vo_dheight, 0);
+ XSelectInput(mDisplay, vo_window, StructureNotifyMask);
+ XStoreName(mDisplay, vo_window, title);
+ XMapWindow(mDisplay, vo_window);
// if(WinID!=0)
- do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != vo_window );
-
- if ( fullscreen ) vo_x11_fullscreen();
+ do
+ {
+ XNextEvent(mDisplay, &xev);
+ }
+ while (xev.type != MapNotify
+ || xev.xmap.event != vo_window);
+
+ if (fullscreen)
+ vo_x11_fullscreen();
#ifdef HAVE_XINERAMA
- vo_x11_xinerama_move(mDisplay,vo_window);
+ vo_x11_xinerama_move(mDisplay, vo_window);
#endif
- } else if ( !fullscreen ) XMoveResizeWindow( mDisplay,vo_window,vo_dx,vo_dy,vo_dwidth,vo_dheight );
- }
-
- XFlush( mDisplay );
- XSync( mDisplay,False );
-
- // we cannot grab mouse events on root window :(
- vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | ExposureMask |
- ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)) );
+ } else if (!fullscreen)
+ XMoveResizeWindow(mDisplay, vo_window, vo_dx, vo_dy,
+ vo_dwidth, vo_dheight);
+ }
+
+ XFlush(mDisplay);
+ XSync(mDisplay, False);
+
+ // we cannot grab mouse events on root window :(
+ vo_x11_selectinput_witherr(mDisplay, vo_window,
+ StructureNotifyMask | KeyPressMask |
+ PropertyChangeMask | ExposureMask |
+ ((WinID ==
+ 0) ? 0 : (ButtonPressMask |
+ ButtonReleaseMask |
+ PointerMotionMask)));
#ifdef HAVE_XF86VM
- if ( vm )
- {
- /* Grab the mouse pointer in our window */
- if(vo_grabpointer)
- XGrabPointer(mDisplay, vo_window, True, 0,
- GrabModeAsync, GrabModeAsync,
- vo_window, None, CurrentTime);
- XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime);
- }
+ if (vm)
+ {
+ /* Grab the mouse pointer in our window */
+ if (vo_grabpointer)
+ XGrabPointer(mDisplay, vo_window, True, 0,
+ GrabModeAsync, GrabModeAsync,
+ vo_window, None, CurrentTime);
+ XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime);
+ }
#endif
- }
+ }
- if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc );
- vo_gc=XCreateGC( mDisplay,vo_window,0L,&xgcv );
-
- if ( myximage )
- {
- freeMyXImage();
- sws_freeContext(swsContext);
- }
- getMyXImage();
-
- if ( !WinID )
- { vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; }
-
- switch ((bpp=myximage->bits_per_pixel)){
- case 24: draw_alpha_fnc=draw_alpha_24;
- out_format= IMGFMT_BGR24; break;
- case 32: draw_alpha_fnc=draw_alpha_32;
- out_format= IMGFMT_BGR32; break;
- case 15:
- case 16: if (depth==15){
- draw_alpha_fnc=draw_alpha_15;
- out_format= IMGFMT_BGR15;
- }else{
- draw_alpha_fnc=draw_alpha_16;
- out_format= IMGFMT_BGR16;
- }break;
- case 8: draw_alpha_fnc=draw_alpha_null;
- out_format= IMGFMT_BGR8; break;
- default: draw_alpha_fnc=draw_alpha_null;
- }
-
- /* always allocate swsContext as size could change between frames */
- swsContext= sws_getContextFromCmdLine(width, height, in_format, width, height, out_format );
- if (!swsContext)
- return -1;
+ if (vo_gc != None)
+ XFreeGC(mDisplay, vo_gc);
+ vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv);
+
+ if (myximage)
+ {
+ freeMyXImage();
+ sws_freeContext(swsContext);
+ }
+ getMyXImage();
- //printf( "X11 bpp: %d color mask: R:%lX G:%lX B:%lX\n",bpp,myximage->red_mask,myximage->green_mask,myximage->blue_mask );
+ if (!WinID)
+ {
+ vo_dwidth = vo_screenwidth;
+ vo_dheight = vo_screenheight;
+ }
+
+ switch ((bpp = myximage->bits_per_pixel))
+ {
+ case 24:
+ draw_alpha_fnc = draw_alpha_24;
+ out_format = IMGFMT_BGR24;
+ break;
+ case 32:
+ draw_alpha_fnc = draw_alpha_32;
+ out_format = IMGFMT_BGR32;
+ break;
+ case 15:
+ case 16:
+ if (depth == 15)
+ {
+ draw_alpha_fnc = draw_alpha_15;
+ out_format = IMGFMT_BGR15;
+ } else
+ {
+ draw_alpha_fnc = draw_alpha_16;
+ out_format = IMGFMT_BGR16;
+ }
+ break;
+ case 8:
+ draw_alpha_fnc = draw_alpha_null;
+ out_format = IMGFMT_BGR8;
+ break;
+ default:
+ draw_alpha_fnc = draw_alpha_null;
+ }
+
+ /* always allocate swsContext as size could change between frames */
+ swsContext =
+ sws_getContextFromCmdLine(width, height, in_format, width, height,
+ out_format);
+ if (!swsContext)
+ return -1;
- // If we have blue in the lowest bit then obviously RGB
- mode=( ( myximage->blue_mask & 0x01 ) != 0 ) ? MODE_RGB : MODE_BGR;
+ //printf( "X11 bpp: %d color mask: R:%lX G:%lX B:%lX\n",bpp,myximage->red_mask,myximage->green_mask,myximage->blue_mask );
+
+ // If we have blue in the lowest bit then obviously RGB
+ mode = ((myximage->blue_mask & 0x01) != 0) ? MODE_RGB : MODE_BGR;
#ifdef WORDS_BIGENDIAN
- if ( myximage->byte_order != MSBFirst )
+ if (myximage->byte_order != MSBFirst)
#else
- if ( myximage->byte_order != LSBFirst )
+ if (myximage->byte_order != LSBFirst)
#endif
- {
- mode=( ( myximage->blue_mask & 0x01 ) != 0 ) ? MODE_BGR : MODE_RGB;
+ {
+ mode = ((myximage->blue_mask & 0x01) != 0) ? MODE_BGR : MODE_RGB;
// printf( "No support for non-native XImage byte order!\n" );
// return -1;
- }
-
+ }
#ifdef WORDS_BIGENDIAN
- if(mode==MODE_BGR && bpp!=32){
- mp_msg(MSGT_VO,MSGL_ERR,"BGR%d not supported, please contact the developers\n", bpp);
- return -1;
- }
+ if (mode == MODE_BGR && bpp != 32)
+ {
+ mp_msg(MSGT_VO, MSGL_ERR,
+ "BGR%d not supported, please contact the developers\n",
+ bpp);
+ return -1;
+ }
#else
- if(mode==MODE_BGR){
- mp_msg(MSGT_VO,MSGL_ERR,"BGR not supported, please contact the developers\n");
- return -1;
- }
-#endif
+ if (mode == MODE_BGR)
+ {
+ mp_msg(MSGT_VO, MSGL_ERR,
+ "BGR not supported, please contact the developers\n");
+ return -1;
+ }
+#endif
- saver_off(mDisplay);
+ saver_off(mDisplay);
- if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
+ if (vo_ontop)
+ vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
- return 0;
+ return 0;
}
-static void Display_Image( XImage *myximage,uint8_t *ImageData )
+static void Display_Image(XImage * myximage, uint8_t * ImageData)
{
#ifdef HAVE_SHM
- if ( Shmem_Flag )
- {
- XShmPutImage( mDisplay,vo_window,vo_gc,myximage,
- 0,0,
- ( vo_dwidth - swsContext->dstW ) / 2,( vo_dheight - myximage->height ) / 2,
- swsContext->dstW,myximage->height,True );
- }
- else
+ if (Shmem_Flag)
+ {
+ XShmPutImage(mDisplay, vo_window, vo_gc, myximage,
+ 0, 0,
+ (vo_dwidth - swsContext->dstW) / 2,
+ (vo_dheight - myximage->height) / 2, swsContext->dstW,
+ myximage->height, True);
+ } else
#endif
- {
- XPutImage( mDisplay,vo_window,vo_gc,myximage,
- 0,0,
- ( vo_dwidth - swsContext->dstW ) / 2,( vo_dheight - myximage->height ) / 2,
- swsContext->dstW,myximage->height);
- }
+ {
+ XPutImage(mDisplay, vo_window, vo_gc, myximage,
+ 0, 0,
+ (vo_dwidth - swsContext->dstW) / 2,
+ (vo_dheight - myximage->height) / 2, swsContext->dstW,
+ myximage->height);
+ }
}
static void draw_osd(void)
-{ vo_draw_text(image_width,image_height,draw_alpha_fnc); }
+{
+ vo_draw_text(image_width, image_height, draw_alpha_fnc);
+}
-static void flip_page( void ){
- Display_Image( myximage,ImageData );
+static void flip_page(void)
+{
+ Display_Image(myximage, ImageData);
XSync(mDisplay, False);
}
-static uint32_t draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y )
+static uint32_t draw_slice(uint8_t * src[], int stride[], int w, int h,
+ int x, int y)
{
- uint8_t *dst[3];
- int dstStride[3];
-
- if((old_vo_dwidth != vo_dwidth || old_vo_dheight != vo_dheight) /*&& y==0*/ && zoomFlag)
- {
- int newW= vo_dwidth;
- int newH= vo_dheight;
- int newAspect= (newW*(1<<16) + (newH>>1))/newH;
- SwsContext *oldContext= swsContext;
-
- if(newAspect>aspect) newW= (newH*aspect + (1<<15))>>16;
- else newH= ((newW<<16) + (aspect>>1)) /aspect;
-
- old_vo_dwidth= vo_dwidth;
- old_vo_dheight= vo_dheight;
-
- if(sws_flags==0) newW&= (~31); // not needed but, if the user wants the FAST_BILINEAR SCALER, then its needed
-
- swsContext= sws_getContextFromCmdLine(srcW, srcH, in_format,
- newW, newH, out_format);
- if(swsContext)
+ uint8_t *dst[3];
+ int dstStride[3];
+
+ if ((old_vo_dwidth != vo_dwidth
+ || old_vo_dheight != vo_dheight) /*&& y==0 */ && zoomFlag)
{
- image_width= (newW+7)&(~7);
- image_height= newH;
+ int newW = vo_dwidth;
+ int newH = vo_dheight;
+ int newAspect = (newW * (1 << 16) + (newH >> 1)) / newH;
+ SwsContext *oldContext = swsContext;
+
+ if (newAspect > aspect)
+ newW = (newH * aspect + (1 << 15)) >> 16;
+ else
+ newH = ((newW << 16) + (aspect >> 1)) / aspect;
+
+ old_vo_dwidth = vo_dwidth;
+ old_vo_dheight = vo_dheight;
+
+ if (sws_flags == 0)
+ newW &= (~31); // not needed but, if the user wants the FAST_BILINEAR SCALER, then its needed
+
+ swsContext = sws_getContextFromCmdLine(srcW, srcH, in_format,
+ newW, newH, out_format);
+ if (swsContext)
+ {
+ image_width = (newW + 7) & (~7);
+ image_height = newH;
+
+ freeMyXImage();
+ getMyXImage();
+ sws_freeContext(oldContext);
+ } else
+ {
+ swsContext = oldContext;
+ }
+ }
+ dstStride[1] = dstStride[2] = 0;
+ dst[1] = dst[2] = NULL;
- freeMyXImage();
- getMyXImage();
- sws_freeContext(oldContext);
- }
- else
+ if (Flip_Flag)
{
- swsContext= oldContext;
+ dstStride[0] = -image_width * ((bpp + 7) / 8);
+ dst[0] = ImageData - dstStride[0] * (image_height - 1);
+ sws_scale_ordered(swsContext, src, stride, y, h, dst, dstStride);
+ } else
+ {
+ dstStride[0] = image_width * ((bpp + 7) / 8);
+ dst[0] = ImageData;
+ sws_scale_ordered(swsContext, src, stride, y, h, dst, dstStride);
}
- }
- dstStride[1]=
- dstStride[2]=0;
- dst[1]=
- dst[2]=NULL;
-
- if(Flip_Flag)
- {
- dstStride[0]= -image_width*((bpp+7)/8);
- dst[0]=ImageData - dstStride[0]*(image_height-1);
- sws_scale_ordered(swsContext,src,stride,y,h,dst, dstStride);
- }
- else
- {
- dstStride[0]=image_width*((bpp+7)/8);
- dst[0]=ImageData;
- sws_scale_ordered(swsContext,src,stride,y,h,dst, dstStride);
- }
- return 0;
+ return 0;
}
-static uint32_t draw_frame( uint8_t *src[] ){
+static uint32_t draw_frame(uint8_t * src[])
+{
#if 0
- int stride[3]= {0,0,0};
-
- if (in_format==IMGFMT_YUY2) stride[0]=srcW*2;
- else if(in_format==IMGFMT_BGR8) stride[0]=srcW;
- else if(in_format==IMGFMT_BGR15) stride[0]=srcW*2;
- else if(in_format==IMGFMT_BGR16) stride[0]=srcW*2;
- else if(in_format==IMGFMT_BGR24) stride[0]=srcW*3;
- else if(in_format==IMGFMT_BGR32) stride[0]=srcW*4;
-
- return draw_slice(src, stride, srcW, srcH, 0, 0);
+ int stride[3] = { 0, 0, 0 };
+
+ if (in_format == IMGFMT_YUY2)
+ stride[0] = srcW * 2;
+ else if (in_format == IMGFMT_BGR8)
+ stride[0] = srcW;
+ else if (in_format == IMGFMT_BGR15)
+ stride[0] = srcW * 2;
+ else if (in_format == IMGFMT_BGR16)
+ stride[0] = srcW * 2;
+ else if (in_format == IMGFMT_BGR24)
+ stride[0] = srcW * 3;
+ else if (in_format == IMGFMT_BGR32)
+ stride[0] = srcW * 4;
+
+ return draw_slice(src, stride, srcW, srcH, 0, 0);
#else
printf("draw_frame() called!!!!!!\n");
return -1;
#endif
}
-static uint32_t get_image(mp_image_t