annotate libvo/vo_x11.c @ 22498:b6b1bd155b58

Allow demuxers to return packets with no pts in -correct-pts mode as long as there are enough pts values for frames that the decoder returns. This should allow passing NAL units individually.
author uau
date Sun, 11 Mar 2007 17:30:44 +0000
parents d0b60d14d8d7
children 71b3e04d0555
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 #include <signal.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 #include "config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 #include "video_out.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 #include "video_out_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 #include <X11/Xlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 #include <X11/Xutil.h>
4036
76ea6f97ebb7 added rgb24to32 instead of c converter
alex
parents: 4017
diff changeset
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
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 #include <errno.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
20 #include "x11_common.h"
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
21
11690
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
22 #ifdef HAVE_SHM
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
23 #include <sys/ipc.h>
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
24 #include <sys/shm.h>
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
25 #include <X11/extensions/XShm.h>
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
26
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
27 static int Shmem_Flag;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
28
11690
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
29 //static int Quiet_Flag; Here also what is this for. It's used but isn't inited ?
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
30 static XShmSegmentInfo Shminfo[1];
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
31 static int gXErrorFlag;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
32 static int CompletionType = -1;
11690
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
33
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
34 /* since it doesn't seem to be defined on some platforms */
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
35 int XShmGetEventBase(Display *);
11690
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
36 #endif
860bc06f32ca just the same include reordering as in vo_xv (codemetics :)
alex
parents: 11542
diff changeset
37
354
7de9e48c83a5 memcpy() moved mmx.h -> fastmemcpy.h
arpi_esp
parents: 350
diff changeset
38 #include "fastmemcpy.h"
616
41d6eec69b60 clean up
pontscho
parents: 614
diff changeset
39 #include "sub.h"
350
601822cc8c52 applied MMX2 memcpy() patch by Nick Kurshev
arpi_esp
parents: 326
diff changeset
40
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents: 18746
diff changeset
41 #include "libswscale/swscale.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13056
diff changeset
42 #include "libmpcodecs/vf_scale.h"
18746
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
43 #define MODE_RGB 0x1
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
44 #define MODE_BGR 0x2
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
45
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13056
diff changeset
46 #include "mp_msg.h"
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 18116
diff changeset
47 #include "help_mp.h"
4734
cc375edb5eda added support for runtime fullscreen switching
alex
parents: 4726
diff changeset
48
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 5999
diff changeset
49 #ifdef HAVE_NEW_GUI
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13056
diff changeset
50 #include "Gui/interface.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13056
diff changeset
51 #include "mplayer.h"
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 5999
diff changeset
52 #endif
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 5999
diff changeset
53
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
54 static vo_info_t info = {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
55 "X11 ( XImage/Shm )",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
56 "x11",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
57 "Aaron Holtzman <aholtzma@ess.engr.uvic.ca>",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
58 ""
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
61 LIBVO_EXTERN(x11)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 /* private prototypes */
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
63 static void Display_Image(XImage * myximage, unsigned char *ImageData);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
64 static void (*draw_alpha_fnc) (int x0, int y0, int w, int h,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
65 unsigned char *src, unsigned char *srca,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
66 int stride);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 /* local data */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 static unsigned char *ImageData;
21585
e54f539c9b5d Align image data pointer, this is also in preparation of an upcoming patch
reimar
parents: 21584
diff changeset
70 //! original unaligned pointer for free
e54f539c9b5d Align image data pointer, this is also in preparation of an upcoming patch
reimar
parents: 21584
diff changeset
71 static unsigned char *ImageDataOrig;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 /* X11 related variables */
7764
13c36b2d1d45 -fixed-vo support
pontscho
parents: 7689
diff changeset
74 static XImage *myximage = NULL;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
75 static int depth, bpp, mode;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 static XWindowAttributes attribs;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10728
diff changeset
78 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
79
2969
291f45785de9 fix to compile when SHM is disabled
alex
parents: 2732
diff changeset
80 static int Flip_Flag;
4661
4df2400b0527 -fs and or -vm default is nozoom, -zoom does the expected thing
michael
parents: 4658
diff changeset
81 static int zoomFlag;
2969
291f45785de9 fix to compile when SHM is disabled
alex
parents: 2732
diff changeset
82
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 static uint32_t image_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 static uint32_t image_height;
4641
b7f340349470 allways use swScaler
michael
parents: 4627
diff changeset
86 static uint32_t in_format;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
87 static uint32_t out_format = 0;
21586
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
88 static int out_offset;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
89 static int srcW = -1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
90 static int srcH = -1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
91 static int aspect; // 1<<16 based fixed point aspect, so that the aspect stays correct during resizing
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
93 static int old_vo_dwidth = -1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
94 static int old_vo_dheight = -1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
95
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
96 static void check_events()
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
97 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
98 int ret = vo_x11_check_events(mDisplay);
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 5999
diff changeset
99
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
100 /* clear left over borders and redraw frame if we are paused */
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
101 if (ret & VO_EVENT_EXPOSE && int_pause)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
102 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
103 vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
104 myximage->height, 0);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
105 flip_page();
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
106 } else if ((ret & VO_EVENT_RESIZE) || (ret & VO_EVENT_EXPOSE))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
107 vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
108 myximage->height, 0);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
109
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
110 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
111
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
112 static void draw_alpha_32(int x0, int y0, int w, int h, unsigned char *src,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
113 unsigned char *srca, int stride)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
114 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
115 vo_draw_alpha_rgb32(w, h, src, srca, stride,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
116 ImageData + 4 * (y0 * image_width + x0),
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
117 4 * image_width);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
119
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
120 static void draw_alpha_24(int x0, int y0, int w, int h, unsigned char *src,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
121 unsigned char *srca, int stride)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
122 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
123 vo_draw_alpha_rgb24(w, h, src, srca, stride,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
124 ImageData + 3 * (y0 * image_width + x0),
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
125 3 * image_width);
1647
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
126 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
127
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
128 static void draw_alpha_16(int x0, int y0, int w, int h, unsigned char *src,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
129 unsigned char *srca, int stride)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
130 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
131 vo_draw_alpha_rgb16(w, h, src, srca, stride,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
132 ImageData + 2 * (y0 * image_width + x0),
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
133 2 * image_width);
1647
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
134 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
135
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
136 static void draw_alpha_15(int x0, int y0, int w, int h, unsigned char *src,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
137 unsigned char *srca, int stride)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
138 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
139 vo_draw_alpha_rgb15(w, h, src, srca, stride,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
140 ImageData + 2 * (y0 * image_width + x0),
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
141 2 * image_width);
1647
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
142 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
143
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
144 static void draw_alpha_null(int x0, int y0, int w, int h,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
145 unsigned char *src, unsigned char *srca,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
146 int stride)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
147 {
1647
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
148 }
22480104ddfd added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents: 1501
diff changeset
149
18746
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
150 static struct SwsContext *swsContext = NULL;
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
151 static int dst_width;
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
152 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
153
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 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
155
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 16171
diff changeset
156 static void getMyXImage(void)
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 {
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 #ifdef HAVE_SHM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
159 if (mLocalDisplay && XShmQueryExtension(mDisplay))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
160 Shmem_Flag = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
161 else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
162 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
163 Shmem_Flag = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
164 mp_msg(MSGT_VO, MSGL_WARN,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
165 "Shared memory not supported\nReverting to normal Xlib\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
166 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
167 if (Shmem_Flag)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
168 CompletionType = XShmGetEventBase(mDisplay) + ShmCompletion;
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
169
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
170 if (Shmem_Flag)
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
171 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
172 myximage =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
173 XShmCreateImage(mDisplay, vinfo.visual, depth, ZPixmap, NULL,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
174 &Shminfo[0], image_width, image_height);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
175 if (myximage == NULL)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
176 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
177 mp_msg(MSGT_VO, MSGL_WARN,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
178 "Shared memory error,disabling ( Ximage error )\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
179 goto shmemerror;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
180 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
181 Shminfo[0].shmid = shmget(IPC_PRIVATE,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
182 myximage->bytes_per_line *
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
183 myximage->height, IPC_CREAT | 0777);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
184 if (Shminfo[0].shmid < 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
185 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
186 XDestroyImage(myximage);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
187 mp_msg(MSGT_VO, MSGL_V, "%s\n", strerror(errno));
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
188 //perror( strerror( errno ) );
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
189 mp_msg(MSGT_VO, MSGL_WARN,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
190 "Shared memory error,disabling ( seg id error )\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
191 goto shmemerror;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
192 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
193 Shminfo[0].shmaddr = (char *) shmat(Shminfo[0].shmid, 0, 0);
3209
0b172eb639f1 swscaler cleanup
michael
parents: 3003
diff changeset
194
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
195 if (Shminfo[0].shmaddr == ((char *) -1))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
196 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
197 XDestroyImage(myximage);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
198 if (Shminfo[0].shmaddr != ((char *) -1))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
199 shmdt(Shminfo[0].shmaddr);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
200 mp_msg(MSGT_VO, MSGL_WARN,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
201 "Shared memory error,disabling ( address error )\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
202 goto shmemerror;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
203 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
204 myximage->data = Shminfo[0].shmaddr;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
205 ImageData = (unsigned char *) myximage->data;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
206 Shminfo[0].readOnly = False;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
207 XShmAttach(mDisplay, &Shminfo[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
208
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
209 XSync(mDisplay, False);
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
210
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
211 if (gXErrorFlag)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
212 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
213 XDestroyImage(myximage);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
214 shmdt(Shminfo[0].shmaddr);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
215 mp_msg(MSGT_VO, MSGL_WARN, "Shared memory error,disabling.\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
216 gXErrorFlag = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
217 goto shmemerror;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
218 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
219 shmctl(Shminfo[0].shmid, IPC_RMID, 0);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
220
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
221 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
222 static int firstTime = 1;
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
223
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
224 if (firstTime)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
225 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
226 mp_msg(MSGT_VO, MSGL_V, "Sharing memory.\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
227 firstTime = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
228 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
229 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
230 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
231 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
232 shmemerror:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
233 Shmem_Flag = 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
234 #endif
21584
3ddf91e141a3 Use XCreateImage instead of XGetImage, this is not only more correct and
reimar
parents: 20399
diff changeset
235 myximage = XCreateImage(mDisplay, vinfo.visual, depth, ZPixmap,
3ddf91e141a3 Use XCreateImage instead of XGetImage, this is not only more correct and
reimar
parents: 20399
diff changeset
236 0, NULL, image_width, image_height, 8, 0);
21585
e54f539c9b5d Align image data pointer, this is also in preparation of an upcoming patch
reimar
parents: 21584
diff changeset
237 ImageDataOrig = malloc(myximage->bytes_per_line * image_height + 32);
e54f539c9b5d Align image data pointer, this is also in preparation of an upcoming patch
reimar
parents: 21584
diff changeset
238 myximage->data = ImageDataOrig + 16 - ((long)ImageDataOrig & 15);
21584
3ddf91e141a3 Use XCreateImage instead of XGetImage, this is not only more correct and
reimar
parents: 20399
diff changeset
239 memset(myximage->data, 0, myximage->bytes_per_line * image_height);
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
240 ImageData = myximage->data;
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
241 #ifdef HAVE_SHM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
242 }
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
243 #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
244 }
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
245
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 16171
diff changeset
246 static void freeMyXImage(void)
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
247 {
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
248 #ifdef HAVE_SHM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
249 if (Shmem_Flag)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
250 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
251 XShmDetach(mDisplay, &Shminfo[0]);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
252 XDestroyImage(myximage);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
253 shmdt(Shminfo[0].shmaddr);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
254 } else
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
255 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
256 {
21585
e54f539c9b5d Align image data pointer, this is also in preparation of an upcoming patch
reimar
parents: 21584
diff changeset
257 myximage->data = ImageDataOrig;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
258 XDestroyImage(myximage);
21585
e54f539c9b5d Align image data pointer, this is also in preparation of an upcoming patch
reimar
parents: 21584
diff changeset
259 ImageDataOrig = NULL;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
260 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
261 myximage = NULL;
21584
3ddf91e141a3 Use XCreateImage instead of XGetImage, this is not only more correct and
reimar
parents: 20399
diff changeset
262 ImageData = 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
263 }
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
264
20399
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
265 #ifdef WORDS_BIGENDIAN
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
266 #define BO_NATIVE MSBFirst
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
267 #define BO_NONNATIVE LSBFirst
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
268 #else
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
269 #define BO_NATIVE LSBFirst
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
270 #define BO_NONNATIVE MSBFirst
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
271 #endif
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
272 struct fmt2Xfmtentry_s {
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
273 uint32_t mpfmt;
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
274 int byte_order;
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
275 unsigned red_mask;
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
276 unsigned green_mask;
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
277 unsigned blue_mask;
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
278 } fmt2Xfmt[] = {
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
279 {IMGFMT_RGB8, BO_NATIVE, 0x00000007, 0x00000038, 0x000000C0},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
280 {IMGFMT_RGB8, BO_NONNATIVE, 0x00000007, 0x00000038, 0x000000C0},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
281 {IMGFMT_BGR8, BO_NATIVE, 0x000000E0, 0x0000001C, 0x00000003},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
282 {IMGFMT_BGR8, BO_NONNATIVE, 0x000000E0, 0x0000001C, 0x00000003},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
283 {IMGFMT_RGB15, BO_NATIVE, 0x0000001F, 0x000003E0, 0x00007C00},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
284 {IMGFMT_BGR15, BO_NATIVE, 0x00007C00, 0x000003E0, 0x0000001F},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
285 {IMGFMT_RGB16, BO_NATIVE, 0x0000001F, 0x000007E0, 0x0000F800},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
286 {IMGFMT_BGR16, BO_NATIVE, 0x0000F800, 0x000007E0, 0x0000001F},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
287 {IMGFMT_RGB24, MSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
288 {IMGFMT_RGB24, LSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
289 {IMGFMT_BGR24, MSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
290 {IMGFMT_BGR24, LSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
291 {IMGFMT_RGB32, BO_NATIVE, 0x000000FF, 0x0000FF00, 0x00FF0000},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
292 {IMGFMT_RGB32, BO_NONNATIVE, 0xFF000000, 0x00FF0000, 0x0000FF00},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
293 {IMGFMT_BGR32, BO_NATIVE, 0x00FF0000, 0x0000FF00, 0x000000FF},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
294 {IMGFMT_BGR32, BO_NONNATIVE, 0x0000FF00, 0x00FF0000, 0xFF000000},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
295 {IMGFMT_ARGB, MSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
296 {IMGFMT_ARGB, LSBFirst, 0x0000FF00, 0x00FF0000, 0xFF000000},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
297 {IMGFMT_ABGR, MSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
298 {IMGFMT_ABGR, LSBFirst, 0xFF000000, 0x00FF0000, 0x0000FF00},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
299 {IMGFMT_RGBA, MSBFirst, 0xFF000000, 0x00FF0000, 0x0000FF00},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
300 {IMGFMT_RGBA, LSBFirst, 0x000000FF, 0x0000FF00, 0x00FF0000},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
301 {IMGFMT_BGRA, MSBFirst, 0x0000FF00, 0x00FF0000, 0xFF000000},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
302 {IMGFMT_BGRA, LSBFirst, 0x00FF0000, 0x0000FF00, 0x000000FF},
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
303 {0, 0, 0, 0, 0}
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
304 };
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
305
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
306 static int config(uint32_t width, uint32_t height, uint32_t d_width,
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
307 uint32_t d_height, uint32_t flags, char *title,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
308 uint32_t format)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 {
1110
71b8911ec3da -Wall like cleanup
al3x
parents: 922
diff changeset
310 // int screen;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
311 int fullscreen = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
312 int vm = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
313
1110
71b8911ec3da -Wall like cleanup
al3x
parents: 922
diff changeset
314 // int interval, prefer_blank, allow_exp, nothing;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
315 unsigned int fg, bg;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
316 XEvent xev;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
317 XGCValues xgcv;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
318 Colormap theCmap;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
319 XSetWindowAttributes xswa;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
320 unsigned long xswamask;
20399
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
321 struct fmt2Xfmtentry_s *fmte = fmt2Xfmt;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
322
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
323 #ifdef HAVE_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
324 unsigned int modeline_width, modeline_height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
325 static uint32_t vm_width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
326 static uint32_t vm_height;
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
327 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
328
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
329 vo_mouse_autohide = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
330 old_vo_dwidth = -1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
331 old_vo_dheight = -1;
6013
7f6e02a16ac4 some bugfix, x[11|mga|v] ( fullscreen with more files )
pontscho
parents: 5999
diff changeset
332
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
333 if (!title)
17787
6eb3a513abb9 remove useless and memleak-causing strdup
reimar
parents: 17566
diff changeset
334 title = "MPlayer X11 (XImage/Shm) render";
4813
15e95b9cf191 using vo_dx, vo_dy
alex
parents: 4808
diff changeset
335
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
336 in_format = format;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
337 srcW = width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
338 srcH = height;
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10728
diff changeset
339
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
340 if (flags & (VOFLAG_FULLSCREEN|VOFLAG_MODESWITCHING))
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
341 fullscreen = 1;
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
342 if (flags & VOFLAG_MODESWITCHING)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
343 vm = 1;
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
344 if (flags & VOFLAG_FLIPPING)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
345 Flip_Flag = 1;
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
346 zoomFlag = flags & VOFLAG_SWSCALE;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
347
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
348 int_pause = 0;
4677
305a0c20bde4 default is allways nozoom again (specify -zoom if u want the sane behavior)
michael
parents: 4662
diff changeset
349 // if(!fullscreen) zoomFlag=1; //it makes no sense to avoid zooming on windowd mode
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
350
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
351 //printf( "w: %d h: %d\n\n",vo_dwidth,vo_dheight );
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
352
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
353 XGetWindowAttributes(mDisplay, mRootWin, &attribs);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
354 depth = attribs.depth;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
355
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
356 if (depth != 15 && depth != 16 && depth != 24 && depth != 32)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
357 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
358 Visual *visual;
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
359
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
360 depth = vo_find_depth_from_visuals(mDisplay, mScreen, &visual);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
361 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
362 if (!XMatchVisualInfo(mDisplay, mScreen, depth, DirectColor, &vinfo) ||
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
363 (WinID > 0
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
364 && vinfo.visualid != XVisualIDFromVisual(attribs.visual)))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
365 XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo);
1746
6e7da6f362ab add half gui support
pontscho
parents: 1647
diff changeset
366
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
367 /* set image size (which is indeed neither the input nor output size),
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
368 if zoom is on it will be changed during draw_slice anyway so we don't duplicate the aspect code here
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
369 */
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
370 image_width = (width + 7) & (~7);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
371 image_height = height;
4661
4df2400b0527 -fs and or -vm default is nozoom, -zoom does the expected thing
michael
parents: 4658
diff changeset
372
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
373 aspect = ((1 << 16) * d_width + d_height / 2) / d_height;
2218
d9ea650b2c24 yv12 scaling at 24/32bpp with -zoom
arpi
parents: 2094
diff changeset
374
1752
39fc6cc71b3b vo_window bug fixed
pontscho
parents: 1746
diff changeset
375 #ifdef HAVE_NEW_GUI
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
376 if (use_gui)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
377 guiGetEvent(guiSetShVideo, 0); // the GUI will set up / resize the window
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
378 else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
379 #endif
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
380 {
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
381 #ifdef HAVE_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
382 if (vm)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
383 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
384 if ((d_width == 0) && (d_height == 0))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
385 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
386 vm_width = image_width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
387 vm_height = image_height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
388 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
389 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
390 vm_width = d_width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
391 vm_height = d_height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
392 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
393 vo_vm_switch(vm_width, vm_height, &modeline_width,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
394 &modeline_height);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
395 vo_dx = (vo_screenwidth - modeline_width) / 2;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
396 vo_dy = (vo_screenheight - modeline_height) / 2;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
397 vo_dwidth = modeline_width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
398 vo_dheight = modeline_height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
399 }
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
400 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
401 bg = WhitePixel(mDisplay, mScreen);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
402 fg = BlackPixel(mDisplay, mScreen);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
403
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
404 theCmap = vo_x11_create_colormap(&vinfo);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
405
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
406 xswa.background_pixel = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
407 xswa.border_pixel = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
408 xswa.colormap = theCmap;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
409 xswamask = CWBackPixel | CWBorderPixel | CWColormap;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
410
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
411 #ifdef HAVE_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
412 if (vm)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
413 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
414 xswa.override_redirect = True;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
415 xswamask |= CWOverrideRedirect;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
416 }
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
417 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
418
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
419 if (WinID >= 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
420 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
421 vo_window = WinID ? ((Window) WinID) : mRootWin;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
422 if (WinID)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
423 {
15540
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
424 int border;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
425 XUnmapWindow(mDisplay, vo_window);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
426 XChangeWindowAttributes(mDisplay, vo_window, xswamask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
427 &xswa);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
428 vo_x11_selectinput_witherr(mDisplay, vo_window,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
429 StructureNotifyMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
430 KeyPressMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
431 PropertyChangeMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
432 PointerMotionMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
433 ButtonPressMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
434 ButtonReleaseMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
435 ExposureMask);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
436 XMapWindow(mDisplay, vo_window);
15540
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
437 XGetGeometry(mDisplay, vo_window, &mRootWin,
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
438 &vo_dx, &vo_dy, &vo_dwidth, &vo_dheight,
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
439 &border, &depth);
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
440 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
441 XSelectInput(mDisplay, vo_window, ExposureMask);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
442 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
443 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
444 if (vo_window == None)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
445 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
446 vo_window =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
447 vo_x11_create_smooth_window(mDisplay, mRootWin,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
448 vinfo.visual, vo_dx, vo_dy,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
449 vo_dwidth, vo_dheight,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
450 depth, theCmap);
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
451
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
452 vo_x11_classhint(mDisplay, vo_window, "x11");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
453 vo_hidecursor(mDisplay, vo_window);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
454 vo_x11_sizehint(vo_dx, vo_dy, vo_dwidth, vo_dheight, 0);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
455 XSelectInput(mDisplay, vo_window, StructureNotifyMask);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
456 XStoreName(mDisplay, vo_window, title);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
457 XMapWindow(mDisplay, vo_window);
7764
13c36b2d1d45 -fixed-vo support
pontscho
parents: 7689
diff changeset
458 // if(WinID!=0)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
459 do
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
460 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
461 XNextEvent(mDisplay, &xev);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
462 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
463 while (xev.type != MapNotify
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
464 || xev.xmap.event != vo_window);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
465
18715
30d7ddf08889 Fix window position when changing videos while in fullscreen and for
reimar
parents: 18234
diff changeset
466 vo_x11_nofs_sizepos(vo_dx, vo_dy, vo_dwidth, vo_dheight);
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
467 if (fullscreen)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
468 vo_x11_fullscreen();
18715
30d7ddf08889 Fix window position when changing videos while in fullscreen and for
reimar
parents: 18234
diff changeset
469 } else
30d7ddf08889 Fix window position when changing videos while in fullscreen and for
reimar
parents: 18234
diff changeset
470 vo_x11_nofs_sizepos(vo_dx, vo_dy, vo_dwidth, vo_dheight);
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
471 }
6043
421781c5b128 fix some small bug and -rootwin
pontscho
parents: 6025
diff changeset
472
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
473 XSync(mDisplay, False);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
474
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
475 // we cannot grab mouse events on root window :(
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
476 vo_x11_selectinput_witherr(mDisplay, vo_window,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
477 StructureNotifyMask | KeyPressMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
478 PropertyChangeMask | ExposureMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
479 ((WinID ==
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
480 0) ? 0 : (ButtonPressMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
481 ButtonReleaseMask |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
482 PointerMotionMask)));
4805
79b753e2e84a mondom fix bazmeg.
pontscho
parents: 4804
diff changeset
483
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
484 #ifdef HAVE_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
485 if (vm)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
486 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
487 /* Grab the mouse pointer in our window */
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
488 if (vo_grabpointer)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
489 XGrabPointer(mDisplay, vo_window, True, 0,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
490 GrabModeAsync, GrabModeAsync,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
491 vo_window, None, CurrentTime);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
492 XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
493 }
2094
dc11de07b5e7 grabs mouse with -vm - patch by Uwe Reder <Uwe.Reder@3SOFT.de>
arpi
parents: 1924
diff changeset
494 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
495 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
496
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
497 if (vo_gc != None)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
498 XFreeGC(mDisplay, vo_gc);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
499 vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
500
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
501 if (myximage)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
502 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
503 freeMyXImage();
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
504 sws_freeContext(swsContext);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
505 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
506 getMyXImage();
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
507
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
508 if (!WinID)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
509 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
510 vo_dwidth = vo_screenwidth;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
511 vo_dheight = vo_screenheight;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
512 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
513
20399
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
514 while (fmte->mpfmt) {
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
515 if (IMGFMT_RGB_DEPTH(fmte->mpfmt) == myximage->bits_per_pixel &&
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
516 fmte->byte_order == myximage->byte_order &&
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
517 fmte->red_mask == myximage->red_mask &&
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
518 fmte->green_mask == myximage->green_mask &&
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
519 fmte->blue_mask == myximage->blue_mask)
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
520 break;
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
521 fmte++;
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
522 }
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
523 if (!fmte->mpfmt) {
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
524 mp_msg(MSGT_VO, MSGL_ERR,
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
525 "X server image format not supported, please contact the developers\n");
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
526 return -1;
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
527 }
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
528 out_format = fmte->mpfmt;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
529 switch ((bpp = myximage->bits_per_pixel))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
530 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
531 case 24:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
532 draw_alpha_fnc = draw_alpha_24;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
533 break;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
534 case 32:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
535 draw_alpha_fnc = draw_alpha_32;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
536 break;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
537 case 15:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
538 case 16:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
539 if (depth == 15)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
540 draw_alpha_fnc = draw_alpha_15;
20399
27aa9329d4f7 Proper detection of corresponding MPlayer image format for X server format for vo_x11.
reimar
parents: 20196
diff changeset
541 else
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
542 draw_alpha_fnc = draw_alpha_16;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
543 break;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
544 default:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
545 draw_alpha_fnc = draw_alpha_null;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
546 }
21586
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
547 out_offset = 0;
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
548 // for these formats conversion is currently not support and
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
549 // we can easily "emulate" them.
21599
fe48c337a269 10l, missing () in check for 32bit endian-conversion hack
reimar
parents: 21586
diff changeset
550 if (out_format & 64 && (IMGFMT_IS_RGB(out_format) || IMGFMT_IS_BGR(out_format))) {
21586
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
551 out_format &= ~64;
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
552 #ifdef WORDS_BIGENDIAN
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
553 out_offset = 1;
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
554 #else
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
555 out_offset = -1;
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
556 #endif
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
557 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
558
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
559 /* always allocate swsContext as size could change between frames */
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
560 swsContext =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
561 sws_getContextFromCmdLine(width, height, in_format, width, height,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
562 out_format);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
563 if (!swsContext)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
564 return -1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
565
18746
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
566 dst_width = width;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
567 //printf( "X11 bpp: %d color mask: R:%lX G:%lX B:%lX\n",bpp,myximage->red_mask,myximage->green_mask,myximage->blue_mask );
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
568
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
569 if (vo_ontop)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
570 vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11000
diff changeset
571
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
572 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
573 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
574
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
575 static void Display_Image(XImage * myximage, uint8_t * ImageData)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
576 {
21586
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
577 myximage->data += out_offset;
3003
16a593a1e6ed changed SH_MEM to HAVE_SHM according to configure
alex
parents: 2969
diff changeset
578 #ifdef HAVE_SHM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
579 if (Shmem_Flag)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
580 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
581 XShmPutImage(mDisplay, vo_window, vo_gc, myximage,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
582 0, 0,
18746
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
583 (vo_dwidth - dst_width) / 2,
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
584 (vo_dheight - myximage->height) / 2, dst_width,
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
585 myximage->height, True);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
586 } else
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
587 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
588 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
589 XPutImage(mDisplay, vo_window, vo_gc, myximage,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
590 0, 0,
18746
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
591 (vo_dwidth - dst_width) / 2,
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
592 (vo_dheight - myximage->height) / 2, dst_width,
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
593 myximage->height);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
594 }
21586
5a1e078720e7 Support for different endianness on client and server with -vo x11
reimar
parents: 21585
diff changeset
595 myximage->data -= out_offset;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
596 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
597
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1137
diff changeset
598 static void draw_osd(void)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
599 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
600 vo_draw_text(image_width, image_height, draw_alpha_fnc);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
601 }
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1137
diff changeset
602
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
603 static void flip_page(void)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
604 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
605 Display_Image(myximage, ImageData);
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1137
diff changeset
606 XSync(mDisplay, False);
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
607 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
608
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
609 static int draw_slice(uint8_t * src[], int stride[], int w, int h,
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
610 int x, int y)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
611 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
612 uint8_t *dst[3];
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
613 int dstStride[3];
6059
c0ae8c0eda72 fix Arpi's bugs
pontscho
parents: 6045
diff changeset
614
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
615 if ((old_vo_dwidth != vo_dwidth
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
616 || old_vo_dheight != vo_dheight) /*&& y==0 */ && zoomFlag)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
617 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
618 int newW = vo_dwidth;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
619 int newH = vo_dheight;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
620 int newAspect = (newW * (1 << 16) + (newH >> 1)) / newH;
18746
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
621 struct SwsContext *oldContext = swsContext;
4641
b7f340349470 allways use swScaler
michael
parents: 4627
diff changeset
622
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
623 if (newAspect > aspect)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
624 newW = (newH * aspect + (1 << 15)) >> 16;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
625 else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
626 newH = ((newW << 16) + (aspect >> 1)) / aspect;
4641
b7f340349470 allways use swScaler
michael
parents: 4627
diff changeset
627
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
628 old_vo_dwidth = vo_dwidth;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
629 old_vo_dheight = vo_dheight;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
630
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
631 if (sws_flags == 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
632 newW &= (~31); // not needed but, if the user wants the FAST_BILINEAR SCALER, then its needed
4627
3db7ee2ac7b0 bgr15 / bgr16 input support (with -zoom)
michael
parents: 4596
diff changeset
633
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
634 swsContext = sws_getContextFromCmdLine(srcW, srcH, in_format,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
635 newW, newH, out_format);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
636 if (swsContext)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
637 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
638 image_width = (newW + 7) & (~7);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
639 image_height = 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
640
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
641 freeMyXImage();
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
642 getMyXImage();
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
643 sws_freeContext(oldContext);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
644 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
645 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
646 swsContext = oldContext;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
647 }
18746
497ebe3ecc2b Software Scaler headers usage cleanup
lucabe
parents: 18715
diff changeset
648 dst_width = newW;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
649 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
650 dstStride[1] = dstStride[2] = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
651 dst[1] = dst[2] = NULL;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
652
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
653 if (Flip_Flag)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
654 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
655 dstStride[0] = -image_width * ((bpp + 7) / 8);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
656 dst[0] = ImageData - dstStride[0] * (image_height - 1);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
657 sws_scale_ordered(swsContext, src, stride, y, h, dst, dstStride);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
658 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
659 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
660 dstStride[0] = image_width * ((bpp + 7) / 8);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
661 dst[0] = ImageData;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
662 sws_scale_ordered(swsContext, src, stride, y, h, dst, dstStride);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
663 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
664 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
665 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
666
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
667 static int draw_frame(uint8_t * src[])
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
668 {
7683
2f802d9323de - implemented draw_image()
arpi
parents: 7539
diff changeset
669 #if 0
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
670 int stride[3] = { 0, 0, 0 };
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
671
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
672 if (in_format == IMGFMT_YUY2)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
673 stride[0] = srcW * 2;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
674 else if (in_format == IMGFMT_BGR8)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
675 stride[0] = srcW;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
676 else if (in_format == IMGFMT_BGR15)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
677 stride[0] = srcW * 2;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
678 else if (in_format == IMGFMT_BGR16)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
679 stride[0] = srcW * 2;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
680 else if (in_format == IMGFMT_BGR24)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
681 stride[0] = srcW * 3;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
682 else if (in_format == IMGFMT_BGR32)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
683 stride[0] = srcW * 4;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
684
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
685 return draw_slice(src, stride, srcW, srcH, 0, 0);
7683
2f802d9323de - implemented draw_image()
arpi
parents: 7539
diff changeset
686 #else
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 18116
diff changeset
687 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_X11_DrawFrameCalled);
7683
2f802d9323de - implemented draw_image()
arpi
parents: 7539
diff changeset
688 return -1;
2f802d9323de - implemented draw_image()
arpi
parents: 7539
diff changeset
689 #endif
2f802d9323de - implemented draw_image()
arpi
parents: 7539
diff changeset
690 }
2f802d9323de - implemented draw_image()
arpi
parents: 7539
diff changeset
691
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
692 static uint32_t get_image(mp_image_t * mpi)
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
693 {
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
694 if (zoomFlag ||
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
695 !IMGFMT_IS_BGR(mpi->imgfmt) ||
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
696 (IMGFMT_BGR_DEPTH(mpi->imgfmt) != vo_depthonscreen) ||
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
697 ((mpi->type != MP_IMGTYPE_STATIC)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
698 && (mpi->type != MP_IMGTYPE_TEMP))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
699 || (mpi->flags & MP_IMGFLAG_PLANAR)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
700 || (mpi->flags & MP_IMGFLAG_YUV) || (mpi->width != image_width)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
701 || (mpi->height != image_height))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
702 return (VO_FALSE);
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
703
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
704 if (Flip_Flag)
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
705 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
706 mpi->stride[0] = -image_width * ((bpp + 7) / 8);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
707 mpi->planes[0] = ImageData - mpi->stride[0] * (image_height - 1);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
708 } else
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
709 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
710 mpi->stride[0] = image_width * ((bpp + 7) / 8);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
711 mpi->planes[0] = ImageData;
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
712 }
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
713 mpi->flags |= MP_IMGFLAG_DIRECT;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
714
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
715 return (VO_TRUE);
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
716 }
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
717
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
718 static int query_format(uint32_t format)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
719 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
720 mp_msg(MSGT_VO, MSGL_DBG2,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
721 "vo_x11: query_format was called: %x (%s)\n", format,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
722 vo_format_name(format));
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
723 if (IMGFMT_IS_BGR(format))
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
724 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
725 if (IMGFMT_BGR_DEPTH(format) <= 8)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
726 return 0; // TODO 8bpp not yet fully implemented
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
727 if (IMGFMT_BGR_DEPTH(format) == vo_depthonscreen)
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
728 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_FLIP |
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
729 VFCAP_ACCEPT_STRIDE;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
730 else
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
731 return VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_FLIP |
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
732 VFCAP_ACCEPT_STRIDE;
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
733 }
325
b2fd5c172f80 vo_x11 query_format fix
laaz
parents: 324
diff changeset
734
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
735 switch (format)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
736 {
6692
ad521fb49a5e -vm -fs -zoom fix, set correct vm screenres in aspect code (similar to xv fix).
atmos4
parents: 6180
diff changeset
737 // case IMGFMT_BGR8:
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
738 // case IMGFMT_BGR15:
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
739 // case IMGFMT_BGR16:
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
740 // case IMGFMT_BGR24:
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
741 // case IMGFMT_BGR32:
6694
9291268a3603 1000l, back out hack-n-slay 8bpp code from my local tree.
atmos4
parents: 6693
diff changeset
742 // return 0x2;
4905
eb1a28f1236a yuy2 support disabled to workaround stupid colorspace selection
michael
parents: 4889
diff changeset
743 // case IMGFMT_YUY2:
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
744 case IMGFMT_I420:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
745 case IMGFMT_IYUV:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
746 case IMGFMT_YV12:
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
747 return VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_ACCEPT_STRIDE;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
748 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
749 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
750 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
751
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
752
7683
2f802d9323de - implemented draw_image()
arpi
parents: 7539
diff changeset
753 static void uninit(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
754 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
755 if (!myximage)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
756 return;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
757
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
758 freeMyXImage();
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
759
206
82b5ae8ceaf4 adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents: 202
diff changeset
760 #ifdef HAVE_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
761 vo_vm_close(mDisplay);
206
82b5ae8ceaf4 adds XF86VidMode support to vo_x11.c to do "pseudo-scaling"
mgraffam
parents: 202
diff changeset
762 #endif
4426
1ceadec3ea67 using the common -vm code, patch by Santi Bjar <tiarda@yahoo.es>
arpi
parents: 4420
diff changeset
763
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
764 zoomFlag = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
765 vo_x11_uninit();
4677
305a0c20bde4 default is allways nozoom again (specify -zoom if u want the sane behavior)
michael
parents: 4662
diff changeset
766
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
767 sws_freeContext(swsContext);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
768 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
769
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
770 static int preinit(const char *arg)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
771 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
772 if (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
773 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
774 mp_msg(MSGT_VO, MSGL_ERR, "vo_x11: Unknown subdevice: %s\n", arg);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
775 return ENOSYS;
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4734
diff changeset
776 }
5130
305b1fbde890 added directrendering support and better query_format
alex
parents: 4993
diff changeset
777
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
778 if (!vo_init())
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
779 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
780 return 0;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
781 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
782
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
783 static int control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
784 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
785 switch (request)
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7765
diff changeset
786 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
787 case VOCTRL_PAUSE:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
788 return (int_pause = 1);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
789 case VOCTRL_RESUME:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
790 return (int_pause = 0);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
791 case VOCTRL_QUERY_FORMAT:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
792 return query_format(*((uint32_t *) data));
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
793 case VOCTRL_GUISUPPORT:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
794 return VO_TRUE;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
795 case VOCTRL_GET_IMAGE:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
796 return get_image(data);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
797 case VOCTRL_SET_EQUALIZER:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
798 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
799 va_list ap;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
800 int value;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
801
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
802 va_start(ap, data);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
803 value = va_arg(ap, int);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
804
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
805 va_end(ap);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
806 return vo_x11_set_equalizer(data, value);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
807 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
808 case VOCTRL_GET_EQUALIZER:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
809 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
810 va_list ap;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
811 int *value;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
812
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
813 va_start(ap, data);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
814 value = va_arg(ap, int *);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
815
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
816 va_end(ap);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
817 return vo_x11_get_equalizer(data, value);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
818 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
819 case VOCTRL_ONTOP:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
820 vo_x11_ontop();
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
821 return VO_TRUE;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
822 case VOCTRL_FULLSCREEN:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
823 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
824 vo_x11_fullscreen();
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
825 vo_x11_clearwindow(mDisplay, vo_window);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
826 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
827 return VO_TRUE;
22232
d0b60d14d8d7 Move common vo initialization code to video_out.c
reimar
parents: 21599
diff changeset
828 case VOCTRL_UPDATE_SCREENINFO:
d0b60d14d8d7 Move common vo initialization code to video_out.c
reimar
parents: 21599
diff changeset
829 update_xinerama_info();
d0b60d14d8d7 Move common vo initialization code to video_out.c
reimar
parents: 21599
diff changeset
830 return VO_TRUE;
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7765
diff changeset
831 }
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11690
diff changeset
832 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4340
diff changeset
833 }