Mercurial > mplayer.hg
annotate libvo/vo_xv.c @ 36920:40ad45360c8a
Replace old item 'potmeter' by new item 'pimage'.
Recent versions of the X11/GTK GUI didn't allow to control a potmeter,
because that didn't seem to make any sense.
In order to get rid of the confusing potmeter that doesn't distinguish
from a hpotmeter and in order to allow the more useful behaviour recent
versions of the X11/GTK GUI have been utilized (and because we're still
supporting item 'potmeter' for reasons of compatibility with old skins),
introduce new item 'pimage' that reuses most of the current potmeter
code.
Additionally, remove remaining code and documentation of 'potmeter'.
author | ib |
---|---|
date | Mon, 17 Mar 2014 12:29:46 +0000 |
parents | e788bcd9d49b |
children |
rev | line source |
---|---|
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
1 /* |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
2 * X11 Xv interface |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
3 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
4 * This file is part of MPlayer. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
5 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
6 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
8 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
9 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
10 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
11 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
14 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
15 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
16 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28250
diff
changeset
|
19 */ |
676
428755f858f7
multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents:
616
diff
changeset
|
20 |
1265 | 21 // Number of buffers _FOR_DOUBLEBUFFERING_MODE_ |
22 // Use option -double to enable double buffering! (default: single buffer) | |
6758
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
23 #define NUM_BUFFERS 3 |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
24 |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
25 /* |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
26 Buffer allocation: |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
27 |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
28 -nodr: |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
29 1: TEMP |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
30 2: 2*TEMP |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
31 |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
32 -dr: |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
33 1: TEMP |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
34 3: 2*STATIC+TEMP |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
35 */ |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
36 |
1 | 37 #include <stdio.h> |
38 #include <stdlib.h> | |
39 #include <string.h> | |
40 | |
41 #include "config.h" | |
5935 | 42 #include "mp_msg.h" |
16958 | 43 #include "help_mp.h" |
1 | 44 #include "video_out.h" |
36517 | 45 #define NO_DRAW_FRAME |
1 | 46 #include "video_out_internal.h" |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32467
diff
changeset
|
47 #include "libmpcodecs/vf.h" |
1 | 48 |
49 | |
50 #include <X11/Xlib.h> | |
51 #include <X11/Xutil.h> | |
52 #include <errno.h> | |
53 | |
31 | 54 #include "x11_common.h" |
55 | |
354 | 56 #include "fastmemcpy.h" |
32467 | 57 #include "sub/sub.h" |
2054 | 58 #include "aspect.h" |
350 | 59 |
14742 | 60 #include "subopt-helper.h" |
61 | |
24133 | 62 #include "input/input.h" |
63 | |
25963 | 64 #include "libavutil/common.h" |
22461
c54ad95f852a
Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents:
22232
diff
changeset
|
65 |
25216 | 66 static const vo_info_t info = { |
12582 | 67 "X11/Xv", |
68 "xv", | |
69 "Gerd Knorr <kraxel@goldbach.in-berlin.de> and others", | |
70 "" | |
1 | 71 }; |
72 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
73 const LIBVO_EXTERN(xv) |
6719
5291d74a60c9
xv support under cygwin - patch by Sycotic Smith <sycotic at linuxmail.org>
alex
parents:
6417
diff
changeset
|
74 #ifdef HAVE_SHM |
1 | 75 #include <sys/ipc.h> |
76 #include <sys/shm.h> | |
77 #include <X11/extensions/XShm.h> | |
6416 | 78 |
79 static XShmSegmentInfo Shminfo[NUM_BUFFERS]; | |
6417
44bca09c1edd
100l accidently removed a line too much (Shmem_Flag)
atmos4
parents:
6416
diff
changeset
|
80 static int Shmem_Flag; |
6416 | 81 #endif |
82 | |
10855 | 83 // Note: depends on the inclusion of X11/extensions/XShm.h |
84 #include <X11/extensions/Xv.h> | |
85 #include <X11/extensions/Xvlib.h> | |
86 | |
87 // FIXME: dynamically allocate this stuff | |
88 static void allocate_xvimage(int); | |
12582 | 89 static unsigned int ver, rel, req, ev, err; |
14742 | 90 static unsigned int formats, adaptors, xv_format; |
12582 | 91 static XvAdaptorInfo *ai = NULL; |
13953 | 92 static XvImageFormatValues *fo=NULL; |
10855 | 93 |
12582 | 94 static int current_buf = 0; |
95 static int current_ip_buf = 0; | |
96 static int num_buffers = 1; // default | |
14782 | 97 static int visible_buf = -1; // -1 means: no buffer was drawn yet |
12582 | 98 static XvImage *xvimage[NUM_BUFFERS]; |
10855 | 99 |
100 | |
1 | 101 static uint32_t image_width; |
102 static uint32_t image_height; | |
103 static uint32_t image_format; | |
104 | |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
105 static int int_pause; |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
106 |
28511
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
107 static struct vo_rect src_rect; |
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
108 static struct vo_rect dst_rect; |
16958 | 109 static uint32_t max_width = 0, max_height = 0; // zero means: not set |
1 | 110 |
35227
6b08a8332561
Fix variable declarations I stupidly forgot to make "static".
reimar
parents:
35050
diff
changeset
|
111 static vo_draw_alpha_func draw_alpha_func; |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
112 |
31231
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
113 static void fixup_osd_position(int *x0, int *y0, int *w, int *h) |
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
114 { |
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
115 *x0 += image_width * (vo_panscan_x >> 1) / (vo_dwidth + vo_panscan_x); |
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
116 *w = av_clip(*w, 0, image_width); |
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
117 *h = av_clip(*h, 0, image_height); |
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
118 *x0 = FFMIN(*x0, image_width - *w); |
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
119 *y0 = FFMIN(*y0, image_height - *h); |
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
120 } |
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
121 |
35050
b291f44d864a
Avoid some code duplication related to drawing the OSD.
reimar
parents:
33434
diff
changeset
|
122 static void draw_alpha(int x0, int y0, int w, int h, |
12582 | 123 unsigned char *src, unsigned char *srca, |
124 int stride) | |
125 { | |
35050
b291f44d864a
Avoid some code duplication related to drawing the OSD.
reimar
parents:
33434
diff
changeset
|
126 if (!draw_alpha_func) return; |
31231
77bdb012aaae
Factor out some common code and ensure we will not try to draw OSD
reimar
parents:
30122
diff
changeset
|
127 fixup_osd_position(&x0, &y0, &w, &h); |
35050
b291f44d864a
Avoid some code duplication related to drawing the OSD.
reimar
parents:
33434
diff
changeset
|
128 x0 *= pixel_stride(xv_format); |
b291f44d864a
Avoid some code duplication related to drawing the OSD.
reimar
parents:
33434
diff
changeset
|
129 draw_alpha_func(w, h, src, srca, stride, |
12582 | 130 xvimage[current_buf]->data + |
131 xvimage[current_buf]->offsets[0] + | |
132 xvimage[current_buf]->pitches[0] * y0 + x0, | |
133 xvimage[current_buf]->pitches[0]); | |
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 |
6786 | 136 |
7757 | 137 static void deallocate_xvimage(int foo); |
138 | |
28511
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
139 static void resize(void) |
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
140 { |
28598
4172d83194f2
Extend calc_src_dst_rects to also calculate the border values needed for
reimar
parents:
28511
diff
changeset
|
141 calc_src_dst_rects(image_width, image_height, &src_rect, &dst_rect, NULL, NULL); |
33434 | 142 // vo_x11_clearwindow_part(mDisplay, vo_window, dst_rect.width, dst_rect.height, vo_fs); |
28511
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
143 vo_xv_draw_colorkey(dst_rect.left, dst_rect.top, dst_rect.width, dst_rect.height); |
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
144 } |
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
145 |
182 | 146 /* |
147 * connect to server, create and map window, | |
1 | 148 * allocate colors and (shared) memory |
149 */ | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15826
diff
changeset
|
150 static int config(uint32_t width, uint32_t height, uint32_t d_width, |
12582 | 151 uint32_t d_height, uint32_t flags, char *title, |
152 uint32_t format) | |
1 | 153 { |
12582 | 154 XVisualInfo vinfo; |
155 XSetWindowAttributes xswa; | |
156 XWindowAttributes attribs; | |
157 unsigned long xswamask; | |
158 int depth; | |
159 | |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
160 #ifdef CONFIG_XF86VM |
27952
94bab93a8d17
Simplify handling of VOFLAG_MODESWITCHNG, merge assignment and declaration
reimar
parents:
27951
diff
changeset
|
161 int vm = flags & VOFLAG_MODESWITCHING; |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
162 #endif |
1 | 163 |
12582 | 164 image_height = height; |
165 image_width = width; | |
166 image_format = format; | |
2249
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2055
diff
changeset
|
167 |
16958 | 168 if ((max_width != 0 && max_height != 0) && |
169 (image_width > max_width || image_height > max_height)) | |
170 { | |
20765 | 171 mp_msg( MSGT_VO, MSGL_ERR, MSGTR_VO_XV_ImagedimTooHigh, |
16958 | 172 image_width, image_height, max_width, max_height); |
173 return -1; | |
174 } | |
175 | |
12582 | 176 int_pause = 0; |
14782 | 177 visible_buf = -1; |
1 | 178 |
12582 | 179 num_buffers = |
180 vo_doublebuffering ? (vo_directrendering ? NUM_BUFFERS : 2) : 1; | |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
181 |
12582 | 182 /* check image formats */ |
183 { | |
184 unsigned int i; | |
10855 | 185 |
12582 | 186 xv_format = 0; |
187 for (i = 0; i < formats; i++) | |
188 { | |
189 mp_msg(MSGT_VO, MSGL_V, | |
190 "Xvideo image format: 0x%x (%4.4s) %s\n", fo[i].id, | |
191 (char *) &fo[i].id, | |
192 (fo[i].format == XvPacked) ? "packed" : "planar"); | |
193 if (fo[i].id == format) | |
194 xv_format = fo[i].id; | |
195 } | |
196 if (!xv_format) | |
197 return -1; | |
198 } | |
2249
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2055
diff
changeset
|
199 |
723 | 200 { |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
201 #ifdef CONFIG_XF86VM |
12582 | 202 if (vm) |
203 { | |
27890
a4e2700e9381
Simplify vo_vm_switch and vo_vm_close, everyone was using the (almost) same
reimar
parents:
27889
diff
changeset
|
204 vo_vm_switch(); |
27895
69b4b8d73b5e
Remove a nonsensical "else" for the video mode switching case.
reimar
parents:
27892
diff
changeset
|
205 } |
12582 | 206 #endif |
207 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), | |
208 &attribs); | |
209 depth = attribs.depth; | |
210 if (depth != 15 && depth != 16 && depth != 24 && depth != 32) | |
211 depth = 24; | |
212 XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo); | |
723 | 213 |
33434 | 214 xswa.border_pixel = 0; |
215 xswamask = CWBorderPixel; | |
14742 | 216 if (xv_ck_info.method == CK_METHOD_BACKGROUND) |
217 { | |
218 xswa.background_pixel = xv_colorkey; | |
33434 | 219 xswamask |= CWBackPixel; |
14742 | 220 } |
1 | 221 |
27891
8742bcad99b5
Use vo_dwidth/vo_dheight for creating the windows instead of d_width/d_height.
reimar
parents:
27890
diff
changeset
|
222 vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, vo_dwidth, vo_dheight, |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
223 flags, CopyFromParent, "xv", title); |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
224 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); |
12582 | 225 |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
226 #ifdef CONFIG_XF86VM |
12582 | 227 if (vm) |
228 { | |
229 /* Grab the mouse pointer in our window */ | |
230 if (vo_grabpointer) | |
231 XGrabPointer(mDisplay, vo_window, True, 0, | |
232 GrabModeAsync, GrabModeAsync, | |
233 vo_window, None, CurrentTime); | |
234 XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime); | |
235 } | |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
236 #endif |
12582 | 237 } |
238 | |
239 mp_msg(MSGT_VO, MSGL_V, "using Xvideo port %d for hw scaling\n", | |
240 xv_port); | |
1 | 241 |
35050
b291f44d864a
Avoid some code duplication related to drawing the OSD.
reimar
parents:
33434
diff
changeset
|
242 draw_alpha_func = vo_get_draw_alpha(xv_format); |
182 | 243 |
12582 | 244 if (vo_config_count) |
245 for (current_buf = 0; current_buf < num_buffers; ++current_buf) | |
246 deallocate_xvimage(current_buf); | |
7757 | 247 |
12582 | 248 for (current_buf = 0; current_buf < num_buffers; ++current_buf) |
249 allocate_xvimage(current_buf); | |
676
428755f858f7
multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents:
616
diff
changeset
|
250 |
12582 | 251 current_buf = 0; |
252 current_ip_buf = 0; | |
1 | 253 |
28511
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
254 resize(); |
5945 | 255 |
12582 | 256 return 0; |
1 | 257 } |
258 | |
182 | 259 static void allocate_xvimage(int foo) |
1 | 260 { |
12582 | 261 /* |
262 * allocate XvImages. FIXME: no error checking, without | |
263 * mit-shm this will bomb... trzing to fix ::atmos | |
264 */ | |
6416 | 265 #ifdef HAVE_SHM |
12582 | 266 if (mLocalDisplay && XShmQueryExtension(mDisplay)) |
267 Shmem_Flag = 1; | |
268 else | |
269 { | |
270 Shmem_Flag = 0; | |
271 mp_msg(MSGT_VO, MSGL_INFO, | |
20765 | 272 MSGTR_LIBVO_XV_SharedMemoryNotSupported); |
12582 | 273 } |
274 if (Shmem_Flag) | |
275 { | |
276 xvimage[foo] = | |
277 (XvImage *) XvShmCreateImage(mDisplay, xv_port, xv_format, | |
278 NULL, image_width, image_height, | |
279 &Shminfo[foo]); | |
1 | 280 |
12582 | 281 Shminfo[foo].shmid = |
282 shmget(IPC_PRIVATE, xvimage[foo]->data_size, IPC_CREAT | 0777); | |
283 Shminfo[foo].shmaddr = (char *) shmat(Shminfo[foo].shmid, 0, 0); | |
284 Shminfo[foo].readOnly = False; | |
1 | 285 |
12582 | 286 xvimage[foo]->data = Shminfo[foo].shmaddr; |
287 XShmAttach(mDisplay, &Shminfo[foo]); | |
288 XSync(mDisplay, False); | |
289 shmctl(Shminfo[foo].shmid, IPC_RMID, 0); | |
290 } else | |
6416 | 291 #endif |
12582 | 292 { |
293 xvimage[foo] = | |
294 (XvImage *) XvCreateImage(mDisplay, xv_port, xv_format, NULL, | |
295 image_width, image_height); | |
296 xvimage[foo]->data = malloc(xvimage[foo]->data_size); | |
297 XSync(mDisplay, False); | |
298 } | |
299 memset(xvimage[foo]->data, 128, xvimage[foo]->data_size); | |
300 return; | |
1 | 301 } |
302 | |
1794 | 303 static void deallocate_xvimage(int foo) |
304 { | |
6416 | 305 #ifdef HAVE_SHM |
12582 | 306 if (Shmem_Flag) |
307 { | |
308 XShmDetach(mDisplay, &Shminfo[foo]); | |
309 shmdt(Shminfo[foo].shmaddr); | |
310 } else | |
6416 | 311 #endif |
12582 | 312 { |
313 free(xvimage[foo]->data); | |
314 } | |
315 XFree(xvimage[foo]); | |
316 | |
317 XSync(mDisplay, False); | |
318 return; | |
1794 | 319 } |
320 | |
14782 | 321 static inline void put_xvimage( XvImage * xvi ) |
322 { | |
323 #ifdef HAVE_SHM | |
324 if (Shmem_Flag) | |
325 { | |
326 XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, | |
28511
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
327 xvi, |
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
328 src_rect.left, src_rect.top, src_rect.width, src_rect.height, |
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
329 dst_rect.left, dst_rect.top, dst_rect.width, dst_rect.height, |
14782 | 330 False); |
331 } else | |
332 #endif | |
333 { | |
334 XvPutImage(mDisplay, xv_port, vo_window, vo_gc, | |
28511
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
335 xvi, |
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
336 src_rect.left, src_rect.top, src_rect.width, src_rect.height, |
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
337 dst_rect.left, dst_rect.top, dst_rect.width, dst_rect.height); |
14782 | 338 } |
339 } | |
340 | |
31 | 341 static void check_events(void) |
1 | 342 { |
12582 | 343 int e = vo_x11_check_events(mDisplay); |
344 | |
14742 | 345 if (e & VO_EVENT_EXPOSE || e & VO_EVENT_RESIZE) |
346 { | |
28511
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
347 resize(); |
14742 | 348 } |
349 | |
12582 | 350 if ((e & VO_EVENT_EXPOSE || e & VO_EVENT_RESIZE) && int_pause) |
14782 | 351 { |
352 /* did we already draw a buffer */ | |
353 if ( visible_buf != -1 ) | |
354 { | |
355 /* redraw the last visible buffer */ | |
356 put_xvimage( xvimage[visible_buf] ); | |
357 } | |
358 } | |
1 | 359 } |
360 | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1265
diff
changeset
|
361 static void draw_osd(void) |
12582 | 362 { |
363 vo_draw_text(image_width - | |
364 image_width * vo_panscan_x / (vo_dwidth + vo_panscan_x), | |
35050
b291f44d864a
Avoid some code duplication related to drawing the OSD.
reimar
parents:
33434
diff
changeset
|
365 image_height, draw_alpha); |
12582 | 366 } |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1265
diff
changeset
|
367 |
182 | 368 static void flip_page(void) |
1 | 369 { |
14782 | 370 put_xvimage( xvimage[current_buf] ); |
6304
ee65527096c2
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
arpi
parents:
6295
diff
changeset
|
371 |
14782 | 372 /* remember the currently visible buffer */ |
373 visible_buf = current_buf; | |
374 | |
12582 | 375 if (num_buffers > 1) |
376 { | |
377 current_buf = | |
378 vo_directrendering ? 0 : ((current_buf + 1) % num_buffers); | |
379 XFlush(mDisplay); | |
380 } else | |
381 XSync(mDisplay, False); | |
382 return; | |
1 | 383 } |
384 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15826
diff
changeset
|
385 static int draw_slice(uint8_t * image[], int stride[], int w, int h, |
12582 | 386 int x, int y) |
1 | 387 { |
12582 | 388 uint8_t *dst; |
182 | 389 |
12582 | 390 dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[0] + |
391 xvimage[current_buf]->pitches[0] * y + x; | |
392 memcpy_pic(dst, image[0], w, h, xvimage[current_buf]->pitches[0], | |
393 stride[0]); | |
182 | 394 |
12582 | 395 x /= 2; |
396 y /= 2; | |
397 w /= 2; | |
398 h /= 2; | |
1 | 399 |
12582 | 400 dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[1] + |
401 xvimage[current_buf]->pitches[1] * y + x; | |
402 if (image_format != IMGFMT_YV12) | |
403 memcpy_pic(dst, image[1], w, h, xvimage[current_buf]->pitches[1], | |
404 stride[1]); | |
405 else | |
406 memcpy_pic(dst, image[2], w, h, xvimage[current_buf]->pitches[1], | |
407 stride[2]); | |
5316 | 408 |
12582 | 409 dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[2] + |
410 xvimage[current_buf]->pitches[2] * y + x; | |
411 if (image_format == IMGFMT_YV12) | |
412 memcpy_pic(dst, image[1], w, h, xvimage[current_buf]->pitches[1], | |
413 stride[1]); | |
414 else | |
415 memcpy_pic(dst, image[2], w, h, xvimage[current_buf]->pitches[1], | |
416 stride[2]); | |
6231 | 417 |
12582 | 418 return 0; |
1 | 419 } |
420 | |
12582 | 421 static uint32_t draw_image(mp_image_t * mpi) |
422 { | |
423 if (mpi->flags & MP_IMGFLAG_DIRECT) | |
424 { | |
425 // direct rendering: | |
36762 | 426 current_buf = (intptr_t)mpi->priv; // hack! |
12582 | 427 return VO_TRUE; |
6760 | 428 } |
12582 | 429 if (mpi->flags & MP_IMGFLAG_DRAW_CALLBACK) |
430 return VO_TRUE; // done | |
431 if (mpi->flags & MP_IMGFLAG_PLANAR) | |
432 { | |
433 draw_slice(mpi->planes, mpi->stride, mpi->w, mpi->h, 0, 0); | |
434 return VO_TRUE; | |
7684 | 435 } |
12582 | 436 if (mpi->flags & MP_IMGFLAG_YUV) |
437 { | |
438 // packed YUV: | |
439 memcpy_pic(xvimage[current_buf]->data + | |
440 xvimage[current_buf]->offsets[0], mpi->planes[0], | |
441 mpi->w * (mpi->bpp / 8), mpi->h, | |
442 xvimage[current_buf]->pitches[0], mpi->stride[0]); | |
443 return VO_TRUE; | |
7684 | 444 } |
12582 | 445 return VO_FALSE; // not (yet) supported |
6760 | 446 } |
447 | |
12582 | 448 static uint32_t get_image(mp_image_t * mpi) |
449 { | |
450 int buf = current_buf; // we shouldn't change current_buf unless we do DR! | |
451 | |
452 if (mpi->type == MP_IMGTYPE_STATIC && num_buffers > 1) | |
453 return VO_FALSE; // it is not static | |
454 if (mpi->imgfmt != image_format) | |
455 return VO_FALSE; // needs conversion :( | |
4980 | 456 // if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram |
12582 | 457 if (mpi->flags & MP_IMGFLAG_READABLE && |
458 (mpi->type == MP_IMGTYPE_IPB || mpi->type == MP_IMGTYPE_IP)) | |
459 { | |
460 // reference (I/P) frame of IP or IPB: | |
461 if (num_buffers < 2) | |
462 return VO_FALSE; // not enough | |
463 current_ip_buf ^= 1; | |
464 // for IPB with 2 buffers we can DR only one of the 2 P frames: | |
465 if (mpi->type == MP_IMGTYPE_IPB && num_buffers < 3 | |
466 && current_ip_buf) | |
467 return VO_FALSE; | |
468 buf = current_ip_buf; | |
469 if (mpi->type == MP_IMGTYPE_IPB) | |
470 ++buf; // preserve space for B | |
6758
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
471 } |
12582 | 472 if (mpi->height > xvimage[buf]->height) |
473 return VO_FALSE; //buffer to small | |
474 if (mpi->width * (mpi->bpp / 8) > xvimage[buf]->pitches[0]) | |
475 return VO_FALSE; //buffer to small | |
476 if ((mpi->flags & (MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_ACCEPT_WIDTH)) | |
477 || (mpi->width * (mpi->bpp / 8) == xvimage[buf]->pitches[0])) | |
478 { | |
479 current_buf = buf; | |
480 mpi->planes[0] = | |
481 xvimage[current_buf]->data + xvimage[current_buf]->offsets[0]; | |
482 mpi->stride[0] = xvimage[current_buf]->pitches[0]; | |
483 mpi->width = mpi->stride[0] / (mpi->bpp / 8); | |
484 if (mpi->flags & MP_IMGFLAG_PLANAR) | |
485 { | |
486 if (mpi->flags & MP_IMGFLAG_SWAPPED) | |
487 { | |
488 // I420 | |
489 mpi->planes[1] = | |
490 xvimage[current_buf]->data + | |
491 xvimage[current_buf]->offsets[1]; | |
492 mpi->planes[2] = | |
493 xvimage[current_buf]->data + | |
494 xvimage[current_buf]->offsets[2]; | |
495 mpi->stride[1] = xvimage[current_buf]->pitches[1]; | |
496 mpi->stride[2] = xvimage[current_buf]->pitches[2]; | |
497 } else | |
498 { | |
499 // YV12 | |
500 mpi->planes[1] = | |
501 xvimage[current_buf]->data + | |
502 xvimage[current_buf]->offsets[2]; | |
503 mpi->planes[2] = | |
504 xvimage[current_buf]->data + | |
505 xvimage[current_buf]->offsets[1]; | |
506 mpi->stride[1] = xvimage[current_buf]->pitches[2]; | |
507 mpi->stride[2] = xvimage[current_buf]->pitches[1]; | |
508 } | |
509 } | |
510 mpi->flags |= MP_IMGFLAG_DIRECT; | |
36762 | 511 mpi->priv = (void *)(intptr_t)current_buf; |
12582 | 512 // printf("mga: get_image() SUCCESS -> Direct Rendering ENABLED\n"); |
513 return VO_TRUE; | |
4980 | 514 } |
515 return VO_FALSE; | |
516 } | |
517 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15826
diff
changeset
|
518 static int query_format(uint32_t format) |
1 | 519 { |
10855 | 520 uint32_t i; |
12582 | 521 int flag = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_OSD | VFCAP_ACCEPT_STRIDE; // FIXME! check for DOWN |
522 | |
523 /* check image formats */ | |
524 for (i = 0; i < formats; i++) | |
525 { | |
526 if (fo[i].id == format) | |
527 return flag; //xv_format = fo[i].id; | |
528 } | |
529 return 0; | |
1 | 530 } |
531 | |
12582 | 532 static void uninit(void) |
1852 | 533 { |
12582 | 534 int i; |
535 | |
536 if (!vo_config_count) | |
537 return; | |
14782 | 538 visible_buf = -1; |
12582 | 539 XvFreeAdaptorInfo(ai); |
540 ai = NULL; | |
13953 | 541 if(fo){ |
542 XFree(fo); | |
543 fo=NULL; | |
544 } | |
12582 | 545 for (i = 0; i < num_buffers; i++) |
546 deallocate_xvimage(i); | |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
547 #ifdef CONFIG_XF86VM |
27890
a4e2700e9381
Simplify vo_vm_switch and vo_vm_close, everyone was using the (almost) same
reimar
parents:
27889
diff
changeset
|
548 vo_vm_close(); |
6016 | 549 #endif |
24133 | 550 mp_input_rm_event_fd(ConnectionNumber(mDisplay)); |
12582 | 551 vo_x11_uninit(); |
322
4e69a8e2700a
Screensaver and monitor powersafe function is switched off when playing a
laaz
parents:
249
diff
changeset
|
552 } |
1 | 553 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15826
diff
changeset
|
554 static int preinit(const char *arg) |
4352 | 555 { |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
556 XvPortID xv_p; |
12582 | 557 int busy_ports = 0; |
10855 | 558 unsigned int i; |
14742 | 559 strarg_t ck_src_arg = { 0, NULL }; |
560 strarg_t ck_method_arg = { 0, NULL }; | |
26730
41794a5fb100
Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents:
25963
diff
changeset
|
561 int xv_adaptor = -1; |
14742 | 562 |
28828
56eee6ffba9b
Make data related to suboption parsing const in libvo
reimar
parents:
28598
diff
changeset
|
563 const opt_t subopts[] = |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28829
diff
changeset
|
564 { |
14742 | 565 /* name arg type arg var test */ |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29526
diff
changeset
|
566 { "port", OPT_ARG_INT, &xv_port, int_pos }, |
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29526
diff
changeset
|
567 { "adaptor", OPT_ARG_INT, &xv_adaptor, int_non_neg }, |
14742 | 568 { "ck", OPT_ARG_STR, &ck_src_arg, xv_test_ck }, |
569 { "ck-method", OPT_ARG_STR, &ck_method_arg, xv_test_ckm }, | |
570 { NULL } | |
571 }; | |
12582 | 572 |
10826 | 573 xv_port = 0; |
574 | |
14742 | 575 /* parse suboptions */ |
576 if ( subopt_parse( arg, subopts ) != 0 ) | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
577 { |
14742 | 578 return -1; |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
579 } |
14742 | 580 |
581 /* modify colorkey settings according to the given options */ | |
582 xv_setup_colorkeyhandling( ck_method_arg.str, ck_src_arg.str ); | |
583 | |
12582 | 584 if (!vo_init()) |
585 return -1; | |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
586 |
12582 | 587 /* check for Xvideo extension */ |
588 if (Success != XvQueryExtension(mDisplay, &ver, &rel, &req, &ev, &err)) | |
589 { | |
590 mp_msg(MSGT_VO, MSGL_ERR, | |
20765 | 591 MSGTR_LIBVO_XV_XvNotSupportedByX11); |
12582 | 592 return -1; |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
593 } |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
594 |
12582 | 595 /* check for Xvideo support */ |
596 if (Success != | |
597 XvQueryAdaptors(mDisplay, DefaultRootWindow(mDisplay), &adaptors, | |
598 &ai)) | |
599 { | |
20765 | 600 mp_msg(MSGT_VO, MSGL_ERR, MSGTR_LIBVO_XV_XvQueryAdaptorsFailed); |
12582 | 601 return -1; |
602 } | |
603 | |
604 /* check adaptors */ | |
605 if (xv_port) | |
606 { | |
10839 | 607 int port_found; |
12582 | 608 |
609 for (port_found = 0, i = 0; !port_found && i < adaptors; i++) | |
610 { | |
611 if ((ai[i].type & XvInputMask) && (ai[i].type & XvImageMask)) | |
612 { | |
613 for (xv_p = ai[i].base_id; | |
614 xv_p < ai[i].base_id + ai[i].num_ports; ++xv_p) | |
615 { | |
616 if (xv_p == xv_port) | |
617 { | |
10839 | 618 port_found = 1; |
619 break; | |
620 } | |
621 } | |
622 } | |
623 } | |
12582 | 624 if (port_found) |
625 { | |
10839 | 626 if (XvGrabPort(mDisplay, xv_port, CurrentTime)) |
627 xv_port = 0; | |
12582 | 628 } else |
629 { | |
630 mp_msg(MSGT_VO, MSGL_WARN, | |
20765 | 631 MSGTR_LIBVO_XV_InvalidPortParameter); |
10839 | 632 xv_port = 0; |
633 } | |
10826 | 634 } |
12582 | 635 |
636 for (i = 0; i < adaptors && xv_port == 0; i++) | |
637 { | |
26730
41794a5fb100
Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents:
25963
diff
changeset
|
638 /* check if adaptor number has been specified */ |
41794a5fb100
Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents:
25963
diff
changeset
|
639 if (xv_adaptor != -1 && xv_adaptor != i) |
41794a5fb100
Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents:
25963
diff
changeset
|
640 continue; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28829
diff
changeset
|
641 |
12582 | 642 if ((ai[i].type & XvInputMask) && (ai[i].type & XvImageMask)) |
643 { | |
644 for (xv_p = ai[i].base_id; | |
645 xv_p < ai[i].base_id + ai[i].num_ports; ++xv_p) | |
646 if (!XvGrabPort(mDisplay, xv_p, CurrentTime)) | |
647 { | |
648 xv_port = xv_p; | |
27031
0f7770b2230d
Move message about which adapter is used to verbose mode.
diego
parents:
26755
diff
changeset
|
649 mp_msg(MSGT_VO, MSGL_V, |
0f7770b2230d
Move message about which adapter is used to verbose mode.
diego
parents:
26755
diff
changeset
|
650 "[VO_XV] Using Xv Adapter #%d (%s)\n", |
0f7770b2230d
Move message about which adapter is used to verbose mode.
diego
parents:
26755
diff
changeset
|
651 i, ai[i].name); |
12582 | 652 break; |
653 } else | |
654 { | |
655 mp_msg(MSGT_VO, MSGL_WARN, | |
20765 | 656 MSGTR_LIBVO_XV_CouldNotGrabPort, (int) xv_p); |
12582 | 657 ++busy_ports; |
658 } | |
659 } | |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
660 } |
12582 | 661 if (!xv_port) |
662 { | |
663 if (busy_ports) | |
664 mp_msg(MSGT_VO, MSGL_ERR, | |
20765 | 665 MSGTR_LIBVO_XV_CouldNotFindFreePort); |
12582 | 666 else |
667 mp_msg(MSGT_VO, MSGL_ERR, | |
20765 | 668 MSGTR_LIBVO_XV_NoXvideoSupport); |
12582 | 669 return -1; |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
670 } |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
671 |
14742 | 672 if ( !vo_xv_init_colorkey() ) |
7857
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
673 { |
14742 | 674 return -1; // bail out, colorkey setup failed |
7857
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
675 } |
15826
db966bdf6f5b
Try to set XV_SYNC_TO_VBLANK to enable vsync on non-overlay xv adapters.
reimar
parents:
15540
diff
changeset
|
676 vo_xv_enable_vsync(); |
16958 | 677 vo_xv_get_max_img_dim( &max_width, &max_height ); |
7857
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
678 |
12582 | 679 fo = XvListImageFormats(mDisplay, xv_port, (int *) &formats); |
5566 | 680 |
24133 | 681 mp_input_add_event_fd(ConnectionNumber(mDisplay), check_events); |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
682 return 0; |
4352 | 683 } |
1 | 684 |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
33301
diff
changeset
|
685 static int control(uint32_t request, void *data) |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
686 { |
12582 | 687 switch (request) |
688 { | |
689 case VOCTRL_PAUSE: | |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
26730
diff
changeset
|
690 return int_pause = 1; |
12582 | 691 case VOCTRL_RESUME: |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
26730
diff
changeset
|
692 return int_pause = 0; |
12582 | 693 case VOCTRL_QUERY_FORMAT: |
694 return query_format(*((uint32_t *) data)); | |
695 case VOCTRL_GET_IMAGE: | |
696 return get_image(data); | |
697 case VOCTRL_DRAW_IMAGE: | |
698 return draw_image(data); | |
699 case VOCTRL_GUISUPPORT: | |
700 return VO_TRUE; | |
701 case VOCTRL_GET_PANSCAN: | |
702 return VO_TRUE; | |
703 case VOCTRL_FULLSCREEN: | |
704 vo_x11_fullscreen(); | |
705 /* indended, fallthrough to update panscan on fullscreen/windowed switch */ | |
706 case VOCTRL_SET_PANSCAN: | |
28511
db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
reimar
parents:
28446
diff
changeset
|
707 resize(); |
12582 | 708 return VO_TRUE; |
709 case VOCTRL_SET_EQUALIZER: | |
710 { | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32467
diff
changeset
|
711 vf_equalizer_t *eq=data; |
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32467
diff
changeset
|
712 return vo_xv_set_eq(xv_port, eq->item, eq->value); |
12582 | 713 } |
714 case VOCTRL_GET_EQUALIZER: | |
715 { | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32467
diff
changeset
|
716 vf_equalizer_t *eq=data; |
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32467
diff
changeset
|
717 return vo_xv_get_eq(xv_port, eq->item, &eq->value); |
12582 | 718 } |
719 case VOCTRL_ONTOP: | |
720 vo_x11_ontop(); | |
721 return VO_TRUE; | |
22232 | 722 case VOCTRL_UPDATE_SCREENINFO: |
723 update_xinerama_info(); | |
724 return VO_TRUE; | |
12582 | 725 } |
726 return VO_NOTIMPL; | |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
727 } |