annotate libvo/vo_xover.c @ 32338:5572e926e027

100l, fix sws_getCachedContext. It did not set the colorspace details, but worse it did not set up destination dimensions, thus every user of it would necessarily fail.
author reimar
date Sun, 03 Oct 2010 07:53:40 +0000
parents 09dd92639e7b
children ddb45e9443ec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 26755
diff changeset
51 #ifdef CONFIG_GUI
23077
17bf4f4b0715 Gui --> gui
diego
parents: 21623
diff changeset
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
d4739143fe2e output wording
diego
parents: 11542
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
d75953576ae4 Fix and improve xinerama support
reimar
parents: 16171
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
241 r = (vo_colorkey & 0x00ff0000) >> 16;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
242 g = (vo_colorkey & 0x0000ff00) >> 8;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
247 colorkey = vo_colorkey;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
e632b43f0598 Reduce excessive verbosity.
diego
parents: 13787
diff changeset
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
d75953576ae4 Fix and improve xinerama support
reimar
parents: 16171
diff changeset
267 vo_dx += xinerama_x;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 16171
diff changeset
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
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 26755
diff changeset
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
attila
parents: 23655
diff changeset
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
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 26755
diff changeset
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
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
314 colork.x11 = colorkey;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
315 colork.r = r;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
316 colork.g = g;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
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
alex
parents: 10512
diff changeset
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
alex
parents: 10512
diff changeset
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
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
424 case VOCTRL_ONTOP:
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
425 vo_x11_ontop();
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
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 }