Mercurial > mplayer.hg
annotate libvo/vo_xv.c @ 10898:716edc005b18
patch from Pierre Lombard <p_l@gmx.fr>
If the sound channel is already busy the async open fails and returns
-EBUSY. There's no need to try to open it synchronously as it will block
mplayer till the sound channel is released.
(Granted there's a very slight chance your sound device happen to be
freed between those two calls but it's not the common case).
The behavior is changed by this oneliner to match the ao_oss behavior
(disable sound if the sound device is busy).
author | attila |
---|---|
date | Sun, 21 Sep 2003 09:49:05 +0000 |
parents | eeae5c1b8fff |
children | 604a27a2b966 |
rev | line source |
---|---|
7757 | 1 /* vo_xv.c, X11 Xv interface */ |
676
428755f858f7
multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents:
616
diff
changeset
|
2 |
1265 | 3 // Number of buffers _FOR_DOUBLEBUFFERING_MODE_ |
4 // 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
|
5 #define NUM_BUFFERS 3 |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
6 |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
7 /* |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
8 Buffer allocation: |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
9 |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
10 -nodr: |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
11 1: TEMP |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
12 2: 2*TEMP |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
13 |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
14 -dr: |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
15 1: TEMP |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
16 3: 2*STATIC+TEMP |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
17 */ |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
18 |
1 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
22 | |
23 #include "config.h" | |
5935 | 24 #include "mp_msg.h" |
1 | 25 #include "video_out.h" |
26 #include "video_out_internal.h" | |
27 | |
28 | |
29 #include <X11/Xlib.h> | |
30 #include <X11/Xutil.h> | |
31 #include <errno.h> | |
32 | |
31 | 33 #include "x11_common.h" |
34 | |
354 | 35 #include "fastmemcpy.h" |
616 | 36 #include "sub.h" |
2054 | 37 #include "aspect.h" |
350 | 38 |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
39 #ifdef HAVE_NEW_GUI |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
40 #include "../Gui/interface.h" |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
41 #endif |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
42 |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7857
diff
changeset
|
43 static vo_info_t info = |
1 | 44 { |
182 | 45 "X11/Xv", |
46 "xv", | |
6781 | 47 "Gerd Knorr <kraxel@goldbach.in-berlin.de> and others", |
182 | 48 "" |
1 | 49 }; |
50 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7857
diff
changeset
|
51 LIBVO_EXTERN(xv) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7857
diff
changeset
|
52 |
6719
5291d74a60c9
xv support under cygwin - patch by Sycotic Smith <sycotic at linuxmail.org>
alex
parents:
6417
diff
changeset
|
53 #ifdef HAVE_SHM |
1 | 54 #include <sys/ipc.h> |
55 #include <sys/shm.h> | |
56 #include <X11/extensions/XShm.h> | |
57 | |
6416 | 58 /* since it doesn't seem to be defined on some platforms */ |
59 int XShmGetEventBase(Display*); | |
60 | |
61 static XShmSegmentInfo Shminfo[NUM_BUFFERS]; | |
6417
44bca09c1edd
100l accidently removed a line too much (Shmem_Flag)
atmos4
parents:
6416
diff
changeset
|
62 static int Shmem_Flag; |
6416 | 63 #endif |
64 | |
10855 | 65 // Note: depends on the inclusion of X11/extensions/XShm.h |
66 #include <X11/extensions/Xv.h> | |
67 #include <X11/extensions/Xvlib.h> | |
68 | |
69 // FIXME: dynamically allocate this stuff | |
70 static void allocate_xvimage(int); | |
71 static unsigned int ver,rel,req,ev,err; | |
72 static unsigned int formats, adaptors, xv_port, xv_format; | |
73 static XvAdaptorInfo *ai = NULL; | |
74 static XvImageFormatValues *fo; | |
75 | |
76 static int current_buf=0; | |
77 static int current_ip_buf=0; | |
78 static int num_buffers=1; // default | |
79 static XvImage* xvimage[NUM_BUFFERS]; | |
80 | |
81 | |
1 | 82 static uint32_t image_width; |
83 static uint32_t image_height; | |
84 static uint32_t image_format; | |
4629 | 85 static int flip_flag; |
1 | 86 |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
87 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
|
88 |
182 | 89 static Window mRoot; |
5945 | 90 static uint32_t drwX,drwY,drwBorderWidth,drwDepth; |
91 static uint32_t dwidth,dheight; | |
1 | 92 |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
93 static void (*draw_alpha_fnc)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride); |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
94 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
95 static void draw_alpha_yv12(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
8793 | 96 x0+=image_width*(vo_panscan_x>>1)/(vo_dwidth+vo_panscan_x); |
6295 | 97 vo_draw_alpha_yv12(w,h,src,srca,stride, |
98 xvimage[current_buf]->data+xvimage[current_buf]->offsets[0]+ | |
99 xvimage[current_buf]->pitches[0]*y0+x0,xvimage[current_buf]->pitches[0]); | |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
100 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
101 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
102 static void draw_alpha_yuy2(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
8793 | 103 x0+=image_width*(vo_panscan_x>>1)/(vo_dwidth+vo_panscan_x); |
6295 | 104 vo_draw_alpha_yuy2(w,h,src,srca,stride, |
105 xvimage[current_buf]->data+xvimage[current_buf]->offsets[0]+ | |
106 xvimage[current_buf]->pitches[0]*y0+2*x0,xvimage[current_buf]->pitches[0]); | |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
107 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
108 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
109 static void draw_alpha_uyvy(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
8793 | 110 x0+=image_width*(vo_panscan_x>>1)/(vo_dwidth+vo_panscan_x); |
6295 | 111 vo_draw_alpha_yuy2(w,h,src,srca,stride, |
112 xvimage[current_buf]->data+xvimage[current_buf]->offsets[0]+ | |
113 xvimage[current_buf]->pitches[0]*y0+2*x0+1,xvimage[current_buf]->pitches[0]); | |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
114 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
115 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
116 static void draw_alpha_null(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
117 } |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
118 |
6786 | 119 |
7757 | 120 static void deallocate_xvimage(int foo); |
121 | |
182 | 122 /* |
123 * connect to server, create and map window, | |
1 | 124 * allocate colors and (shared) memory |
125 */ | |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
7111
diff
changeset
|
126 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) |
1 | 127 { |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
844
diff
changeset
|
128 // int screen; |
182 | 129 char *hello = (title == NULL) ? "Xv render" : title; |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
844
diff
changeset
|
130 // char *name = ":0.0"; |
182 | 131 XSizeHints hint; |
132 XVisualInfo vinfo; | |
133 XGCValues xgcv; | |
134 XSetWindowAttributes xswa; | |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
7124
diff
changeset
|
135 XWindowAttributes attribs; |
182 | 136 unsigned long xswamask; |
7472
c4434bdf6e51
tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents:
7124
diff
changeset
|
137 int depth; |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
138 #ifdef HAVE_XF86VM |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
139 int vm=0; |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
140 unsigned int modeline_width, modeline_height; |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
141 static uint32_t vm_width; |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
142 static uint32_t vm_height; |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
143 #endif |
1 | 144 |
6307 | 145 panscan_init(); |
6304
ee65527096c2
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
arpi
parents:
6295
diff
changeset
|
146 |
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
|
147 aspect_save_orig(width,height); |
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2055
diff
changeset
|
148 aspect_save_prescale(d_width,d_height); |
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2055
diff
changeset
|
149 |
182 | 150 image_height = height; |
151 image_width = width; | |
152 image_format=format; | |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
153 |
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
154 vo_mouse_autohide=1; |
1 | 155 |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
156 int_pause=0; |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
157 |
8743
68a0f5e77257
10l, geometry always returns 1. i think this is the correct fix.
rfelker
parents:
8738
diff
changeset
|
158 vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; |
9517 | 159 geometry(&vo_dx, &vo_dy, &d_width, &d_height, vo_screenwidth, vo_screenheight); |
5945 | 160 vo_dwidth=d_width; vo_dheight=d_height; |
4981 | 161 |
4978 | 162 #ifdef HAVE_XF86VM |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
163 if( flags&0x02 ) vm = 1; |
4978 | 164 #endif |
4629 | 165 flip_flag=flags&8; |
6758
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
166 num_buffers=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
|
167 |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
168 /* check image formats */ |
10855 | 169 { |
170 unsigned int i; | |
171 | |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
172 xv_format=0; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
173 for(i = 0; i < formats; i++){ |
5935 | 174 mp_msg(MSGT_VO,MSGL_V,"Xvideo image format: 0x%x (%4.4s) %s\n", fo[i].id,(char*)&fo[i].id, (fo[i].format == XvPacked) ? "packed" : "planar"); |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
175 if (fo[i].id == format) xv_format = fo[i].id; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
176 } |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
177 if (!xv_format) return -1; |
10855 | 178 } |
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
|
179 aspect_save_screenres(vo_screenwidth,vo_screenheight); |
48f0ac1e9d13
Update to new (cleaner, more bugfree, better) aspect api. vo_gl vo_gl2 and vo_xmga are untested!
atmos4
parents:
2055
diff
changeset
|
180 |
1775 | 181 #ifdef HAVE_NEW_GUI |
5985 | 182 if(use_gui) |
183 guiGetEvent( guiSetShVideo,0 ); // let the GUI to setup/resize our window | |
184 else | |
185 #endif | |
182 | 186 { |
6043 | 187 hint.x = vo_dx; |
188 hint.y = vo_dy; | |
10323 | 189 aspect(&d_width,&d_height,A_NOZOOM); |
723 | 190 hint.width = d_width; |
191 hint.height = d_height; | |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
192 #ifdef HAVE_XF86VM |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
193 if ( vm ) |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
194 { |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
195 if ((d_width==0) && (d_height==0)) |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
196 { vm_width=image_width; vm_height=image_height; } |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
197 else |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
198 { vm_width=d_width; vm_height=d_height; } |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
199 vo_vm_switch(vm_width, vm_height,&modeline_width, &modeline_height); |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
200 hint.x=(vo_screenwidth-modeline_width)/2; |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
201 hint.y=(vo_screenheight-modeline_height)/2; |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
202 hint.width=modeline_width; |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
203 hint.height=modeline_height; |
6125 | 204 aspect_save_screenres(modeline_width,modeline_height); |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
205 } |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
206 else |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
207 #endif |
4981 | 208 if ( vo_fs ) |
723 | 209 { |
2054 | 210 #ifdef X11_FULLSCREEN |
2031
624df8ea0e0e
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
1924
diff
changeset
|
211 /* this code replaces X11_FULLSCREEN hack in mplayer.c |
2054 | 212 * aspect() is available through aspect.h for all vos. |
2031
624df8ea0e0e
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
1924
diff
changeset
|
213 * besides zooming should only be done with -zoom, |
624df8ea0e0e
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
1924
diff
changeset
|
214 * but I leave the old -fs behaviour so users don't get |
624df8ea0e0e
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
1924
diff
changeset
|
215 * irritated for now (and send lots o' mails ;) ::atmos |
624df8ea0e0e
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
1924
diff
changeset
|
216 */ |
624df8ea0e0e
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
1924
diff
changeset
|
217 |
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
|
218 aspect(&d_width,&d_height,A_ZOOM); |
2031
624df8ea0e0e
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
1924
diff
changeset
|
219 #endif |
624df8ea0e0e
New aspect prescale code, parses aspect value from mpeg sequence header or commandline.
atmos4
parents:
1924
diff
changeset
|
220 |
723 | 221 } |
5945 | 222 // dwidth=d_width; dheight=d_height; //XXX: what are the copy vars used for? |
223 vo_dwidth=d_width; vo_dheight=d_height; | |
5981 | 224 hint.flags = PPosition | PSize /* | PBaseSize */; |
225 hint.base_width = hint.width; hint.base_height = hint.height; | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
844
diff
changeset
|
226 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs); |
723 | 227 depth=attribs.depth; |
228 if (depth != 15 && depth != 16 && depth != 24 && depth != 32) depth = 24; | |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
844
diff
changeset
|
229 XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo); |
723 | 230 |
231 xswa.background_pixel = 0; | |
232 xswa.border_pixel = 0; | |
233 xswamask = CWBackPixel | CWBorderPixel; | |
1 | 234 |
3830 | 235 if ( WinID>=0 ){ |
6043 | 236 vo_window = WinID ? ((Window)WinID) : mRootWin; |
237 if ( WinID ) | |
238 { | |
239 XUnmapWindow( mDisplay,vo_window ); | |
240 XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa ); | |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6793
diff
changeset
|
241 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); |
6366
287c2e661172
-wid fix by "Markus J.R." <random@shell.dnload.com>
atmos4
parents:
6332
diff
changeset
|
242 XMapWindow( mDisplay,vo_window ); |
6043 | 243 } else { drwX=vo_dx; drwY=vo_dy; } |
3830 | 244 } else |
7757 | 245 if ( vo_window == None ){ |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
246 vo_window = vo_x11_create_smooth_window(mDisplay, mRootWin, vinfo.visual, hint.x, hint.y, hint.width, hint.height, depth, CopyFromParent); |
3830 | 247 |
6043 | 248 vo_x11_classhint( mDisplay,vo_window,"xv" ); |
249 vo_hidecursor(mDisplay,vo_window); | |
3830 | 250 |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6793
diff
changeset
|
251 vo_x11_selectinput_witherr(mDisplay, vo_window, StructureNotifyMask | KeyPressMask | PropertyChangeMask | |
5822 | 252 ((WinID==0) ? 0 : (PointerMotionMask |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
253 | ButtonPressMask | ButtonReleaseMask | ExposureMask |
6043 | 254 ))); |
255 XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint); | |
256 XSetWMNormalHints( mDisplay,vo_window,&hint ); | |
257 XMapWindow(mDisplay, vo_window); | |
258 if ( flags&1 ) vo_x11_fullscreen(); | |
10323 | 259 else { |
3990 | 260 #ifdef HAVE_XINERAMA |
10323 | 261 vo_x11_xinerama_move(mDisplay,vo_window); |
3990 | 262 #endif |
10323 | 263 vo_x11_sizehint( hint.x, hint.y, hint.width, hint.height,0 ); |
264 } | |
9161 | 265 } else { |
266 // vo_fs set means we were already at fullscreen | |
267 vo_x11_sizehint( hint.x, hint.y, hint.width, hint.height,0 ); | |
268 if ( !vo_fs ) XMoveResizeWindow( mDisplay,vo_window,hint.x,hint.y,hint.width,hint.height ); | |
269 if ( flags&1 && !vo_fs ) vo_x11_fullscreen(); // handle -fs on non-first file | |
270 } | |
271 | |
272 // vo_x11_sizehint( hint.x, hint.y, hint.width, hint.height,0 ); | |
273 | |
7765 | 274 if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc ); |
6043 | 275 vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv); |
276 XFlush(mDisplay); | |
277 XSync(mDisplay, False); | |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
278 #ifdef HAVE_XF86VM |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
279 if ( vm ) |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
280 { |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
281 /* Grab the mouse pointer in our window */ |
7539
56ea9db91251
-nograbpointer, based on old patch by Christian Ohm <chr.ohm@gmx.net>
arpi
parents:
7526
diff
changeset
|
282 if(vo_grabpointer) |
4795 | 283 XGrabPointer(mDisplay, vo_window, True, 0, |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
284 GrabModeAsync, GrabModeAsync, |
4795 | 285 vo_window, None, CurrentTime); |
286 XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime); | |
4426
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
287 } |
1ceadec3ea67
using the common -vm code, patch by Santi B«±jar <tiarda@yahoo.es>
arpi
parents:
4406
diff
changeset
|
288 #endif |
5985 | 289 } |
1 | 290 |
5935 | 291 mp_msg(MSGT_VO,MSGL_V, "using Xvideo port %d for hw scaling\n",xv_port ); |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
292 |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
293 switch (xv_format){ |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
294 case IMGFMT_YV12: |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
295 case IMGFMT_I420: |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
296 case IMGFMT_IYUV: draw_alpha_fnc=draw_alpha_yv12; break; |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
297 case IMGFMT_YUY2: |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
298 case IMGFMT_YVYU: draw_alpha_fnc=draw_alpha_yuy2; break; |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
299 case IMGFMT_UYVY: draw_alpha_fnc=draw_alpha_uyvy; break; |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
300 default: draw_alpha_fnc=draw_alpha_null; |
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
301 } |
182 | 302 |
7757 | 303 if ( vo_config_count ) |
304 for(current_buf=0;current_buf<num_buffers;++current_buf) | |
305 deallocate_xvimage(current_buf); | |
306 | |
1647
22480104ddfd
added draw_alpha_XXXX functions, draw_alpha_func<=correct one in init
atlka
parents:
1501
diff
changeset
|
307 for(current_buf=0;current_buf<num_buffers;++current_buf) |
676
428755f858f7
multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents:
616
diff
changeset
|
308 allocate_xvimage(current_buf); |
428755f858f7
multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents:
616
diff
changeset
|
309 |
428755f858f7
multi buffering added (modify NUM_BUFFERS in the source)
arpi_esp
parents:
616
diff
changeset
|
310 current_buf=0; |
6758
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
311 current_ip_buf=0; |
1 | 312 |
6764
7755d1d59394
fix hue bug with nvidia's shit. i teszted with g400,radeon7500,tnt2ultra,geforce2mx200
pontscho
parents:
6760
diff
changeset
|
313 #if 0 |
4396 | 314 set_gamma_correction(); |
6764
7755d1d59394
fix hue bug with nvidia's shit. i teszted with g400,radeon7500,tnt2ultra,geforce2mx200
pontscho
parents:
6760
diff
changeset
|
315 #endif |
1818 | 316 |
5945 | 317 aspect(&vo_dwidth,&vo_dheight,A_NOZOOM); |
9161 | 318 if ( (( flags&1 )&&( WinID <= 0 )) || vo_fs ) |
182 | 319 { |
5945 | 320 aspect(&vo_dwidth,&vo_dheight,A_ZOOM); |
321 drwX=( vo_screenwidth - (vo_dwidth > vo_screenwidth?vo_screenwidth:vo_dwidth) ) / 2; | |
322 drwY=( vo_screenheight - (vo_dheight > vo_screenheight?vo_screenheight:vo_dheight) ) / 2; | |
323 vo_dwidth=(vo_dwidth > vo_screenwidth?vo_screenwidth:vo_dwidth); | |
324 vo_dheight=(vo_dheight > vo_screenheight?vo_screenheight:vo_dheight); | |
325 mp_msg(MSGT_VO,MSGL_V, "[xv-fs] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight ); | |
182 | 326 } |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6366
diff
changeset
|
327 |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6366
diff
changeset
|
328 panscan_calc(); |
9381
007a1bdce1f4
reversed small part of the r1.135 commit, it broke -fs (random black screen)
arpi
parents:
9326
diff
changeset
|
329 |
9161 | 330 XClearWindow(mDisplay, vo_window); |
9381
007a1bdce1f4
reversed small part of the r1.135 commit, it broke -fs (random black screen)
arpi
parents:
9326
diff
changeset
|
331 #if 0 |
9161 | 332 #ifdef HAVE_SHM |
333 if ( Shmem_Flag ) | |
334 { | |
335 XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0, image_width, image_height, drwX, drwY, 1, 1, False); | |
336 XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0, image_width, image_height, drwX,drwY,vo_dwidth,(vo_fs?vo_dheight - 1:vo_dheight), False); | |
337 } | |
338 else | |
339 #endif | |
340 { | |
341 XvPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0, image_width, image_height, drwX, drwY, 1, 1); | |
342 XvPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0, image_width, image_height, drwX,drwY,vo_dwidth,(vo_fs?vo_dheight - 1:vo_dheight)); | |
343 } | |
9381
007a1bdce1f4
reversed small part of the r1.135 commit, it broke -fs (random black screen)
arpi
parents:
9326
diff
changeset
|
344 #endif |
6043 | 345 |
5945 | 346 mp_msg(MSGT_VO,MSGL_V, "[xv] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight ); |
347 | |
4316 | 348 saver_off(mDisplay); // turning off screen saver |
182 | 349 return 0; |
1 | 350 } |
351 | |
182 | 352 static void allocate_xvimage(int foo) |
1 | 353 { |
182 | 354 /* |
355 * allocate XvImages. FIXME: no error checking, without | |
6416 | 356 * mit-shm this will bomb... trzing to fix ::atmos |
182 | 357 */ |
6416 | 358 #ifdef HAVE_SHM |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
359 if ( mLocalDisplay && XShmQueryExtension( mDisplay ) ) Shmem_Flag = 1; |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
360 else |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
361 { |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
362 Shmem_Flag = 0; |
5935 | 363 mp_msg(MSGT_VO,MSGL_INFO, "Shared memory not supported\nReverting to normal Xv\n" ); |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
364 } |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
365 if ( Shmem_Flag ) |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
366 { |
7848 | 367 xvimage[foo] = (XvImage *) XvShmCreateImage(mDisplay, xv_port, xv_format, NULL, image_width, image_height, &Shminfo[foo]); |
1 | 368 |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
369 Shminfo[foo].shmid = shmget(IPC_PRIVATE, xvimage[foo]->data_size, IPC_CREAT | 0777); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
370 Shminfo[foo].shmaddr = (char *) shmat(Shminfo[foo].shmid, 0, 0); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
371 Shminfo[foo].readOnly = False; |
1 | 372 |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
373 xvimage[foo]->data = Shminfo[foo].shmaddr; |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
374 XShmAttach(mDisplay, &Shminfo[foo]); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
375 XSync(mDisplay, False); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
376 shmctl(Shminfo[foo].shmid, IPC_RMID, 0); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
377 } |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
378 else |
6416 | 379 #endif |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
380 { |
7848 | 381 xvimage[foo] = (XvImage *) XvCreateImage(mDisplay, xv_port, xv_format, NULL, image_width, image_height); |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
382 xvimage[foo]->data = malloc(xvimage[foo]->data_size); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
383 XSync(mDisplay,False); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
384 } |
182 | 385 memset(xvimage[foo]->data,128,xvimage[foo]->data_size); |
386 return; | |
1 | 387 } |
388 | |
1794 | 389 static void deallocate_xvimage(int foo) |
390 { | |
6416 | 391 #ifdef HAVE_SHM |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
392 if ( Shmem_Flag ) |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
393 { |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
394 XShmDetach( mDisplay,&Shminfo[foo] ); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
395 shmdt( Shminfo[foo].shmaddr ); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
396 } |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
397 else |
6416 | 398 #endif |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
399 { |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
400 free(xvimage[foo]->data); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
401 } |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
402 XFree(xvimage[foo]); |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
403 |
1794 | 404 XFlush( mDisplay ); |
405 XSync(mDisplay, False); | |
406 return; | |
407 } | |
408 | |
31 | 409 static void check_events(void) |
1 | 410 { |
922
db06ae8967eb
Centralized and cleaned up X11 connecting, fixed remote X11 playing, -display option for mplayer. SHOULD BE TESTED.
lgb
parents:
844
diff
changeset
|
411 int e=vo_x11_check_events(mDisplay); |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
412 |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
413 if (e&VO_EVENT_EXPOSE && vo_fs) |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
414 vo_x11_clearwindow(mDisplay, vo_window); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
415 |
182 | 416 if(e&VO_EVENT_RESIZE) |
417 { | |
7056
ad9a06fc40f8
added forced window clearing for Xv, because on my setup (sawfish,
arpi
parents:
6953
diff
changeset
|
418 if (vo_fs) { |
ad9a06fc40f8
added forced window clearing for Xv, because on my setup (sawfish,
arpi
parents:
6953
diff
changeset
|
419 e |= VO_EVENT_EXPOSE; |
ad9a06fc40f8
added forced window clearing for Xv, because on my setup (sawfish,
arpi
parents:
6953
diff
changeset
|
420 XClearWindow(mDisplay, vo_window); |
ad9a06fc40f8
added forced window clearing for Xv, because on my setup (sawfish,
arpi
parents:
6953
diff
changeset
|
421 XFlush(mDisplay); |
ad9a06fc40f8
added forced window clearing for Xv, because on my setup (sawfish,
arpi
parents:
6953
diff
changeset
|
422 } |
ad9a06fc40f8
added forced window clearing for Xv, because on my setup (sawfish,
arpi
parents:
6953
diff
changeset
|
423 |
5945 | 424 XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&vo_dwidth,&vo_dheight,&drwBorderWidth,&drwDepth ); |
5981 | 425 drwX = drwY = 0; |
5945 | 426 mp_msg(MSGT_VO,MSGL_V, "[xv] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight ); |
1 | 427 |
3558 | 428 aspect(&dwidth,&dheight,A_NOZOOM); |
4981 | 429 if ( vo_fs ) |
182 | 430 { |
3558 | 431 aspect(&dwidth,&dheight,A_ZOOM); |
182 | 432 drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2; |
433 drwY=( vo_screenheight - (dheight > vo_screenheight?vo_screenheight:dheight) ) / 2; | |
5945 | 434 vo_dwidth=(dwidth > vo_screenwidth?vo_screenwidth:dwidth); |
435 vo_dheight=(dheight > vo_screenheight?vo_screenheight:dheight); | |
436 mp_msg(MSGT_VO,MSGL_V, "[xv-fs] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight ); | |
182 | 437 } |
438 } | |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
439 |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
440 if ( (e&VO_EVENT_EXPOSE || e&VO_EVENT_RESIZE) && 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
|
441 flip_page(); |
1 | 442 } |
443 | |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1265
diff
changeset
|
444 static void draw_osd(void) |
8793 | 445 { vo_draw_text(image_width-image_width*vo_panscan_x/(vo_dwidth+vo_panscan_x),image_height,draw_alpha_fnc);} |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1265
diff
changeset
|
446 |
182 | 447 static void flip_page(void) |
1 | 448 { |
6304
ee65527096c2
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
arpi
parents:
6295
diff
changeset
|
449 |
6416 | 450 #ifdef HAVE_SHM |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
451 if ( Shmem_Flag ) |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
452 { |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
453 XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], |
182 | 454 0, 0, image_width, image_height, |
6307 | 455 drwX-(vo_panscan_x>>1),drwY-(vo_panscan_y>>1),vo_dwidth+vo_panscan_x,(vo_fs?vo_dheight - 1:vo_dheight)+vo_panscan_y, |
182 | 456 False); |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
457 } |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
458 else |
6416 | 459 #endif |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
460 { |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
461 XvPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], |
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
462 0, 0, image_width, image_height, |
6307 | 463 drwX-(vo_panscan_x>>1),drwY-(vo_panscan_y>>1),vo_dwidth+vo_panscan_x,(vo_fs?vo_dheight - 1:vo_dheight)+vo_panscan_y); |
5622
d354889a3944
Support XV over remote connections, patch by Dmitry Karasik <dimakar at yahoo.com>
atmos4
parents:
5607
diff
changeset
|
464 } |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1265
diff
changeset
|
465 if (num_buffers>1){ |
6758
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
466 current_buf=vo_directrendering?0:((current_buf+1)%num_buffers); |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1265
diff
changeset
|
467 XFlush(mDisplay); |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1265
diff
changeset
|
468 } else |
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1265
diff
changeset
|
469 XSync(mDisplay, False); |
182 | 470 return; |
1 | 471 } |
472 | |
182 | 473 static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y) |
1 | 474 { |
182 | 475 uint8_t *dst; |
476 | |
6231 | 477 dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[0] + |
478 xvimage[current_buf]->pitches[0]*y + x; | |
7684 | 479 memcpy_pic(dst, image[0], w, h, xvimage[current_buf]->pitches[0], stride[0]); |
182 | 480 |
481 x/=2;y/=2;w/=2;h/=2; | |
1 | 482 |
6231 | 483 dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[1] + |
484 xvimage[current_buf]->pitches[1]*y + x; | |
7684 | 485 if(image_format!=IMGFMT_YV12) |
486 memcpy_pic(dst, image[1], w, h, xvimage[current_buf]->pitches[1], stride[1]); | |
487 else | |
488 memcpy_pic(dst, image[2], w, h, xvimage[current_buf]->pitches[1], stride[2]); | |
5316 | 489 |
6231 | 490 dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[2] + |
491 xvimage[current_buf]->pitches[2]*y + x; | |
7684 | 492 if(image_format==IMGFMT_YV12) |
493 memcpy_pic(dst, image[1], w, h, xvimage[current_buf]->pitches[1], stride[1]); | |
494 else | |
495 memcpy_pic(dst, image[2], w, h, xvimage[current_buf]->pitches[1], stride[2]); | |
6231 | 496 |
182 | 497 return 0; |
1 | 498 } |
499 | |
7684 | 500 static uint32_t draw_frame(uint8_t *src[]){ |
501 printf("draw_frame() called!!!!!!"); | |
502 return -1; | |
1 | 503 } |
504 | |
6760 | 505 static uint32_t draw_image(mp_image_t *mpi){ |
506 if(mpi->flags&MP_IMGFLAG_DIRECT){ | |
507 // direct rendering: | |
508 current_buf=(int)(mpi->priv); // hack! | |
509 return VO_TRUE; | |
510 } | |
7684 | 511 if(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK) return VO_TRUE; // done |
512 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
513 draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,0,0); | |
514 return VO_TRUE; | |
515 } | |
516 if(mpi->flags&MP_IMGFLAG_YUV){ | |
517 // packed YUV: | |
518 memcpy_pic(xvimage[current_buf]->data+xvimage[current_buf]->offsets[0], | |
519 mpi->planes[0],mpi->w*(mpi->bpp/8),mpi->h, | |
520 xvimage[current_buf]->pitches[0], mpi->stride[0]); | |
521 return VO_TRUE; | |
522 } | |
6760 | 523 return VO_FALSE; // not (yet) supported |
524 } | |
525 | |
4980 | 526 static uint32_t get_image(mp_image_t *mpi){ |
6758
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
527 int buf=current_buf; // we shouldn't change current_buf unless we do DR! |
4980 | 528 if(mpi->type==MP_IMGTYPE_STATIC && num_buffers>1) return VO_FALSE; // it is not static |
10113 | 529 if(mpi->imgfmt!=image_format) return VO_FALSE; // needs conversion :( |
4980 | 530 // if(mpi->flags&MP_IMGFLAG_READABLE) return VO_FALSE; // slow video ram |
6758
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
531 if(mpi->flags&MP_IMGFLAG_READABLE && |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
532 (mpi->type==MP_IMGTYPE_IPB || mpi->type==MP_IMGTYPE_IP)){ |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
533 // reference (I/P) frame of IP or IPB: |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
534 if(num_buffers<2) return VO_FALSE; // not enough |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
535 current_ip_buf^=1; |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
536 // for IPB with 2 buffers we can DR only one of the 2 P frames: |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
537 if(mpi->type==MP_IMGTYPE_IPB && num_buffers<3 && current_ip_buf) return VO_FALSE; |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
538 buf=current_ip_buf; |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
539 if(mpi->type==MP_IMGTYPE_IPB) ++buf; // preserve space for B |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
540 } |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
541 if(mpi->height > xvimage[buf]->height) return VO_FALSE; //buffer to small |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
542 if(mpi->width*(mpi->bpp/8) > xvimage[buf]->pitches[0]) return VO_FALSE; //buffer to small |
6231 | 543 if( (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH)) || |
6758
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
544 (mpi->width*(mpi->bpp/8)==xvimage[buf]->pitches[0]) ){ |
ecc71f27bfd7
DR1 IP/IPB supoprt (I/P only with -double) -- OSD *must be* disabled! :)
arpi
parents:
6755
diff
changeset
|
545 current_buf=buf; |
6231 | 546 mpi->planes[0]=xvimage[current_buf]->data+xvimage[current_buf]->offsets[0]; |
547 mpi->stride[0]=xvimage[current_buf]->pitches[0]; | |
548 mpi->width=mpi->stride[0]/(mpi->bpp/8); | |
549 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
550 if(mpi->flags&MP_IMGFLAG_SWAPPED){ | |
551 // I420 | |
552 mpi->planes[1]=xvimage[current_buf]->data+xvimage[current_buf]->offsets[1]; | |
553 mpi->planes[2]=xvimage[current_buf]->data+xvimage[current_buf]->offsets[2]; | |
554 mpi->stride[1]=xvimage[current_buf]->pitches[1]; | |
555 mpi->stride[2]=xvimage[current_buf]->pitches[2]; | |
556 } else { | |
5316 | 557 // YV12 |
6231 | 558 mpi->planes[1]=xvimage[current_buf]->data+xvimage[current_buf]->offsets[2]; |
559 mpi->planes[2]=xvimage[current_buf]->data+xvimage[current_buf]->offsets[1]; | |
560 mpi->stride[1]=xvimage[current_buf]->pitches[2]; | |
561 mpi->stride[2]=xvimage[current_buf]->pitches[1]; | |
562 } | |
563 } | |
4980 | 564 mpi->flags|=MP_IMGFLAG_DIRECT; |
6760 | 565 mpi->priv=(void*)current_buf; |
4980 | 566 // printf("mga: get_image() SUCCESS -> Direct Rendering ENABLED\n"); |
567 return VO_TRUE; | |
568 } | |
569 return VO_FALSE; | |
570 } | |
571 | |
182 | 572 static uint32_t query_format(uint32_t format) |
1 | 573 { |
10855 | 574 uint32_t i; |
9027 | 575 int flag=VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW| |
576 VFCAP_HWSCALE_UP|VFCAP_HWSCALE_DOWN|VFCAP_OSD|VFCAP_ACCEPT_STRIDE; // FIXME! check for DOWN | |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
577 /* check image formats */ |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
578 for(i = 0; i < formats; i++){ |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
579 if (fo[i].id == format) return flag; //xv_format = fo[i].id; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
580 } |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
581 return 0; |
1 | 582 } |
583 | |
1852 | 584 static void uninit(void) |
585 { | |
586 int i; | |
6016 | 587 if ( !vo_config_count ) return; |
9981
99b58133c376
memleak fix by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents:
9517
diff
changeset
|
588 XvFreeAdaptorInfo(ai); |
99b58133c376
memleak fix by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents:
9517
diff
changeset
|
589 ai = NULL; |
6016 | 590 saver_on(mDisplay); // screen saver back on |
591 for( i=0;i<num_buffers;i++ ) deallocate_xvimage( i ); | |
592 #ifdef HAVE_XF86VM | |
593 vo_vm_close(mDisplay); | |
594 #endif | |
6095 | 595 vo_x11_uninit(); |
322
4e69a8e2700a
Screensaver and monitor powersafe function is switched off when playing a
laaz
parents:
249
diff
changeset
|
596 } |
1 | 597 |
4352 | 598 static uint32_t preinit(const char *arg) |
599 { | |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
600 XvPortID xv_p; |
6174
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
601 int busy_ports=0; |
10855 | 602 unsigned int i; |
6016 | 603 |
10826 | 604 xv_port = 0; |
605 | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
606 if(arg) |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
607 { |
10826 | 608 if ((strlen(arg) >= 6) && !strncmp(arg, "port=", 5)) |
609 { | |
610 xv_port = atoi(arg+5); | |
611 } | |
612 else | |
613 { | |
614 mp_msg(MSGT_VO,MSGL_ERR,"vo_xv: Unknown subdevice: %s\n",arg); | |
615 return ENOSYS; | |
616 } | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
617 } |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
618 if (!vo_init()) return -1; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
619 |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
620 /* check for Xvideo extension */ |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
621 if (Success != XvQueryExtension(mDisplay,&ver,&rel,&req,&ev,&err)){ |
5935 | 622 mp_msg(MSGT_VO,MSGL_ERR,"Sorry, Xv not supported by this X11 version/driver\n"); |
623 mp_msg(MSGT_VO,MSGL_ERR,"******** Try with -vo x11 or -vo sdl *********\n"); | |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
624 return -1; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
625 } |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
626 |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
627 /* check for Xvideo support */ |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
628 if (Success != XvQueryAdaptors(mDisplay,DefaultRootWindow(mDisplay), &adaptors,&ai)){ |
10826 | 629 mp_msg(MSGT_VO,MSGL_ERR,"Xv: XvQueryAdaptors failed\n"); |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
630 return -1; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
631 } |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
632 |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
633 /* check adaptors */ |
10839 | 634 if (xv_port) { |
635 int port_found; | |
636 | |
637 for (port_found = 0, i = 0; !port_found && i < adaptors; i++) { | |
638 if ((ai[i].type & XvInputMask) && (ai[i].type & XvImageMask)) { | |
639 for (xv_p = ai[i].base_id; xv_p < ai[i].base_id+ai[i].num_ports; ++xv_p) { | |
640 if (xv_p == xv_port) { | |
641 port_found = 1; | |
642 break; | |
643 } | |
644 } | |
645 } | |
646 } | |
647 if (port_found) { | |
648 if (XvGrabPort(mDisplay, xv_port, CurrentTime)) | |
649 xv_port = 0; | |
650 } else { | |
651 mp_msg(MSGT_VO, MSGL_WARN,"Xv: Invalid port parameter, overriding with port 0\n"); | |
652 xv_port = 0; | |
653 } | |
10826 | 654 } |
655 | |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
656 for (i = 0; i < adaptors && xv_port == 0; i++){ |
5935 | 657 if ((ai[i].type & XvInputMask) && (ai[i].type & XvImageMask)) { |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
658 for (xv_p = ai[i].base_id; xv_p < ai[i].base_id+ai[i].num_ports; ++xv_p) |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
659 if (!XvGrabPort(mDisplay, xv_p, CurrentTime)) { |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
660 xv_port = xv_p; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
661 break; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
662 } else { |
6174
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
663 mp_msg(MSGT_VO,MSGL_WARN,"Xv: could not grab port %i\n", (int)xv_p); |
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
664 ++busy_ports; |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
665 } |
5935 | 666 } |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
667 } |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
668 if(!xv_port){ |
6174
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
669 if(busy_ports) |
6249 | 670 mp_msg(MSGT_VO,MSGL_ERR,"Could not find free Xvideo port - maybe another process is already using it.\n" |
6174
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
671 "Close all video applications, and try again. If that does not help,\n" |
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
672 "see 'mplayer -vo help' for other (non-xv) video out drivers.\n"); |
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
673 else |
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
674 mp_msg(MSGT_VO,MSGL_ERR,"It seems there is no Xvideo support for your video card available.\n" |
10286 | 675 "Run 'xvinfo' to verify its Xv support and read DOCS/en/video.html#xv!\n" |
6174
9676d7735332
different message for busy Xv ports and missing Xv ports
arpi
parents:
6125
diff
changeset
|
676 "See 'mplayer -vo help' for other (non-xv) video out drivers. Try -vo x11\n"); |
5509
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
677 return -1; |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
678 } |
1e90dd889c34
initialization moved to preinit(), query_format now really checks for supported formats
arpi
parents:
5466
diff
changeset
|
679 |
7857
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
680 { |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
681 int howmany, i; |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
682 const XvAttribute * const attributes = XvQueryPortAttributes(mDisplay, xv_port, &howmany); |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
683 |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
684 for (i = 0; i < howmany && attributes; i++) |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
685 if (!strcmp(attributes[i].name, "XV_AUTOPAINT_COLORKEY")) |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
686 { |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
687 const Atom autopaint = XInternAtom(mDisplay, "XV_AUTOPAINT_COLORKEY", False); |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
688 XvSetPortAttribute(mDisplay, xv_port, autopaint, 1); |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
689 break; |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
690 } |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
691 } |
3c690d2ad1ac
MPlayer being unable to display video properly on many nVidia graphics cards.
arpi
parents:
7848
diff
changeset
|
692 |
5566 | 693 fo = XvListImageFormats(mDisplay, xv_port, (int*)&formats); |
694 | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
695 return 0; |
4352 | 696 } |
1 | 697 |
4596 | 698 static uint32_t control(uint32_t request, void *data, ...) |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
699 { |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
700 switch (request) { |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
701 case VOCTRL_PAUSE: return (int_pause=1); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
702 case VOCTRL_RESUME: return (int_pause=0); |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
703 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
704 return query_format(*((uint32_t*)data)); |
4980 | 705 case VOCTRL_GET_IMAGE: |
706 return get_image(data); | |
6760 | 707 case VOCTRL_DRAW_IMAGE: |
708 return draw_image(data); | |
6307 | 709 case VOCTRL_GUISUPPORT: |
710 return VO_TRUE; | |
711 case VOCTRL_GET_PANSCAN: | |
6311
da2dda48b7ec
add mute support ( step 1 ) and fixed panscan bugs (1000l for me)
pontscho
parents:
6307
diff
changeset
|
712 if ( !vo_config_count || !vo_fs ) return VO_FALSE; |
6307 | 713 return VO_TRUE; |
6332
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
714 case VOCTRL_FULLSCREEN: |
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
715 vo_x11_fullscreen(); |
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
716 /* indended, fallthrough to update panscan on fullscreen/windowed switch */ |
6307 | 717 case VOCTRL_SET_PANSCAN: |
6332
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
718 if ( ( vo_fs && ( vo_panscan != vo_panscan_amount ) ) || ( !vo_fs && vo_panscan_amount ) ) |
6307 | 719 { |
6332
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
720 int old_y = vo_panscan_y; |
6307 | 721 panscan_calc(); |
6332
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
722 |
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
723 if(old_y != vo_panscan_y) |
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
724 { |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
725 vo_x11_clearwindow_part(mDisplay, vo_window, vo_dwidth+vo_panscan_x-1, vo_dheight+vo_panscan_y-1, 1); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10359
diff
changeset
|
726 flip_page(); |
6332
ff858ab25b11
-vm pan&scan fixes by Jesper Svennevid <mplayer@svennevid.ne>
arpi
parents:
6311
diff
changeset
|
727 } |
6307 | 728 } |
729 return VO_TRUE; | |
6781 | 730 case VOCTRL_SET_EQUALIZER: |
731 { | |
732 va_list ap; | |
733 int value; | |
734 | |
735 va_start(ap, data); | |
736 value = va_arg(ap, int); | |
737 va_end(ap); | |
738 | |
10359 | 739 return(vo_xv_set_eq(xv_port, data, value)); |
6781 | 740 } |
6786 | 741 case VOCTRL_GET_EQUALIZER: |
742 { | |
743 va_list ap; | |
744 int *value; | |
745 | |
746 va_start(ap, data); | |
6793 | 747 value = va_arg(ap, int*); |
6786 | 748 va_end(ap); |
749 | |
10359 | 750 return(vo_xv_get_eq(xv_port, data, value)); |
6786 | 751 } |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
752 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
753 return VO_NOTIMPL; |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
754 } |