Mercurial > mplayer.hg
annotate libvo/vo_x11.c @ 11619:179138947307
This patch contains bugfixes for the esd audio output driver that I
uncovered while trying to send sound to a remote esd server over a
wireless (11 mbs, just enough to handle to sound) link.
First, the sound was full "ticking" sounds. I found a bug that
prevented the "send the remainder of this block" code from ever being
called - so large chunks of audio were simply being ignored. Fixing
this bug removed the "ticking" from audio streams.
Fixing this bug, however, uncovered another problem - when the socket
buffer was full, doing a blocking write to finish the buffer would take
far too long and would turn video into a chunky mess. I'd imagine this
blocking write would be fine for an audio-only stream, but it turns out
to hold up the video far too much.
The solution in this patch is to write as much data as possible to the
socket, and then return as soon as possible, reporting the number of
bytes actually written accurately back to mplayer. I've tested it on
both local and remote esd servers, and it works well.
Patch by Benjamin Osheroff <ben@gimbo.net>
author | attila |
---|---|
date | Wed, 10 Dec 2003 12:19:13 +0000 |
parents | 85e503ddf65f |
children | 860bc06f32ca |
rev | line source |
---|---|
1 | 1 |
2 #include <stdio.h> | |
3 #include <stdlib.h> | |
4 #include <string.h> | |
5 #include <signal.h> | |
6 | |
7 #include "config.h" | |
8 #include "video_out.h" | |
9 #include "video_out_internal.h" | |
10 | |
11 | |
12 #include <X11/Xlib.h> | |
13 #include <X11/Xutil.h> | |
4036 | 14 |
206
82b5ae8ceaf4
adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents:
202
diff
changeset
|
15 #ifdef HAVE_XF86VM |
82b5ae8ceaf4
adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents:
202
diff
changeset
|
16 #include <X11/extensions/xf86vmode.h> |
82b5ae8ceaf4
adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents:
202
diff
changeset
|
17 #endif |
1 | 18 #include <errno.h> |
19 | |
31 | 20 #include "x11_common.h" |
21 | |
354 | 22 #include "fastmemcpy.h" |
616 | 23 #include "sub.h" |
350 | 24 |
2218 | 25 #include "../postproc/swscale.h" |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9278
diff
changeset
|
26 #include "../postproc/swscale_internal.h" //FIXME |
2556 | 27 #include "../postproc/rgb2rgb.h" |
10233
35f52ad860a0
vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents:
10212
diff
changeset
|
28 #include "../libmpcodecs/vf_scale.h" |
2218 | 29 |
4734 | 30 #include "../mp_msg.h" |
31 | |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
32 #ifdef HAVE_NEW_GUI |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
33 #include "../Gui/interface.h" |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
34 #include "../mplayer.h" |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
35 #endif |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
36 |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7964
diff
changeset
|
37 static vo_info_t info = |
1 | 38 { |
39 "X11 ( XImage/Shm )", | |
40 "x11", | |
41 "Aaron Holtzman <aholtzma@ess.engr.uvic.ca>", | |
42 "" | |
43 }; | |
44 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7964
diff
changeset
|
45 LIBVO_EXTERN( x11 ) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7964
diff
changeset
|
46 |
1 | 47 /* private prototypes */ |
48 static void Display_Image ( XImage * myximage,unsigned char *ImageData ); | |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
49 static void (*draw_alpha_fnc)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride); |
1 | 50 |
51 /* local data */ | |
52 static unsigned char *ImageData; | |
53 | |
54 /* X11 related variables */ | |
7764 | 55 static XImage *myximage = NULL; |
1 | 56 static int depth,bpp,mode; |
57 static XWindowAttributes attribs; | |
58 | |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
59 static int int_pause; |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
60 |
2969 | 61 static int Flip_Flag; |
4661
4df2400b0527
-fs and or -vm default is nozoom, -zoom does the expected thing
michael
parents:
4658
diff
changeset
|
62 static int zoomFlag; |
2969 | 63 |
3003 | 64 #ifdef HAVE_SHM |
1 | 65 #include <sys/ipc.h> |
66 #include <sys/shm.h> | |
67 #include <X11/extensions/XShm.h> | |
68 | |
69 static int Shmem_Flag; | |
5935 | 70 //static int Quiet_Flag; Here also what is this for. It's used but isn't inited ? |
1 | 71 static XShmSegmentInfo Shminfo[1]; |
72 static int gXErrorFlag; | |
73 static int CompletionType=-1; | |
74 | |
4813 | 75 /* since it doesn't seem to be defined on some platforms */ |
76 int XShmGetEventBase( Display* ); | |
1 | 77 #endif |
78 | |
79 static uint32_t image_width; | |
80 static uint32_t image_height; | |
4641 | 81 static uint32_t in_format; |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
82 static uint32_t out_format=0; |
4718
c70b0c4b85f5
avoid allocating a dummy scaler as debug/info messages will only be printed for the first allocated scaler unless -v -v is used
michael
parents:
4697
diff
changeset
|
83 static int srcW=-1; |
c70b0c4b85f5
avoid allocating a dummy scaler as debug/info messages will only be printed for the first allocated scaler unless -v -v is used
michael
parents:
4697
diff
changeset
|
84 static int srcH=-1; |
4641 | 85 static int aspect; // 1<<16 based fixed point aspect, so that the aspect stays correct during resizing |
1 | 86 |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
87 static int old_vo_dwidth=-1; |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
88 static int old_vo_dheight=-1; |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
89 |
31 | 90 static void check_events(){ |
4808
4eaa205201b0
clear the window if resized but no scaling used. Enable runtime fullscreen selectin when no zooming available
alex
parents:
4805
diff
changeset
|
91 int ret = vo_x11_check_events(mDisplay); |
4eaa205201b0
clear the window if resized but no scaling used. Enable runtime fullscreen selectin when no zooming available
alex
parents:
4805
diff
changeset
|
92 |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
93 /* clear left over borders and redraw frame if we are paused */ |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
94 if ( ret & VO_EVENT_EXPOSE && int_pause) |
4808
4eaa205201b0
clear the window if resized but no scaling used. Enable runtime fullscreen selectin when no zooming available
alex
parents:
4805
diff
changeset
|
95 { |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
96 vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width, myximage->height, 0); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
97 flip_page(); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
98 } else |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
99 if ( (ret & VO_EVENT_RESIZE)||(ret & VO_EVENT_EXPOSE) ) |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
100 vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width, myximage->height, 0); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
101 |
1 | 102 } |
103 | |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
104 static void draw_alpha_32(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
105 vo_draw_alpha_rgb32(w,h,src,srca,stride,ImageData+4*(y0*image_width+x0),4*image_width); |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
106 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
107 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
108 static void draw_alpha_24(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
109 vo_draw_alpha_rgb24(w,h,src,srca,stride,ImageData+3*(y0*image_width+x0),3*image_width); |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
110 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
111 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
112 static void draw_alpha_16(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
113 vo_draw_alpha_rgb16(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width); |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
114 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
115 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
116 static void draw_alpha_15(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
117 vo_draw_alpha_rgb15(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width); |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
118 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
119 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
120 static void draw_alpha_null(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
121 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
122 |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
123 static SwsContext *swsContext=NULL; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
124 extern int sws_flags; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
125 |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
126 static XVisualInfo vinfo; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
127 |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
128 static void getMyXImage() |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
129 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
130 #ifdef HAVE_SHM |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
131 if ( mLocalDisplay && XShmQueryExtension( mDisplay ) ) Shmem_Flag=1; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
132 else |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
133 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
134 Shmem_Flag=0; |
5935 | 135 mp_msg(MSGT_VO,MSGL_WARN, "Shared memory not supported\nReverting to normal Xlib\n" ); |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
136 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
137 if ( Shmem_Flag ) CompletionType=XShmGetEventBase( mDisplay ) + ShmCompletion; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
138 |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
139 if ( Shmem_Flag ) |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
140 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
141 myximage=XShmCreateImage( mDisplay,vinfo.visual,depth,ZPixmap,NULL,&Shminfo[0],image_width,image_height ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
142 if ( myximage == NULL ) |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
143 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
144 if ( myximage != NULL ) XDestroyImage( myximage ); |
5935 | 145 mp_msg(MSGT_VO,MSGL_WARN,"Shared memory error,disabling ( Ximage error )\n" ); |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
146 goto shmemerror; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
147 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
148 Shminfo[0].shmid=shmget( IPC_PRIVATE, |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
149 myximage->bytes_per_line * myximage->height , |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
150 IPC_CREAT | 0777 ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
151 if ( Shminfo[0].shmid < 0 ) |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
152 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
153 XDestroyImage( myximage ); |
5935 | 154 mp_msg(MSGT_VO,MSGL_V, "%s\n",strerror( errno ) ); |
155 //perror( strerror( errno ) ); | |
156 mp_msg(MSGT_VO,MSGL_WARN,"Shared memory error,disabling ( seg id error )\n" ); | |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
157 goto shmemerror; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
158 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
159 Shminfo[0].shmaddr=( char * ) shmat( Shminfo[0].shmid,0,0 ); |
3209 | 160 |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
161 if ( Shminfo[0].shmaddr == ( ( char * ) -1 ) ) |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
162 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
163 XDestroyImage( myximage ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
164 if ( Shminfo[0].shmaddr != ( ( char * ) -1 ) ) shmdt( Shminfo[0].shmaddr ); |
5935 | 165 mp_msg(MSGT_VO,MSGL_WARN, "Shared memory error,disabling ( address error )\n" ); |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
166 goto shmemerror; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
167 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
168 myximage->data=Shminfo[0].shmaddr; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
169 ImageData=( unsigned char * ) myximage->data; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
170 Shminfo[0].readOnly=False; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
171 XShmAttach( mDisplay,&Shminfo[0] ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
172 |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
173 XSync( mDisplay,False ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
174 |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
175 if ( gXErrorFlag ) |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
176 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
177 XDestroyImage( myximage ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
178 shmdt( Shminfo[0].shmaddr ); |
5935 | 179 mp_msg(MSGT_VO,MSGL_WARN, "Shared memory error,disabling.\n" ); |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
180 gXErrorFlag=0; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
181 goto shmemerror; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
182 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
183 else |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
184 shmctl( Shminfo[0].shmid,IPC_RMID,0 ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
185 |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
186 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
187 static int firstTime=1; |
5935 | 188 if ( firstTime){ |
189 mp_msg(MSGT_VO,MSGL_V, "Sharing memory.\n" ); | |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
190 firstTime=0; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
191 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
192 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
193 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
194 else |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
195 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
196 shmemerror: |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
197 Shmem_Flag=0; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
198 #endif |
4804 | 199 myximage=XGetImage( mDisplay,vo_window,0,0, |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
200 image_width,image_height,AllPlanes,ZPixmap ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
201 ImageData=myximage->data; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
202 #ifdef HAVE_SHM |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
203 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
204 #endif |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
205 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
206 |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
207 static void freeMyXImage() |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
208 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
209 #ifdef HAVE_SHM |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
210 if ( Shmem_Flag ) |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
211 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
212 XShmDetach( mDisplay,&Shminfo[0] ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
213 XDestroyImage( myximage ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
214 shmdt( Shminfo[0].shmaddr ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
215 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
216 else |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
217 #endif |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
218 { |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
219 XDestroyImage( myximage ); |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
220 } |
5414 | 221 myximage=NULL; |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
222 } |
2218 | 223 |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6953
diff
changeset
|
224 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) |
1 | 225 { |
1110 | 226 // int screen; |
767
372042df5c77
Added support for flipped BGR/RGB via -flip cmdline switch.
atmosfear
parents:
616
diff
changeset
|
227 int fullscreen=0; |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
228 int vm=0; |
1110 | 229 // int interval, prefer_blank, allow_exp, nothing; |
1 | 230 unsigned int fg,bg; |
231 XEvent xev; | |
232 XGCValues xgcv; | |
233 Colormap theCmap; | |
234 XSetWindowAttributes xswa; | |
235 unsigned long xswamask; | |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
236 #ifdef HAVE_XF86VM |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
237 unsigned int modeline_width, modeline_height; |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
238 static uint32_t vm_width; |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
239 static uint32_t vm_height; |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
240 #endif |
1 | 241 |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
242 vo_mouse_autohide=1; |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
243 old_vo_dwidth=-1; |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
244 old_vo_dheight=-1; |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
245 |
4813 | 246 if (!title) |
247 title = strdup("MPlayer X11 (XImage/Shm) render"); | |
248 | |
4641 | 249 in_format=format; |
4718
c70b0c4b85f5
avoid allocating a dummy scaler as debug/info messages will only be printed for the first allocated scaler unless -v -v is used
michael
parents:
4697
diff
changeset
|
250 srcW= width; |
c70b0c4b85f5
avoid allocating a dummy scaler as debug/info messages will only be printed for the first allocated scaler unless -v -v is used
michael
parents:
4697
diff
changeset
|
251 srcH= height; |
6043 | 252 vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; |
10728 | 253 geometry(&vo_dx, &vo_dy, &d_width, &d_height, vo_screenwidth, vo_screenheight); |
6858
21186a5514b4
initial window size (-xy) fixed - patch by Kazunori Ueno <jagarl@creator.club.ne.jp>
arpi
parents:
6704
diff
changeset
|
254 vo_dwidth=d_width; vo_dheight=d_height; |
4641 | 255 |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
256 if( flags&0x03 ) fullscreen = 1; |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
257 if( flags&0x02 ) vm = 1; |
767
372042df5c77
Added support for flipped BGR/RGB via -flip cmdline switch.
atmosfear
parents:
616
diff
changeset
|
258 if( flags&0x08 ) Flip_Flag = 1; |
4661
4df2400b0527
-fs and or -vm default is nozoom, -zoom does the expected thing
michael
parents:
4658
diff
changeset
|
259 zoomFlag = flags&0x04; |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
260 |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
261 int_pause = 0; |
4677
305a0c20bde4
default is allways nozoom again (specify -zoom if u want the sane behavior)
michael
parents:
4662
diff
changeset
|
262 // if(!fullscreen) zoomFlag=1; //it makes no sense to avoid zooming on windowd mode |
2218 | 263 |
264 //printf( "w: %d h: %d\n\n",vo_dwidth,vo_dheight ); | |
1746 | 265 |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
266 XGetWindowAttributes( mDisplay,mRootWin,&attribs ); |
1746 | 267 depth=attribs.depth; |
268 | |
7256
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7124
diff
changeset
|
269 if ( depth != 15 && depth != 16 && depth != 24 && depth != 32 ) { |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7124
diff
changeset
|
270 Visual *visual; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7124
diff
changeset
|
271 depth = vo_find_depth_from_visuals(mDisplay, mScreen, &visual); |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7124
diff
changeset
|
272 } |
9278
caea8ed36b48
The reason why mplayer crashes (in some cases) when using x11
arpi
parents:
9115
diff
changeset
|
273 if ( !XMatchVisualInfo( mDisplay,mScreen,depth,DirectColor,&vinfo ) || |
10212
d358fa9a1068
warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
alex
parents:
10177
diff
changeset
|
274 (WinID > 0 && vinfo.visualid != XVisualIDFromVisual(attribs.visual))) |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
275 XMatchVisualInfo( mDisplay,mScreen,depth,TrueColor,&vinfo ); |
1746 | 276 |
4697 | 277 /* set image size (which is indeed neither the input nor output size), |
11000 | 278 if zoom is on it will be changed during draw_slice anyway so we don't duplicate the aspect code here |
4697 | 279 */ |
280 image_width=(width + 7) & (~7); | |
4677
305a0c20bde4
default is allways nozoom again (specify -zoom if u want the sane behavior)
michael
parents:
4662
diff
changeset
|
281 image_height=height; |
4661
4df2400b0527
-fs and or -vm default is nozoom, -zoom does the expected thing
michael
parents:
4658
diff
changeset
|
282 |
4641 | 283 aspect= ((1<<16)*d_width + d_height/2)/d_height; |
2218 | 284 |
1752 | 285 #ifdef HAVE_NEW_GUI |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
286 if(use_gui) guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
287 else |
1752 | 288 #endif |
1746 | 289 { |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
290 #ifdef HAVE_XF86VM |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
291 if ( vm ) |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
292 { |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
293 if ((d_width==0) && (d_height==0)) |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
294 { vm_width=image_width; vm_height=image_height; } |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
295 else |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
296 { vm_width=d_width; vm_height=d_height; } |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
297 vo_vm_switch(vm_width, vm_height,&modeline_width, &modeline_height); |
6045
a4705acc43e5
fix Nil's vo_x11 bug (Nilmoni Deb <ndeb@ece.cmu.edu>)
pontscho
parents:
6043
diff
changeset
|
298 vo_dx=(vo_screenwidth-modeline_width)/2; |
a4705acc43e5
fix Nil's vo_x11 bug (Nilmoni Deb <ndeb@ece.cmu.edu>)
pontscho
parents:
6043
diff
changeset
|
299 vo_dy=(vo_screenheight-modeline_height)/2; |
a4705acc43e5
fix Nil's vo_x11 bug (Nilmoni Deb <ndeb@ece.cmu.edu>)
pontscho
parents:
6043
diff
changeset
|
300 vo_dwidth=modeline_width; |
a4705acc43e5
fix Nil's vo_x11 bug (Nilmoni Deb <ndeb@ece.cmu.edu>)
pontscho
parents:
6043
diff
changeset
|
301 vo_dheight=modeline_height; |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
302 } |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
303 #endif |
1746 | 304 bg=WhitePixel( mDisplay,mScreen ); |
305 fg=BlackPixel( mDisplay,mScreen ); | |
1 | 306 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
307 theCmap=vo_x11_create_colormap(&vinfo); |
1 | 308 |
1746 | 309 xswa.background_pixel=0; |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
310 xswa.border_pixel=0; |
9278
caea8ed36b48
The reason why mplayer crashes (in some cases) when using x11
arpi
parents:
9115
diff
changeset
|
311 xswa.colormap=theCmap; |
caea8ed36b48
The reason why mplayer crashes (in some cases) when using x11
arpi
parents:
9115
diff
changeset
|
312 xswamask=CWBackPixel | CWBorderPixel | CWColormap; |
1 | 313 |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
314 #ifdef HAVE_XF86VM |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
315 if ( vm ) |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
316 { |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
317 xswa.override_redirect=True; |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
318 xswamask|=CWOverrideRedirect; |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
319 } |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
320 #endif |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
321 |
3830 | 322 if ( WinID>=0 ){ |
6043 | 323 vo_window = WinID ? ((Window)WinID) : mRootWin; |
324 if ( WinID ) | |
325 { | |
326 XUnmapWindow( mDisplay,vo_window ); | |
327 XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa ); | |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6858
diff
changeset
|
328 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); |
6693 | 329 XMapWindow( mDisplay,vo_window ); |
6043 | 330 } else XSelectInput( mDisplay,vo_window,ExposureMask ); |
3655 | 331 } |
332 else | |
6043 | 333 { |
7764 | 334 if ( vo_window == None ) |
335 { | |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
336 vo_window=vo_x11_create_smooth_window( mDisplay,mRootWin,vinfo.visual, vo_dx, vo_dy, vo_dwidth, vo_dheight, depth, theCmap ); |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
337 |
7764 | 338 vo_x11_classhint( mDisplay,vo_window,"x11" ); |
339 vo_hidecursor(mDisplay,vo_window); | |
340 vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 ); | |
341 XSelectInput( mDisplay,vo_window,StructureNotifyMask ); | |
342 XStoreName( mDisplay,vo_window,title ); | |
343 XMapWindow( mDisplay,vo_window ); | |
344 // if(WinID!=0) | |
345 do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != vo_window ); | |
346 | |
347 if ( fullscreen ) vo_x11_fullscreen(); | |
6043 | 348 #ifdef HAVE_XINERAMA |
7764 | 349 vo_x11_xinerama_move(mDisplay,vo_window); |
6043 | 350 #endif |
7764 | 351 } else if ( !fullscreen ) XMoveResizeWindow( mDisplay,vo_window,vo_dx,vo_dy,vo_dwidth,vo_dheight ); |
6043 | 352 } |
353 | |
1746 | 354 XFlush( mDisplay ); |
355 XSync( mDisplay,False ); | |
1 | 356 |
5822 | 357 // we cannot grab mouse events on root window :( |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6858
diff
changeset
|
358 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | ExposureMask | |
5822 | 359 ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)) ); |
4805 | 360 |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
361 #ifdef HAVE_XF86VM |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
362 if ( vm ) |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
363 { |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
364 /* Grab the mouse pointer in our window */ |
7539
56ea9db91251
-nograbpointer, based on old patch by Christian Ohm <chr.ohm@gmx.net>
arpi
parents:
7256
diff
changeset
|
365 if(vo_grabpointer) |
4804 | 366 XGrabPointer(mDisplay, vo_window, True, 0, |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
367 GrabModeAsync, GrabModeAsync, |
4804 | 368 vo_window, None, CurrentTime); |
369 XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime); | |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
370 } |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
371 #endif |
1746 | 372 } |
1 | 373 |
7765 | 374 if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc ); |
6043 | 375 vo_gc=XCreateGC( mDisplay,vo_window,0L,&xgcv ); |
7764 | 376 |
7765 | 377 if ( myximage ) |
378 { | |
379 freeMyXImage(); | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9278
diff
changeset
|
380 sws_freeContext(swsContext); |
7765 | 381 } |
6043 | 382 getMyXImage(); |
383 | |
384 if ( !WinID ) | |
385 { vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; } | |
1 | 386 |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
387 switch ((bpp=myximage->bits_per_pixel)){ |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
388 case 24: draw_alpha_fnc=draw_alpha_24; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
389 out_format= IMGFMT_BGR24; break; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
390 case 32: draw_alpha_fnc=draw_alpha_32; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
391 out_format= IMGFMT_BGR32; break; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
392 case 15: |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
393 case 16: if (depth==15){ |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
394 draw_alpha_fnc=draw_alpha_15; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
395 out_format= IMGFMT_BGR15; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
396 }else{ |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
397 draw_alpha_fnc=draw_alpha_16; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
398 out_format= IMGFMT_BGR16; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
399 }break; |
6692
ad521fb49a5e
-vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents:
6180
diff
changeset
|
400 case 8: draw_alpha_fnc=draw_alpha_null; |
ad521fb49a5e
-vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents:
6180
diff
changeset
|
401 out_format= IMGFMT_BGR8; break; |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
402 default: draw_alpha_fnc=draw_alpha_null; |
1 | 403 } |
404 | |
5368
fdb92215a1fc
Fix resizing when zoom is used and image size changes between frames.
atmos4
parents:
5248
diff
changeset
|
405 /* always allocate swsContext as size could change between frames */ |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9278
diff
changeset
|
406 swsContext= sws_getContextFromCmdLine(width, height, in_format, width, height, out_format ); |
10177
9cee07f898f7
swscaler doesn't recognizes support for BGR1/BGR4 too, and so if forced it crashes, without checking the swsContext
alex
parents:
10176
diff
changeset
|
407 if (!swsContext) |
9cee07f898f7
swscaler doesn't recognizes support for BGR1/BGR4 too, and so if forced it crashes, without checking the swsContext
alex
parents:
10176
diff
changeset
|
408 return -1; |
1 | 409 |
6694
9291268a3603
1000l, back out hack-n-slay 8bpp code from my local tree.
atmos4
parents:
6693
diff
changeset
|
410 //printf( "X11 bpp: %d color mask: R:%lX G:%lX B:%lX\n",bpp,myximage->red_mask,myximage->green_mask,myximage->blue_mask ); |
1 | 411 |
412 // If we have blue in the lowest bit then obviously RGB | |
413 mode=( ( myximage->blue_mask & 0x01 ) != 0 ) ? MODE_RGB : MODE_BGR; | |
414 #ifdef WORDS_BIGENDIAN | |
415 if ( myximage->byte_order != MSBFirst ) | |
416 #else | |
417 if ( myximage->byte_order != LSBFirst ) | |
418 #endif | |
419 { | |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
420 mode=( ( myximage->blue_mask & 0x01 ) != 0 ) ? MODE_BGR : MODE_RGB; |
4382 | 421 // printf( "No support for non-native XImage byte order!\n" ); |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
422 // return -1; |
1 | 423 } |
6694
9291268a3603
1000l, back out hack-n-slay 8bpp code from my local tree.
atmos4
parents:
6693
diff
changeset
|
424 |
5248
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
425 #ifdef WORDS_BIGENDIAN |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
426 if(mode==MODE_BGR && bpp!=32){ |
5935 | 427 mp_msg(MSGT_VO,MSGL_ERR,"BGR%d not supported, please contact the developers\n", bpp); |
4641 | 428 return -1; |
429 } | |
5248
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
430 #else |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
431 if(mode==MODE_BGR){ |
5935 | 432 mp_msg(MSGT_VO,MSGL_ERR,"BGR not supported, please contact the developers\n"); |
5248
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
433 return -1; |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
434 } |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
435 #endif |
1 | 436 |
4316 | 437 saver_off(mDisplay); |
11542 | 438 |
439 if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); | |
440 | |
1 | 441 return 0; |
442 } | |
443 | |
444 static void Display_Image( XImage *myximage,uint8_t *ImageData ) | |
445 { | |
3003 | 446 #ifdef HAVE_SHM |
1 | 447 if ( Shmem_Flag ) |
448 { | |
4804 | 449 XShmPutImage( mDisplay,vo_window,vo_gc,myximage, |
1 | 450 0,0, |
4641 | 451 ( vo_dwidth - swsContext->dstW ) / 2,( vo_dheight - myximage->height ) / 2, |
452 swsContext->dstW,myximage->height,True ); | |
1 | 453 } |
454 else | |
455 #endif | |
456 { | |
4804 | 457 XPutImage( mDisplay,vo_window,vo_gc,myximage, |
1 | 458 0,0, |
4641 | 459 ( vo_dwidth - swsContext->dstW ) / 2,( vo_dheight - myximage->height ) / 2, |
460 swsContext->dstW,myximage->height); | |
1 | 461 } |
462 } | |
463 | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1137
diff
changeset
|
464 static void draw_osd(void) |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
465 { vo_draw_text(image_width,image_height,draw_alpha_fnc); } |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1137
diff
changeset
|
466 |
31 | 467 static void flip_page( void ){ |
468 Display_Image( myximage,ImageData ); | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1137
diff
changeset
|
469 XSync(mDisplay, False); |
31 | 470 } |
1 | 471 |
472 static uint32_t draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y ) | |
473 { | |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
474 uint8_t *dst[3]; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
475 int dstStride[3]; |
6059 | 476 |
4734 | 477 if((old_vo_dwidth != vo_dwidth || old_vo_dheight != vo_dheight) /*&& y==0*/ && zoomFlag) |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
478 { |
4641 | 479 int newW= vo_dwidth; |
480 int newH= vo_dheight; | |
481 int newAspect= (newW*(1<<16) + (newH>>1))/newH; | |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
482 SwsContext *oldContext= swsContext; |
4340 | 483 |
4641 | 484 if(newAspect>aspect) newW= (newH*aspect + (1<<15))>>16; |
4662 | 485 else newH= ((newW<<16) + (aspect>>1)) /aspect; |
4641 | 486 |
487 old_vo_dwidth= vo_dwidth; | |
488 old_vo_dheight= vo_dheight; | |
489 | |
490 if(sws_flags==0) newW&= (~31); // not needed but, if the user wants the FAST_BILINEAR SCALER, then its needed | |
491 | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9278
diff
changeset
|
492 swsContext= sws_getContextFromCmdLine(srcW, srcH, in_format, |
4541 | 493 newW, newH, out_format); |
494 if(swsContext) | |
495 { | |
4627 | 496 image_width= (newW+7)&(~7); |
4541 | 497 image_height= newH; |
4627 | 498 |
4541 | 499 freeMyXImage(); |
500 getMyXImage(); | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9278
diff
changeset
|
501 sws_freeContext(oldContext); |
4541 | 502 } |
503 else | |
504 { | |
505 swsContext= oldContext; | |
506 } | |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
507 } |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
508 dstStride[1]= |
4641 | 509 dstStride[2]=0; |
4420
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
510 dst[1]= |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
511 dst[2]=NULL; |
a7bac05524a1
real window resizeing support (i know nearly nothing about x11 so feel free to fix / reverse it, if its broken)
michael
parents:
4382
diff
changeset
|
512 |
4641 | 513 if(Flip_Flag) |
514 { | |
515 dstStride[0]= -image_width*((bpp+7)/8); | |
516 dst[0]=ImageData - dstStride[0]*(image_height-1); | |
9697 | 517 sws_scale_ordered(swsContext,src,stride,y,h,dst, dstStride); |
4641 | 518 } |
519 else | |
520 { | |
521 dstStride[0]=image_width*((bpp+7)/8); | |
522 dst[0]=ImageData; | |
9697 | 523 sws_scale_ordered(swsContext,src,stride,y,h,dst, dstStride); |
4641 | 524 } |
525 return 0; | |
1 | 526 } |
527 | |
775
1cc160d46319
flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents:
767
diff
changeset
|
528 static uint32_t draw_frame( uint8_t *src[] ){ |
7683 | 529 #if 0 |
4512
f52e38e03bb7
YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents:
4443
diff
changeset
|
530 int stride[3]= {0,0,0}; |
4641 | 531 |
4726 | 532 if (in_format==IMGFMT_YUY2) stride[0]=srcW*2; |
6692
ad521fb49a5e
-vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents:
6180
diff
changeset
|
533 else if(in_format==IMGFMT_BGR8) stride[0]=srcW; |
4726 | 534 else if(in_format==IMGFMT_BGR15) stride[0]=srcW*2; |
535 else if(in_format==IMGFMT_BGR16) stride[0]=srcW*2; | |
536 else if(in_format==IMGFMT_BGR24) stride[0]=srcW*3; | |
537 else if(in_format==IMGFMT_BGR32) stride[0]=srcW*4; | |
4512
f52e38e03bb7
YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents:
4443
diff
changeset
|
538 |
4726 | 539 return draw_slice(src, stride, srcW, srcH, 0, 0); |
7683 | 540 #else |
541 printf("draw_frame() called!!!!!!\n"); | |
542 return -1; | |
543 #endif | |
544 } | |
545 | |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
546 static uint32_t get_image(mp_image_t *mpi) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
547 { |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
548 if (zoomFlag || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
549 !IMGFMT_IS_BGR(mpi->imgfmt) || |
5416 | 550 (IMGFMT_BGR_DEPTH(mpi->imgfmt) != vo_depthonscreen) || |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
551 ((mpi->type != MP_IMGTYPE_STATIC) && (mpi->type != MP_IMGTYPE_TEMP)) || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
552 (mpi->flags & MP_IMGFLAG_PLANAR) || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
553 (mpi->flags & MP_IMGFLAG_YUV) || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
554 (mpi->width != image_width) || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
555 (mpi->height != image_height) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
556 ) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
557 return(VO_FALSE); |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
558 |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
559 if (Flip_Flag) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
560 { |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
561 mpi->stride[0] = -image_width*((bpp+7)/8); |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
562 mpi->planes[0] = ImageData - mpi->stride[0]*(image_height-1); |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
563 } |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
564 else |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
565 { |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
566 mpi->stride[0] = image_width*((bpp+7)/8); |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
567 mpi->planes[0] = ImageData; |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
568 } |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
569 mpi->flags |= MP_IMGFLAG_DIRECT; |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
570 |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
571 return(VO_TRUE); |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
572 } |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
573 |
1 | 574 static uint32_t query_format( uint32_t format ) |
575 { | |
5935 | 576 mp_msg(MSGT_VO,MSGL_DBG2,"vo_x11: query_format was called: %x (%s)\n",format,vo_format_name(format)); |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
577 if (IMGFMT_IS_BGR(format)) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
578 { |
10177
9cee07f898f7
swscaler doesn't recognizes support for BGR1/BGR4 too, and so if forced it crashes, without checking the swsContext
alex
parents:
10176
diff
changeset
|
579 if (IMGFMT_BGR_DEPTH(format) <= 8) |
6694
9291268a3603
1000l, back out hack-n-slay 8bpp code from my local tree.
atmos4
parents:
6693
diff
changeset
|
580 return 0; // TODO 8bpp not yet fully implemented |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
581 if (IMGFMT_BGR_DEPTH(format) == vo_depthonscreen) |
7689
39e62d6592ca
since draw_slice() supports RGB/BGR, we don't need draw_image() for stride
arpi
parents:
7683
diff
changeset
|
582 return 3|VFCAP_OSD|VFCAP_SWSCALE|VFCAP_FLIP|VFCAP_ACCEPT_STRIDE; |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
583 else |
7689
39e62d6592ca
since draw_slice() supports RGB/BGR, we don't need draw_image() for stride
arpi
parents:
7683
diff
changeset
|
584 return 1|VFCAP_OSD|VFCAP_SWSCALE|VFCAP_FLIP|VFCAP_ACCEPT_STRIDE; |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
585 } |
325 | 586 |
1 | 587 switch( format ) |
324 | 588 { |
6692
ad521fb49a5e
-vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents:
6180
diff
changeset
|
589 // case IMGFMT_BGR8: |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
590 // case IMGFMT_BGR15: |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
591 // case IMGFMT_BGR16: |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
592 // case IMGFMT_BGR24: |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
593 // case IMGFMT_BGR32: |
6694
9291268a3603
1000l, back out hack-n-slay 8bpp code from my local tree.
atmos4
parents:
6693
diff
changeset
|
594 // return 0x2; |
4905
eb1a28f1236a
yuy2 support disabled to workaround stupid colorspace selection
michael
parents:
4889
diff
changeset
|
595 // case IMGFMT_YUY2: |
4340 | 596 case IMGFMT_I420: |
597 case IMGFMT_IYUV: | |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
598 case IMGFMT_YV12: |
7689
39e62d6592ca
since draw_slice() supports RGB/BGR, we don't need draw_image() for stride
arpi
parents:
7683
diff
changeset
|
599 return 1|VFCAP_OSD|VFCAP_SWSCALE|VFCAP_ACCEPT_STRIDE; |
324 | 600 } |
1 | 601 return 0; |
602 } | |
603 | |
604 | |
7683 | 605 static void uninit(void) |
1 | 606 { |
5414 | 607 if(!myximage) return; |
608 | |
4443
cf62fa252821
removed obsoleted Terminate_Display_Process, using freeMyXImage and vo_x11_uninit at exit
alex
parents:
4433
diff
changeset
|
609 freeMyXImage(); |
4316 | 610 saver_on(mDisplay); // screen saver back on |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
611 |
206
82b5ae8ceaf4
adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents:
202
diff
changeset
|
612 #ifdef HAVE_XF86VM |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
613 vo_vm_close(mDisplay); |
206
82b5ae8ceaf4
adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents:
202
diff
changeset
|
614 #endif |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
615 |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
616 zoomFlag=0; |
6095 | 617 vo_x11_uninit(); |
4677
305a0c20bde4
default is allways nozoom again (specify -zoom if u want the sane behavior)
michael
parents:
4662
diff
changeset
|
618 |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9278
diff
changeset
|
619 sws_freeContext(swsContext); |
1 | 620 } |
621 | |
4352 | 622 static uint32_t preinit(const char *arg) |
623 { | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4734
diff
changeset
|
624 if(arg) |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4734
diff
changeset
|
625 { |
5935 | 626 mp_msg(MSGT_VO,MSGL_ERR,"vo_x11: Unknown subdevice: %s\n",arg); |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4734
diff
changeset
|
627 return ENOSYS; |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4734
diff
changeset
|
628 } |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
629 |
7683 | 630 if( !vo_init() ) return -1; // Can't open X11 |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4734
diff
changeset
|
631 return 0; |
4352 | 632 } |
1 | 633 |
4596 | 634 static uint32_t control(uint32_t request, void *data, ...) |
4352 | 635 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
636 switch (request) { |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
637 case VOCTRL_PAUSE: return (int_pause=1); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
638 case VOCTRL_RESUME: return (int_pause=0); |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
639 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
640 return query_format(*((uint32_t*)data)); |
4734 | 641 case VOCTRL_GUISUPPORT: |
642 return VO_TRUE; | |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
643 case VOCTRL_GET_IMAGE: |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
644 return get_image(data); |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
645 case VOCTRL_SET_EQUALIZER: |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
646 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
647 va_list ap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
648 int value; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
649 va_start(ap, data); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
650 value = va_arg(ap, int); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
651 va_end(ap); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
652 return vo_x11_set_equalizer(data, value); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
653 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
654 case VOCTRL_GET_EQUALIZER: |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
655 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
656 va_list ap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
657 int *value; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
658 va_start(ap, data); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
659 value = va_arg(ap, int *); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
660 va_end(ap); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
661 return vo_x11_get_equalizer(data, value); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
662 } |
11542 | 663 case VOCTRL_ONTOP: |
664 vo_x11_ontop(); | |
665 return VO_TRUE; | |
4734 | 666 case VOCTRL_FULLSCREEN: |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
667 { |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
668 vo_x11_fullscreen(); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
669 vo_x11_clearwindow(mDisplay, vo_window); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10728
diff
changeset
|
670 } |
4790 | 671 return VO_TRUE; |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
672 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
673 return VO_NOTIMPL; |
4352 | 674 } |
6692
ad521fb49a5e
-vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents:
6180
diff
changeset
|
675 |