Mercurial > mplayer.hg
annotate libvo/vo_x11.c @ 9278:caea8ed36b48
The reason why mplayer crashes (in some cases) when using x11
output and -wid (>0) parameter is this:
Mplayer by default creates a colormap using DirectColor visual. If the
window given to mplayer uses TrueColor visual there will be an error
when mplayer sets the colormap for the window. This patch
modifies mplayer to use TrueColor visual if the window given to mplayer
uses TrueColor. Another solution is to make sure that the window given to
mplayer is created using DirectColor visual if it is supported by the
display.
Jouni Tulkki <jitulkki@cc.hut.fi>
author | arpi |
---|---|
date | Tue, 04 Feb 2003 18:31:44 +0000 |
parents | fc803aa85058 |
children | 543ab3909b78 |
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" |
2556 | 26 #include "../postproc/rgb2rgb.h" |
2218 | 27 |
4734 | 28 #include "../mp_msg.h" |
29 | |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
30 #ifdef HAVE_NEW_GUI |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
31 #include "../Gui/interface.h" |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
32 #include "../mplayer.h" |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
33 #endif |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
34 |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7964
diff
changeset
|
35 static vo_info_t info = |
1 | 36 { |
37 "X11 ( XImage/Shm )", | |
38 "x11", | |
39 "Aaron Holtzman <aholtzma@ess.engr.uvic.ca>", | |
40 "" | |
41 }; | |
42 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7964
diff
changeset
|
43 LIBVO_EXTERN( x11 ) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7964
diff
changeset
|
44 |
1 | 45 /* private prototypes */ |
46 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
|
47 static void (*draw_alpha_fnc)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride); |
1 | 48 |
49 /* local data */ | |
50 static unsigned char *ImageData; | |
51 | |
52 /* X11 related variables */ | |
7764 | 53 static XImage *myximage = NULL; |
1 | 54 static int depth,bpp,mode; |
55 static XWindowAttributes attribs; | |
56 | |
2969 | 57 static int Flip_Flag; |
4661
4df2400b0527
-fs and or -vm default is nozoom, -zoom does the expected thing
michael
parents:
4658
diff
changeset
|
58 static int zoomFlag; |
2969 | 59 |
3003 | 60 #ifdef HAVE_SHM |
1 | 61 #include <sys/ipc.h> |
62 #include <sys/shm.h> | |
63 #include <X11/extensions/XShm.h> | |
64 | |
65 static int Shmem_Flag; | |
5935 | 66 //static int Quiet_Flag; Here also what is this for. It's used but isn't inited ? |
1 | 67 static XShmSegmentInfo Shminfo[1]; |
68 static int gXErrorFlag; | |
69 static int CompletionType=-1; | |
70 | |
4813 | 71 /* since it doesn't seem to be defined on some platforms */ |
72 int XShmGetEventBase( Display* ); | |
1 | 73 #endif |
74 | |
75 static uint32_t image_width; | |
76 static uint32_t image_height; | |
4641 | 77 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
|
78 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
|
79 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
|
80 static int srcH=-1; |
4641 | 81 static int aspect; // 1<<16 based fixed point aspect, so that the aspect stays correct during resizing |
1 | 82 |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
83 static int old_vo_dwidth=-1; |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
84 static int old_vo_dheight=-1; |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
85 |
31 | 86 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
|
87 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
|
88 |
4eaa205201b0
clear the window if resized but no scaling used. Enable runtime fullscreen selectin when no zooming available
alex
parents:
4805
diff
changeset
|
89 /* clear the old window */ |
6059 | 90 if ( (ret & VO_EVENT_RESIZE)||(ret & VO_EVENT_EXPOSE) ) |
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 { |
4eaa205201b0
clear the window if resized but no scaling used. Enable runtime fullscreen selectin when no zooming available
alex
parents:
4805
diff
changeset
|
92 XSetBackground(mDisplay, vo_gc, 0); |
4eaa205201b0
clear the window if resized but no scaling used. Enable runtime fullscreen selectin when no zooming available
alex
parents:
4805
diff
changeset
|
93 XClearWindow(mDisplay, vo_window); |
4eaa205201b0
clear the window if resized but no scaling used. Enable runtime fullscreen selectin when no zooming available
alex
parents:
4805
diff
changeset
|
94 } |
1 | 95 } |
96 | |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
97 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
|
98 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
|
99 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
100 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
101 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
|
102 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
|
103 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
104 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
105 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
|
106 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
|
107 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
108 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
109 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
|
110 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
|
111 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
112 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
113 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
|
114 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
115 |
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
|
116 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
|
117 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
|
118 |
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
|
119 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
|
120 |
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
|
121 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
|
122 { |
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 #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
|
124 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
|
125 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
|
126 { |
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 Shmem_Flag=0; |
5935 | 128 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
|
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 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
|
131 |
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 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
|
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 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
|
135 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
|
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 ( myximage != NULL ) XDestroyImage( myximage ); |
5935 | 138 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
|
139 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
|
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 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
|
142 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
|
143 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
|
144 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
|
145 { |
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 XDestroyImage( myximage ); |
5935 | 147 mp_msg(MSGT_VO,MSGL_V, "%s\n",strerror( errno ) ); |
148 //perror( strerror( errno ) ); | |
149 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
|
150 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
|
151 } |
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 Shminfo[0].shmaddr=( char * ) shmat( Shminfo[0].shmid,0,0 ); |
3209 | 153 |
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
|
154 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
|
155 { |
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
|
156 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
|
157 if ( Shminfo[0].shmaddr != ( ( char * ) -1 ) ) shmdt( Shminfo[0].shmaddr ); |
5935 | 158 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
|
159 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
|
160 } |
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 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
|
162 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
|
163 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
|
164 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
|
165 |
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 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
|
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 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
|
169 { |
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 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
|
171 shmdt( Shminfo[0].shmaddr ); |
5935 | 172 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
|
173 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
|
174 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
|
175 } |
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 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
|
177 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
|
178 |
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
|
179 { |
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 static int firstTime=1; |
5935 | 181 if ( firstTime){ |
182 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
|
183 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
|
184 } |
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 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
|
188 { |
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
|
189 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
|
190 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
|
191 #endif |
4804 | 192 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
|
193 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
|
194 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
|
195 #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
|
196 } |
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 #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
|
198 } |
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
|
199 |
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 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
|
201 { |
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 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
|
204 { |
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 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
|
206 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
|
207 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
|
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 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
|
210 #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
|
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 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
|
213 } |
5414 | 214 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
|
215 } |
2218 | 216 |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6953
diff
changeset
|
217 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 | 218 { |
1110 | 219 // int screen; |
767
372042df5c77
Added support for flipped BGR/RGB via -flip cmdline switch.
atmosfear
parents:
616
diff
changeset
|
220 int fullscreen=0; |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
221 int vm=0; |
1110 | 222 // int interval, prefer_blank, allow_exp, nothing; |
1 | 223 unsigned int fg,bg; |
224 XEvent xev; | |
225 XGCValues xgcv; | |
226 Colormap theCmap; | |
227 XSetWindowAttributes xswa; | |
228 unsigned long xswamask; | |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
229 #ifdef HAVE_XF86VM |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
230 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
|
231 static uint32_t vm_width; |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
232 static uint32_t vm_height; |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
233 #endif |
1 | 234 |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
235 vo_mouse_autohide=1; |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
236 old_vo_dwidth=-1; |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
237 old_vo_dheight=-1; |
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
238 |
4813 | 239 if (!title) |
240 title = strdup("MPlayer X11 (XImage/Shm) render"); | |
241 | |
4641 | 242 in_format=format; |
5709 | 243 if(in_format==IMGFMT_I420 || in_format==IMGFMT_IYUV) in_format=IMGFMT_YV12; |
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
|
244 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
|
245 srcH= height; |
6043 | 246 vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; |
6858
21186a5514b4
initial window size (-xy) fixed - patch by Kazunori Ueno <jagarl@creator.club.ne.jp>
arpi
parents:
6704
diff
changeset
|
247 vo_dwidth=d_width; vo_dheight=d_height; |
4641 | 248 |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
249 if( flags&0x03 ) fullscreen = 1; |
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
250 if( flags&0x02 ) vm = 1; |
767
372042df5c77
Added support for flipped BGR/RGB via -flip cmdline switch.
atmosfear
parents:
616
diff
changeset
|
251 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
|
252 zoomFlag = flags&0x04; |
4677
305a0c20bde4
default is allways nozoom again (specify -zoom if u want the sane behavior)
michael
parents:
4662
diff
changeset
|
253 // if(!fullscreen) zoomFlag=1; //it makes no sense to avoid zooming on windowd mode |
2218 | 254 |
255 //printf( "w: %d h: %d\n\n",vo_dwidth,vo_dheight ); | |
1746 | 256 |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
257 XGetWindowAttributes( mDisplay,mRootWin,&attribs ); |
1746 | 258 depth=attribs.depth; |
259 | |
7256
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7124
diff
changeset
|
260 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
|
261 Visual *visual; |
ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
jkeil
parents:
7124
diff
changeset
|
262 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
|
263 } |
9278
caea8ed36b48
The reason why mplayer crashes (in some cases) when using x11
arpi
parents:
9115
diff
changeset
|
264 if ( !XMatchVisualInfo( mDisplay,mScreen,depth,DirectColor,&vinfo ) || |
caea8ed36b48
The reason why mplayer crashes (in some cases) when using x11
arpi
parents:
9115
diff
changeset
|
265 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
|
266 XMatchVisualInfo( mDisplay,mScreen,depth,TrueColor,&vinfo ); |
1746 | 267 |
4697 | 268 /* set image size (which is indeed neither the input nor output size), |
269 if zoom is on it will be changed during draw_slice anyway so we dont dupplicate the aspect code here | |
270 */ | |
271 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
|
272 image_height=height; |
4661
4df2400b0527
-fs and or -vm default is nozoom, -zoom does the expected thing
michael
parents:
4658
diff
changeset
|
273 |
4641 | 274 aspect= ((1<<16)*d_width + d_height/2)/d_height; |
2218 | 275 |
1752 | 276 #ifdef HAVE_NEW_GUI |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
277 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
|
278 else |
1752 | 279 #endif |
1746 | 280 { |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
281 #ifdef HAVE_XF86VM |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
282 if ( vm ) |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
283 { |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
284 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
|
285 { 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
|
286 else |
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
287 { 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
|
288 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
|
289 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
|
290 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
|
291 vo_dwidth=modeline_width; |
a4705acc43e5
fix Nil's vo_x11 bug (Nilmoni Deb <ndeb@ece.cmu.edu>)
pontscho
parents:
6043
diff
changeset
|
292 vo_dheight=modeline_height; |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
293 } |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
294 #endif |
1746 | 295 bg=WhitePixel( mDisplay,mScreen ); |
296 fg=BlackPixel( mDisplay,mScreen ); | |
1 | 297 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
298 theCmap=vo_x11_create_colormap(&vinfo); |
1 | 299 |
1746 | 300 xswa.background_pixel=0; |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
301 xswa.border_pixel=0; |
9278
caea8ed36b48
The reason why mplayer crashes (in some cases) when using x11
arpi
parents:
9115
diff
changeset
|
302 xswa.colormap=theCmap; |
caea8ed36b48
The reason why mplayer crashes (in some cases) when using x11
arpi
parents:
9115
diff
changeset
|
303 xswamask=CWBackPixel | CWBorderPixel | CWColormap; |
1 | 304 |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
305 #ifdef HAVE_XF86VM |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
306 if ( vm ) |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
307 { |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
308 xswa.override_redirect=True; |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
309 xswamask|=CWOverrideRedirect; |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
310 } |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
311 #endif |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
312 |
3830 | 313 if ( WinID>=0 ){ |
6043 | 314 vo_window = WinID ? ((Window)WinID) : mRootWin; |
315 if ( WinID ) | |
316 { | |
317 XUnmapWindow( mDisplay,vo_window ); | |
318 XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa ); | |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6858
diff
changeset
|
319 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); |
6693 | 320 XMapWindow( mDisplay,vo_window ); |
6043 | 321 } else XSelectInput( mDisplay,vo_window,ExposureMask ); |
3655 | 322 } |
323 else | |
6043 | 324 { |
7764 | 325 if ( vo_window == None ) |
326 { | |
327 vo_window=XCreateWindow( mDisplay,mRootWin, | |
6045
a4705acc43e5
fix Nil's vo_x11 bug (Nilmoni Deb <ndeb@ece.cmu.edu>)
pontscho
parents:
6043
diff
changeset
|
328 vo_dx,vo_dy, |
a4705acc43e5
fix Nil's vo_x11 bug (Nilmoni Deb <ndeb@ece.cmu.edu>)
pontscho
parents:
6043
diff
changeset
|
329 vo_dwidth,vo_dheight, |
1 | 330 xswa.border_pixel,depth,CopyFromParent,vinfo.visual,xswamask,&xswa ); |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
331 |
7764 | 332 vo_x11_classhint( mDisplay,vo_window,"x11" ); |
333 vo_hidecursor(mDisplay,vo_window); | |
334 vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 ); | |
335 XSelectInput( mDisplay,vo_window,StructureNotifyMask ); | |
336 XStoreName( mDisplay,vo_window,title ); | |
337 XMapWindow( mDisplay,vo_window ); | |
338 // if(WinID!=0) | |
339 do { XNextEvent( mDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != vo_window ); | |
340 | |
341 if ( fullscreen ) vo_x11_fullscreen(); | |
6043 | 342 #ifdef HAVE_XINERAMA |
7764 | 343 vo_x11_xinerama_move(mDisplay,vo_window); |
6043 | 344 #endif |
7764 | 345 } else if ( !fullscreen ) XMoveResizeWindow( mDisplay,vo_window,vo_dx,vo_dy,vo_dwidth,vo_dheight ); |
6043 | 346 } |
347 | |
1746 | 348 XFlush( mDisplay ); |
349 XSync( mDisplay,False ); | |
1 | 350 |
5822 | 351 // 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
|
352 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | ExposureMask | |
5822 | 353 ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)) ); |
4805 | 354 |
2094
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
355 #ifdef HAVE_XF86VM |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
356 if ( vm ) |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
357 { |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
358 /* 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
|
359 if(vo_grabpointer) |
4804 | 360 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
|
361 GrabModeAsync, GrabModeAsync, |
4804 | 362 vo_window, None, CurrentTime); |
363 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
|
364 } |
dc11de07b5e7
grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents:
1924
diff
changeset
|
365 #endif |
1746 | 366 } |
1 | 367 |
7765 | 368 if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc ); |
6043 | 369 vo_gc=XCreateGC( mDisplay,vo_window,0L,&xgcv ); |
7764 | 370 |
7765 | 371 if ( myximage ) |
372 { | |
373 freeMyXImage(); | |
374 freeSwsContext(swsContext); | |
375 } | |
6043 | 376 getMyXImage(); |
377 | |
378 if ( !WinID ) | |
379 { vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; } | |
1 | 380 |
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
|
381 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
|
382 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
|
383 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
|
384 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
|
385 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
|
386 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
|
387 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
|
388 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
|
389 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
|
390 }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
|
391 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
|
392 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
|
393 }break; |
6692
ad521fb49a5e
-vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents:
6180
diff
changeset
|
394 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
|
395 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
|
396 default: draw_alpha_fnc=draw_alpha_null; |
1 | 397 } |
398 | |
5368
fdb92215a1fc
Fix resizing when zoom is used and image size changes between frames.
atmos4
parents:
5248
diff
changeset
|
399 /* always allocate swsContext as size could change between frames */ |
fdb92215a1fc
Fix resizing when zoom is used and image size changes between frames.
atmos4
parents:
5248
diff
changeset
|
400 swsContext= getSwsContextFromCmdLine(width, height, in_format, width, height, out_format ); |
1 | 401 |
6694
9291268a3603
1000l, back out hack-n-slay 8bpp code from my local tree.
atmos4
parents:
6693
diff
changeset
|
402 //printf( "X11 bpp: %d color mask: R:%lX G:%lX B:%lX\n",bpp,myximage->red_mask,myximage->green_mask,myximage->blue_mask ); |
1 | 403 |
404 // If we have blue in the lowest bit then obviously RGB | |
405 mode=( ( myximage->blue_mask & 0x01 ) != 0 ) ? MODE_RGB : MODE_BGR; | |
406 #ifdef WORDS_BIGENDIAN | |
407 if ( myximage->byte_order != MSBFirst ) | |
408 #else | |
409 if ( myximage->byte_order != LSBFirst ) | |
410 #endif | |
411 { | |
1137
4c7b219e126c
patch: some X11 compliance fixed: set ClassHint and better fullscreen mode
arpi_esp
parents:
1110
diff
changeset
|
412 mode=( ( myximage->blue_mask & 0x01 ) != 0 ) ? MODE_BGR : MODE_RGB; |
4382 | 413 // 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
|
414 // return -1; |
1 | 415 } |
6694
9291268a3603
1000l, back out hack-n-slay 8bpp code from my local tree.
atmos4
parents:
6693
diff
changeset
|
416 |
5248
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
417 #ifdef WORDS_BIGENDIAN |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
418 if(mode==MODE_BGR && bpp!=32){ |
5935 | 419 mp_msg(MSGT_VO,MSGL_ERR,"BGR%d not supported, please contact the developers\n", bpp); |
4641 | 420 return -1; |
421 } | |
5248
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
422 if(mode==MODE_RGB && bpp==32){ |
5935 | 423 mp_msg(MSGT_VO,MSGL_ERR,"RGB32 not supported on big-endian systems, please contact the developers\n"); |
5248
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
424 return -1; |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
425 } |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
426 #else |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
427 if(mode==MODE_BGR){ |
5935 | 428 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
|
429 return -1; |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
430 } |
f23cea00d19c
print meaningfull error message instead of "hmm, arpi said that isnt used...
michael
parents:
5163
diff
changeset
|
431 #endif |
1 | 432 |
4316 | 433 saver_off(mDisplay); |
1 | 434 return 0; |
435 } | |
436 | |
437 static void Display_Image( XImage *myximage,uint8_t *ImageData ) | |
438 { | |
3003 | 439 #ifdef HAVE_SHM |
1 | 440 if ( Shmem_Flag ) |
441 { | |
4804 | 442 XShmPutImage( mDisplay,vo_window,vo_gc,myximage, |
1 | 443 0,0, |
4641 | 444 ( vo_dwidth - swsContext->dstW ) / 2,( vo_dheight - myximage->height ) / 2, |
445 swsContext->dstW,myximage->height,True ); | |
1 | 446 } |
447 else | |
448 #endif | |
449 { | |
4804 | 450 XPutImage( mDisplay,vo_window,vo_gc,myximage, |
1 | 451 0,0, |
4641 | 452 ( vo_dwidth - swsContext->dstW ) / 2,( vo_dheight - myximage->height ) / 2, |
453 swsContext->dstW,myximage->height); | |
1 | 454 } |
455 } | |
456 | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1137
diff
changeset
|
457 static void draw_osd(void) |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
458 { 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
|
459 |
31 | 460 static void flip_page( void ){ |
461 Display_Image( myximage,ImageData ); | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1137
diff
changeset
|
462 XSync(mDisplay, False); |
31 | 463 } |
1 | 464 |
465 static uint32_t draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y ) | |
466 { | |
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
|
467 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
|
468 int dstStride[3]; |
6059 | 469 |
4734 | 470 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
|
471 { |
4641 | 472 int newW= vo_dwidth; |
473 int newH= vo_dheight; | |
474 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
|
475 SwsContext *oldContext= swsContext; |
4340 | 476 |
4641 | 477 if(newAspect>aspect) newW= (newH*aspect + (1<<15))>>16; |
4662 | 478 else newH= ((newW<<16) + (aspect>>1)) /aspect; |
4641 | 479 |
480 old_vo_dwidth= vo_dwidth; | |
481 old_vo_dheight= vo_dheight; | |
482 | |
483 if(sws_flags==0) newW&= (~31); // not needed but, if the user wants the FAST_BILINEAR SCALER, then its needed | |
484 | |
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
|
485 swsContext= getSwsContextFromCmdLine(srcW, srcH, in_format, |
4541 | 486 newW, newH, out_format); |
487 if(swsContext) | |
488 { | |
4627 | 489 image_width= (newW+7)&(~7); |
4541 | 490 image_height= newH; |
4627 | 491 |
4541 | 492 freeMyXImage(); |
493 getMyXImage(); | |
494 freeSwsContext(oldContext); | |
495 } | |
496 else | |
497 { | |
498 swsContext= oldContext; | |
499 } | |
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
|
500 } |
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
|
501 dstStride[1]= |
4641 | 502 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
|
503 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
|
504 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
|
505 |
4641 | 506 if(Flip_Flag) |
507 { | |
508 dstStride[0]= -image_width*((bpp+7)/8); | |
509 dst[0]=ImageData - dstStride[0]*(image_height-1); | |
510 swsContext->swScale(swsContext,src,stride,y,h,dst, dstStride); | |
511 } | |
512 else | |
513 { | |
514 dstStride[0]=image_width*((bpp+7)/8); | |
515 dst[0]=ImageData; | |
516 swsContext->swScale(swsContext,src,stride,y,h,dst, dstStride); | |
517 } | |
518 return 0; | |
1 | 519 } |
520 | |
775
1cc160d46319
flip implemented for converted modes, soem cleanup, fixed indent
arpi_esp
parents:
767
diff
changeset
|
521 static uint32_t draw_frame( uint8_t *src[] ){ |
7683 | 522 #if 0 |
4512
f52e38e03bb7
YUY2 BGR32 BGR24 support for vo_x11 if swScaler is used
michael
parents:
4443
diff
changeset
|
523 int stride[3]= {0,0,0}; |
4641 | 524 |
4726 | 525 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
|
526 else if(in_format==IMGFMT_BGR8) stride[0]=srcW; |
4726 | 527 else if(in_format==IMGFMT_BGR15) stride[0]=srcW*2; |
528 else if(in_format==IMGFMT_BGR16) stride[0]=srcW*2; | |
529 else if(in_format==IMGFMT_BGR24) stride[0]=srcW*3; | |
530 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
|
531 |
4726 | 532 return draw_slice(src, stride, srcW, srcH, 0, 0); |
7683 | 533 #else |
534 printf("draw_frame() called!!!!!!\n"); | |
535 return -1; | |
536 #endif | |
537 } | |
538 | |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
539 static uint32_t get_image(mp_image_t *mpi) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
540 { |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
541 if (zoomFlag || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
542 !IMGFMT_IS_BGR(mpi->imgfmt) || |
5416 | 543 (IMGFMT_BGR_DEPTH(mpi->imgfmt) != vo_depthonscreen) || |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
544 ((mpi->type != MP_IMGTYPE_STATIC) && (mpi->type != MP_IMGTYPE_TEMP)) || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
545 (mpi->flags & MP_IMGFLAG_PLANAR) || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
546 (mpi->flags & MP_IMGFLAG_YUV) || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
547 (mpi->width != image_width) || |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
548 (mpi->height != image_height) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
549 ) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
550 return(VO_FALSE); |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
551 |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
552 if (Flip_Flag) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
553 { |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
554 mpi->stride[0] = -image_width*((bpp+7)/8); |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
555 mpi->planes[0] = ImageData - mpi->stride[0]*(image_height-1); |
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 else |
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 mpi->stride[0] = image_width*((bpp+7)/8); |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
560 mpi->planes[0] = ImageData; |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
561 } |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
562 mpi->flags |= MP_IMGFLAG_DIRECT; |
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 return(VO_TRUE); |
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 |
1 | 567 static uint32_t query_format( uint32_t format ) |
568 { | |
5935 | 569 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
|
570 if (IMGFMT_IS_BGR(format)) |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
571 { |
6080 | 572 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
|
573 return 0; // TODO 8bpp not yet fully implemented |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
574 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
|
575 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
|
576 else |
7689
39e62d6592ca
since draw_slice() supports RGB/BGR, we don't need draw_image() for stride
arpi
parents:
7683
diff
changeset
|
577 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
|
578 } |
325 | 579 |
1 | 580 switch( format ) |
324 | 581 { |
6692
ad521fb49a5e
-vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents:
6180
diff
changeset
|
582 // case IMGFMT_BGR8: |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
583 // case IMGFMT_BGR15: |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
584 // case IMGFMT_BGR16: |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
585 // case IMGFMT_BGR24: |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
586 // case IMGFMT_BGR32: |
6694
9291268a3603
1000l, back out hack-n-slay 8bpp code from my local tree.
atmos4
parents:
6693
diff
changeset
|
587 // return 0x2; |
4905
eb1a28f1236a
yuy2 support disabled to workaround stupid colorspace selection
michael
parents:
4889
diff
changeset
|
588 // case IMGFMT_YUY2: |
4340 | 589 case IMGFMT_I420: |
590 case IMGFMT_IYUV: | |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
591 case IMGFMT_YV12: |
7689
39e62d6592ca
since draw_slice() supports RGB/BGR, we don't need draw_image() for stride
arpi
parents:
7683
diff
changeset
|
592 return 1|VFCAP_OSD|VFCAP_SWSCALE|VFCAP_ACCEPT_STRIDE; |
324 | 593 } |
1 | 594 return 0; |
595 } | |
596 | |
597 | |
7683 | 598 static void uninit(void) |
1 | 599 { |
5414 | 600 if(!myximage) return; |
601 | |
4443
cf62fa252821
removed obsoleted Terminate_Display_Process, using freeMyXImage and vo_x11_uninit at exit
alex
parents:
4433
diff
changeset
|
602 freeMyXImage(); |
4316 | 603 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
|
604 |
206
82b5ae8ceaf4
adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents:
202
diff
changeset
|
605 #ifdef HAVE_XF86VM |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
606 vo_vm_close(mDisplay); |
206
82b5ae8ceaf4
adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents:
202
diff
changeset
|
607 #endif |
4426
1ceadec3ea67
using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents:
4420
diff
changeset
|
608 |
6013
7f6e02a16ac4
some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents:
5999
diff
changeset
|
609 zoomFlag=0; |
6095 | 610 vo_x11_uninit(); |
4677
305a0c20bde4
default is allways nozoom again (specify -zoom if u want the sane behavior)
michael
parents:
4662
diff
changeset
|
611 |
305a0c20bde4
default is allways nozoom again (specify -zoom if u want the sane behavior)
michael
parents:
4662
diff
changeset
|
612 freeSwsContext(swsContext); |
1 | 613 } |
614 | |
4352 | 615 static uint32_t preinit(const char *arg) |
616 { | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4734
diff
changeset
|
617 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
|
618 { |
5935 | 619 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
|
620 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
|
621 } |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
622 |
7683 | 623 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
|
624 return 0; |
4352 | 625 } |
1 | 626 |
4596 | 627 static uint32_t control(uint32_t request, void *data, ...) |
4352 | 628 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
629 switch (request) { |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
630 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
631 return query_format(*((uint32_t*)data)); |
4734 | 632 case VOCTRL_GUISUPPORT: |
633 return VO_TRUE; | |
5130
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
634 case VOCTRL_GET_IMAGE: |
305b1fbde890
added directrendering support and better query_format
alex
parents:
4993
diff
changeset
|
635 return get_image(data); |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
636 case VOCTRL_SET_EQUALIZER: |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
637 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
638 va_list ap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
639 int value; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
640 va_start(ap, data); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
641 value = va_arg(ap, int); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
642 va_end(ap); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
643 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
|
644 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
645 case VOCTRL_GET_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_get_equalizer(data, value); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7765
diff
changeset
|
653 } |
4734 | 654 case VOCTRL_FULLSCREEN: |
4993 | 655 vo_x11_fullscreen(); |
4790 | 656 return VO_TRUE; |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
657 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4554
diff
changeset
|
658 return VO_NOTIMPL; |
4352 | 659 } |
6692
ad521fb49a5e
-vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents:
6180
diff
changeset
|
660 |