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