Mercurial > mplayer.hg
annotate libvo/vo_xover.c @ 32927:edb972e22021
Fix memory leak in appInitStruct().
The NumberOf{Main,Bar,Menu}Items members actually don't hold the
number of items but the last index used. Therefore, the last item
won't get freed so far.
To set the correct "number" for the global external variable prior
to using it, the function appResetStruct() has been added and is used
in appInitStruct() as well.
author | ib |
---|---|
date | Thu, 03 Mar 2011 13:45:30 +0000 |
parents | 09dd92639e7b |
children | ddb45e9443ec |
rev | line source |
---|---|
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
1 /* |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
2 * XOver a general x11 vo for MPlayer overlay drivers based on: |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
3 * VIDIX-accelerated overlay in an X window |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
4 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
5 * copyright (C) Alex Beregszaszi & Zoltan Ponekker & Nick Kurshev |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
6 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
7 * WS window manager by Pontscho/Fresh! |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
8 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
9 * based on vo_gl.c and vo_vesa.c and vo_xmga.c (.so mastah! ;)) |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
10 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
11 * This file is part of MPlayer. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
12 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
13 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
14 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
15 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
16 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
17 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
18 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
21 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
22 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
23 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
24 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
26 */ |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
27 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
28 #include <stdio.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
29 #include <stdlib.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
30 #include <string.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
31 #include <math.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
32 #include <errno.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
33 #include <unistd.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
34 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
35 #include "config.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
36 #include "video_out.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
37 #include "video_out_internal.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
38 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
39 #include <X11/Xlib.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
40 #include <X11/Xutil.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
41 //#include <X11/keysym.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
42 |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
43 #ifdef CONFIG_XINERAMA |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
44 #include <X11/extensions/Xinerama.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
45 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
46 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
47 #include "x11_common.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
48 #include "aspect.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
49 #include "mp_msg.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
50 |
27343 | 51 #ifdef CONFIG_GUI |
23077 | 52 #include "gui/interface.h" |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
53 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
54 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
55 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
56 static const vo_info_t info = |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
57 { |
12783 | 58 "General X11 driver for overlay capable video output drivers", |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
59 "xover", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
60 "Albeu", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
61 "" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
62 }; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
63 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
64 LIBVO_EXTERN(xover) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
65 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
66 /* X11 related variables */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
67 /* Colorkey handling */ |
10988 | 68 static int colorkey; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
69 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
70 /* Image parameters */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
71 static uint32_t image_width; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
72 static uint32_t image_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
73 static uint32_t image_format; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
74 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
75 /* Window parameters */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
76 static uint32_t window_x, window_y; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
77 static uint32_t window_width, window_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
78 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
79 /* used by XGetGeometry & XTranslateCoordinates for moving/resizing window */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
80 static uint32_t drwX, drwY, drwWidth, drwHeight, drwBorderWidth, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
81 drwDepth, drwcX, drwcY, dwidth, dheight; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
82 |
25219
e82ecde2cbd4
Mark several uses of vo_functions_t as const to stop some of the current
reimar
parents:
25216
diff
changeset
|
83 static const vo_functions_t* sub_vo = NULL; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
84 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
85 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
86 static void set_window(int force_update) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
87 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
88 Window mRoot; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
89 if ( WinID ) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
90 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
91 XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
92 &drwHeight, &drwBorderWidth, &drwDepth); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
93 drwX = drwY = 0; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
94 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
95 XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
96 &drwcX, &drwcY, &mRoot); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
97 aspect(&dwidth,&dheight,A_NOZOOM); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
98 if (!vo_fs) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
99 mp_msg(MSGT_VO, MSGL_V, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
100 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
101 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
102 /* following stuff copied from vo_xmga.c */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
103 } |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
104 else |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
105 { |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
106 aspect(&dwidth,&dheight,A_NOZOOM); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
107 drwcX=drwX=vo_dx; drwcY=drwY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
108 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
109 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
110 #if X11_FULLSCREEN |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
111 if (vo_fs) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
112 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
113 aspect(&dwidth,&dheight,A_ZOOM); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
114 drwX = (vo_screenwidth - ((int)dwidth > vo_screenwidth ? vo_screenwidth : dwidth)) / 2; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
115 drwcX = drwX; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
116 drwY = (vo_screenheight - ((int)dheight > vo_screenheight ? vo_screenheight : dheight)) / 2; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
117 drwcY = drwY; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
118 drwWidth = ((int)dwidth > vo_screenwidth ? vo_screenwidth : dwidth); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
119 drwHeight = ((int)dheight > vo_screenheight ? vo_screenheight : dheight); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
120 mp_msg(MSGT_VO, MSGL_V, "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
121 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
122 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
123 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
124 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
125 vo_dwidth=drwWidth; vo_dheight=drwHeight; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
126 |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
127 #ifdef CONFIG_XINERAMA |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
128 if (XineramaIsActive(mDisplay)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
129 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
130 XineramaScreenInfo *screens; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
131 int num_screens; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
132 int i = 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
133 |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
134 screens = XineramaQueryScreens(mDisplay, &num_screens); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
135 |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
136 /* find the screen we are on */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
137 while (i<num_screens && |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
138 ((screens[i].x_org < (int)drwcX) || |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
139 (screens[i].y_org < (int)drwcY) || |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
140 (screens[i].x_org + screens[i].width >= (int)drwcX) || |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
141 (screens[i].y_org + screens[i].height >= (int)drwcY))) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
142 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
143 i++; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
144 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
145 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
146 if(i<num_screens) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
147 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
148 /* save the screen we are on */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
149 xinerama_screen = i; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
150 } else { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
151 /* oops.. couldnt find the screen we are on |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
152 * because the upper left corner left the |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
153 * visual range. assume we are still on the |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
154 * same screen |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
155 */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
156 i = xinerama_screen; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
157 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
158 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
159 /* set drwcX and drwcY to the right values */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
160 drwcX = drwcX - screens[i].x_org; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
161 drwcY = drwcY - screens[i].y_org; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
162 XFree(screens); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
163 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
164 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
165 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
166 if ( vo_panscan > 0.0f && vo_fs ) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
167 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
168 drwcX-=vo_panscan_x >> 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
169 drwcY-=vo_panscan_y >> 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
170 drwX-=vo_panscan_x >> 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
171 drwY-=vo_panscan_y >> 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
172 drwWidth+=vo_panscan_x; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
173 drwHeight+=vo_panscan_y; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
174 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
175 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
176 /* set new values in VIDIX */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
177 if (force_update || (window_x != drwcX) || (window_y != drwcY) || |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
178 (window_width != drwWidth) || (window_height != drwHeight)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
179 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
180 mp_win_t w; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
181 // do a backup of window coordinates |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
182 w.x = window_x = drwcX; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
183 w.y = window_y = drwcY; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
184 vo_dx = drwcX; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
185 vo_dy = drwcY; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
186 w.w = window_width = drwWidth; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
187 w.h = window_height = drwHeight; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
188 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
189 if(sub_vo->control(VOCTRL_XOVERLAY_SET_WIN,&w) != VO_TRUE) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
190 mp_msg(MSGT_VO, MSGL_ERR, "xvidx: set_overlay failed\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
191 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
192 mp_msg(MSGT_VO, MSGL_V, "[xvidix] window properties: pos: %dx%d, size: %dx%d\n", vo_dx, vo_dy, window_width, window_height); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
193 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
194 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
195 /* mDrawColorKey: */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
196 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
197 /* fill drawable with specified color */ |
10988 | 198 XSetBackground(mDisplay, vo_gc, 0L); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
199 XClearWindow( mDisplay,vo_window ); |
10988 | 200 XSetForeground(mDisplay, vo_gc, colorkey); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
201 XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
202 (vo_fs ? drwHeight - 1 : drwHeight)); |
11542 | 203 |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
204 /* flush, update drawable */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
205 XFlush(mDisplay); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
206 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
207 return; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
208 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
209 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
210 /* connect to server, create and map window, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
211 * allocate colors and (shared) memory |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
212 */ |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
213 static int config(uint32_t width, uint32_t height, uint32_t d_width, |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
214 uint32_t d_height, uint32_t flags, char *title, uint32_t format) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
215 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
216 XVisualInfo vinfo; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
217 // XSizeHints hint; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
218 XSetWindowAttributes xswa; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
219 unsigned long xswamask; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
220 XWindowAttributes attribs; |
10988 | 221 int window_depth, r, g, b; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
222 mp_colorkey_t colork; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
223 char _title[255]; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
224 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
225 sprintf(_title,"MPlayer %s X11 Overlay",sub_vo->info->name); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
226 title = _title; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
227 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
228 panscan_init(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
229 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
230 image_height = height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
231 image_width = width; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
232 image_format = format; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
233 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
234 aspect_save_orig(width, height); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
235 aspect_save_prescale(d_width, d_height); |
18116 | 236 update_xinerama_info(); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
237 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
238 window_width = d_width; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
239 window_height = d_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
240 |
10988 | 241 r = (vo_colorkey & 0x00ff0000) >> 16; |
242 g = (vo_colorkey & 0x0000ff00) >> 8; | |
243 b = vo_colorkey & 0x000000ff; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
244 switch(vo_depthonscreen) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
245 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
246 case 32: |
10988 | 247 colorkey = vo_colorkey; |
248 break; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
249 case 24: |
10988 | 250 colorkey = vo_colorkey & 0x00ffffff; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
251 break; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
252 case 16: |
10988 | 253 colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
254 break; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
255 case 15: |
10988 | 256 colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
257 break; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
258 default: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
259 mp_msg(MSGT_VO, MSGL_ERR, "Sorry, this (%d) color depth is not supported\n", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
260 vo_depthonscreen); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
261 } |
13946 | 262 mp_msg(MSGT_VO, MSGL_V, "Using colorkey: %x\n", colorkey); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
263 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
264 aspect(&d_width, &d_height, A_NOZOOM); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
265 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
266 vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; |
18116 | 267 vo_dx += xinerama_x; |
268 vo_dy += xinerama_y; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
269 vo_dwidth=d_width; vo_dheight=d_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
270 |
27343 | 271 #ifdef CONFIG_GUI |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
272 if(use_gui) guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
273 else |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
274 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
275 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
276 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
277 #ifdef X11_FULLSCREEN |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13946
diff
changeset
|
278 if ( ( flags&VOFLAG_FULLSCREEN )||(flags & VOFLAG_SWSCALE) ) aspect(&d_width, &d_height, A_ZOOM); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
279 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
280 dwidth = d_width; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
281 dheight = d_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
282 /* Make the window */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
283 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
284 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
285 /* from vo_x11 */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
286 window_depth = attribs.depth; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
287 if ((window_depth != 15) && (window_depth != 16) && (window_depth != 24) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
288 && (window_depth != 32)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
289 window_depth = 24; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
290 XMatchVisualInfo(mDisplay, mScreen, window_depth, TrueColor, &vinfo); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
291 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
292 xswa.background_pixel = BlackPixel(mDisplay, mScreen); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
293 xswa.border_pixel = 0; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
294 xswa.colormap = XCreateColormap(mDisplay, RootWindow(mDisplay, mScreen), |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
295 vinfo.visual, AllocNone); |
27927
6f199f065e15
Factor common code like -wid handling, vo_gc creation etc. out into
reimar
parents:
27903
diff
changeset
|
296 xswamask = CWBackPixel | CWBorderPixel | CWColormap; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
297 |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23616
diff
changeset
|
298 vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23616
diff
changeset
|
299 window_width, window_height, flags, |
23822 | 300 xswa.colormap, "xvidix", title); |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23616
diff
changeset
|
301 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
302 |
27343 | 303 #ifdef CONFIG_GUI |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
304 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
305 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
306 |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13946
diff
changeset
|
307 if ( ( !WinID )&&( flags&VOFLAG_FULLSCREEN ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; } |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
308 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
309 if(sub_vo->config(image_width,image_height,vo_dwidth,vo_dheight, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
310 flags | VOFLAG_XOVERLAY_SUB_VO,NULL,format)) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
311 mp_msg(MSGT_VO, MSGL_ERR, "xover: sub vo config failed\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
312 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
313 } |
10988 | 314 colork.x11 = colorkey; |
315 colork.r = r; | |
316 colork.g = g; | |
317 colork.b = b; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
318 if(sub_vo->control(VOCTRL_XOVERLAY_SET_COLORKEY,&colork) != VO_TRUE) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
319 mp_msg(MSGT_VO, MSGL_WARN, "xover: set_colorkey failed\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
320 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
321 set_window(1); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
322 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
323 XSync(mDisplay, False); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
324 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
325 panscan_calc(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
326 |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25219
diff
changeset
|
327 return 0; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
328 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
329 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
330 static void check_events(void) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
331 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
332 const int event = vo_x11_check_events(mDisplay); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
333 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
334 if ((event & VO_EVENT_RESIZE) || (event & VO_EVENT_EXPOSE)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
335 set_window(0); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
336 sub_vo->check_events(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
337 return; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
338 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
339 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
340 /* draw_osd, flip_page, draw_slice, draw_frame should be |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
341 overwritten with vidix functions (vosub_vidix.c) */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
342 static void draw_osd(void) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
343 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
344 mp_msg(MSGT_VO, MSGL_FATAL, "xover error: didn't used sub vo draw_osd!\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
345 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
346 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
347 static void flip_page(void) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
348 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
349 mp_msg(MSGT_VO, MSGL_FATAL, "xover error: didn't used sub vo flip_page!\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
350 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
351 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
352 static int draw_slice(uint8_t *src[], int stride[], |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
353 int w, int h, int x, int y) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
354 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
355 mp_msg(MSGT_VO, MSGL_FATAL, "xover error: didn't used sub vo draw_slice!\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
356 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
357 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
358 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
359 static int draw_frame(uint8_t *src[]) |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
360 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
361 mp_msg(MSGT_VO, MSGL_FATAL, "xover error: didn't used sub vo draw_frame!\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
362 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
363 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
364 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
365 static void uninit(void) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
366 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
367 if(!vo_config_count) return; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
368 if(sub_vo) sub_vo->uninit(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
369 sub_vo = NULL; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
370 vo_x11_uninit(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
371 // Restore our callbacks |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
372 video_out_xover.draw_frame = draw_frame; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
373 video_out_xover.draw_slice = draw_slice; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
374 video_out_xover.flip_page = flip_page; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
375 video_out_xover.draw_osd = draw_osd; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
376 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
377 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
378 static int preinit(const char *arg) |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
379 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
380 int i; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
381 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
382 if(!arg) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
383 mp_msg(MSGT_VO, MSGL_ERR, "VO XOverlay need a subdriver\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
384 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
385 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
386 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
387 for(i = 0 ; video_out_drivers[i] != NULL ; i++) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
388 if(!strcmp(video_out_drivers[i]->info->short_name,arg) && |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
389 strcmp(video_out_drivers[i]->info->short_name,"xover")) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
390 break; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
391 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
392 if(!video_out_drivers[i]) { |
10718 | 393 mp_msg(MSGT_VO, MSGL_ERR, "VO XOverlay: Subdriver %s not found\n", arg); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
394 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
395 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
396 if(video_out_drivers[i]->control(VOCTRL_XOVERLAY_SUPPORT,NULL) != VO_TRUE) { |
10718 | 397 mp_msg(MSGT_VO, MSGL_ERR, "VO XOverlay: %s doesn't support XOverlay\n", arg); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
398 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
399 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
400 // X11 init |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
401 if (!vo_init()) return VO_FALSE; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
402 if(video_out_drivers[i]->preinit(NULL)) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
403 mp_msg(MSGT_VO, MSGL_ERR, "VO XOverlay: Subvo init failed\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
404 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
405 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
406 sub_vo = video_out_drivers[i]; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
407 // Setup the sub vo callbacks |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
408 video_out_xover.draw_frame = sub_vo->draw_frame; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
409 video_out_xover.draw_slice = sub_vo->draw_slice; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
410 video_out_xover.flip_page = sub_vo->flip_page; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
411 video_out_xover.draw_osd = sub_vo->draw_osd; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
412 return 0; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
413 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
414 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
415 static int control(uint32_t request, void *data, ...) |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
416 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
417 if(!sub_vo) return VO_ERROR; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
418 switch (request) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
419 case VOCTRL_GUISUPPORT: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
420 return VO_TRUE; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
421 case VOCTRL_GET_PANSCAN: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
422 if ( !vo_config_count || !vo_fs ) return VO_FALSE; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
423 return VO_TRUE; |
11542 | 424 case VOCTRL_ONTOP: |
425 vo_x11_ontop(); | |
426 return VO_TRUE; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
427 case VOCTRL_FULLSCREEN: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
428 vo_x11_fullscreen(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
429 case VOCTRL_SET_PANSCAN: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
430 if ( vo_fs && ( vo_panscan != vo_panscan_amount ) ) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
431 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
432 panscan_calc(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
433 set_window(0); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
434 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
435 return VO_TRUE; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
436 default: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
437 // Safe atm bcs nothing use more than 1 arg |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
438 return sub_vo->control(request,data); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
439 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
440 return VO_NOTIMPL; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
441 } |