annotate libvo/vo_xv.c @ 33218:f0c2a62e3e89

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