annotate libvo/vo_xv.c @ 33874:e1bec41397bb

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