annotate libvo/vo_xover.c @ 18049:77a3b0d11ca5

Limit the number of entires to the amount that does fit into the chunk. the function need rewrite as it assumes quite many things that are not guaranteed by the specifications.
author iive
date Thu, 06 Apr 2006 20:04:02 +0000
parents fd51fd1ff231
children d75953576ae4
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 /*
9570
602264261d3e 10L the comment header again. That's it when you stole someone else code ;)
albeu
parents: 9569
diff changeset
2 XOver a general x11 vo for mplayer overlay drivers based on :
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
3 VIDIX accelerated overlay in a X window
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
4
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
5 (C) Alex Beregszaszi & Zoltan Ponekker & Nick Kurshev
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
6
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
7 WS window manager by Pontscho/Fresh!
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
8
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
9 Based on vo_gl.c and vo_vesa.c and vo_xmga.c (.so mastah! ;))
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
10 */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
11
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
12 #include <stdio.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
13 #include <stdlib.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
14 #include <string.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
15 #include <math.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
16 #include <errno.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
17 #include <unistd.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
18 #include <sys/ioctl.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
19
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
20 #include "config.h"
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
21 #include "video_out.h"
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
22 #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
23
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
24 #include <X11/Xlib.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
25 #include <X11/Xutil.h>
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
26 //#include <X11/keysym.h>
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 #ifdef HAVE_XINERAMA
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
29 #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
30 #endif
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
31
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
32 #include "x11_common.h"
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
33 #include "aspect.h"
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
34 #include "mp_msg.h"
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
35
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
36 #ifdef HAVE_NEW_GUI
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13056
diff changeset
37 #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
38 #endif
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
39
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
40
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
41 static vo_info_t info =
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
42 {
12783
d4739143fe2e output wording
diego
parents: 11542
diff changeset
43 "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
44 "xover",
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
45 "Albeu",
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 };
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
48
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
49 LIBVO_EXTERN(xover)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
50
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
51 #define UNUSED(x) ((void)(x)) /* Removes warning about unused arguments */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
52
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
53 /* X11 related variables */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
54 /* Colorkey handling */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
55 static XGCValues mGCV;
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
56 static int colorkey;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
57
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
58 /* Image parameters */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
59 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
60 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
61 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
62
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
63 /* Window parameters */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
64 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
65 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
66
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
67 /* 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
68 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
69 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
70
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
71 #ifdef HAVE_XINERAMA
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
72 extern int xinerama_screen;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
73 #endif
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 static vo_functions_t* sub_vo = NULL;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
76
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
77
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
78 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
79 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
80 Window mRoot;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
81 if ( WinID )
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
82 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
83 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
84 &drwHeight, &drwBorderWidth, &drwDepth);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
85 drwX = drwY = 0;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
86
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
87 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
88 &drwcX, &drwcY, &mRoot);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
89 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
90 if (!vo_fs)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
91 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
92 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
93
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
94 /* following stuff copied from vo_xmga.c */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
95 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
96 else
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
97 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
98 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
99 drwcX=drwX=vo_dx; drwcY=drwY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
100 }
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 #if X11_FULLSCREEN
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
103 if (vo_fs)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
104 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
105 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
106 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
107 drwcX = drwX;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
108 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
109 drwcY = drwY;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
110 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
111 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
112 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
113 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
114 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
115 #endif
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
116
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
117 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
118
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
119 #ifdef HAVE_XINERAMA
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
120 if (XineramaIsActive(mDisplay))
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
121 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
122 XineramaScreenInfo *screens;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
123 int num_screens;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
124 int i = 0;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
125
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
126 screens = XineramaQueryScreens(mDisplay, &num_screens);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
127
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
128 /* 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
129 while (i<num_screens &&
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
130 ((screens[i].x_org < (int)drwcX) ||
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
131 (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
132 (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
133 (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
134 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
135 i++;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
136 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
137
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
138 if(i<num_screens)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
139 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
140 /* 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
141 xinerama_screen = i;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
142 } else {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
143 /* 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
144 * 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
145 * 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
146 * same screen
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 i = xinerama_screen;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
149 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
150
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
151 /* 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
152 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
153 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
154 XFree(screens);
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 #endif
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 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
159 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
160 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
161 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
162 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
163 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
164 drwWidth+=vo_panscan_x;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
165 drwHeight+=vo_panscan_y;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
166 }
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 /* 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
169 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
170 (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
171 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
172 mp_win_t w;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
173 // 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
174 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
175 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
176 vo_dx = drwcX;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
177 vo_dy = drwcY;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
178 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
179 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
180
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
181 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
182 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
183
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
184 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
185 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
186
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
187 /* mDrawColorKey: */
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 /* fill drawable with specified color */
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
190 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
191 XClearWindow( mDisplay,vo_window );
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
192 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
193 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
194 (vo_fs ? drwHeight - 1 : drwHeight));
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
195
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
196 if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
197
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
198 /* flush, update drawable */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
199 XFlush(mDisplay);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
200
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
201 return;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
202 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
203
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
204 /* 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
205 * 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
206 */
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
207 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
208 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
209 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
210 XVisualInfo vinfo;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
211 // XSizeHints hint;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
212 XSetWindowAttributes xswa;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
213 unsigned long xswamask;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
214 XWindowAttributes attribs;
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
215 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
216 mp_colorkey_t colork;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
217 char _title[255];
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
218
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
219 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
220 title = _title;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
221
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
222 panscan_init();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
223
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
224 image_height = height;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
225 image_width = width;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
226 image_format = format;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
227 vo_mouse_autohide=1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
228
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
229 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
230 aspect_save_prescale(d_width, d_height);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
231 aspect_save_screenres(vo_screenwidth, vo_screenheight);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
232
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
233 vo_dx = 0;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
234 vo_dy = 0;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
235 window_width = d_width;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
236 window_height = d_height;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
237
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
238 r = (vo_colorkey & 0x00ff0000) >> 16;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
239 g = (vo_colorkey & 0x0000ff00) >> 8;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
240 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
241 switch(vo_depthonscreen)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
242 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
243 case 32:
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
244 colorkey = vo_colorkey;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
245 break;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
246 case 24:
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
247 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
248 break;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
249 case 16:
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
250 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
251 break;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
252 case 15:
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
253 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
254 break;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
255 default:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
256 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
257 vo_depthonscreen);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
258 }
13946
e632b43f0598 Reduce excessive verbosity.
diego
parents: 13787
diff changeset
259 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
260
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
261 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
262
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
263 vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
264 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
265
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
266 #ifdef HAVE_NEW_GUI
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
267 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
268 else
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
269 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
270 #endif
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
271
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
272 #ifdef X11_FULLSCREEN
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13946
diff changeset
273 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
274 #endif
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
275 dwidth = d_width;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
276 dheight = d_height;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
277 /* Make the window */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
278 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
279
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
280 /* from vo_x11 */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
281 window_depth = attribs.depth;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
282 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
283 && (window_depth != 32))
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
284 window_depth = 24;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
285 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
286
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
287 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
288 xswa.border_pixel = 0;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
289 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
290 vinfo.visual, AllocNone);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
291 xswa.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask | PropertyChangeMask |
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
292 ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask));
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
293 xswamask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
294
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
295 if (WinID >= 0)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
296 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
297 vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay, mScreen);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
298 if ( WinID )
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
299 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
300 XUnmapWindow(mDisplay, vo_window);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
301 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
302 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask );
15540
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
303 XMapWindow(mDisplay, vo_window);
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
304 } else XSelectInput( mDisplay,vo_window,ExposureMask );
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
305 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
306 else
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
307 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
308 if ( vo_window == None )
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
309 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
310 vo_window = XCreateWindow(mDisplay, RootWindow(mDisplay, mScreen),
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
311 vo_dx, vo_dy, window_width, window_height, xswa.border_pixel,
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
312 vinfo.depth, InputOutput, vinfo.visual, xswamask, &xswa);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
313
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
314 vo_x11_classhint(mDisplay, vo_window, "xvidix");
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
315 vo_hidecursor(mDisplay, vo_window);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
316 vo_x11_sizehint( vo_dx,vo_dy,vo_dwidth,vo_dheight,0 );
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
317
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
318 XStoreName(mDisplay, vo_window, title);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
319 XMapWindow(mDisplay, vo_window);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
320
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13946
diff changeset
321 if ( flags&VOFLAG_FULLSCREEN ) vo_x11_fullscreen();
9569
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 #ifdef HAVE_XINERAMA
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
324 vo_x11_xinerama_move(mDisplay, vo_window);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
325 #endif
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13946
diff changeset
326 } else if ( !(flags&VOFLAG_FULLSCREEN) ) XMoveResizeWindow( mDisplay,vo_window,vo_dx,vo_dy,vo_dwidth,vo_dheight );
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
327 }
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 if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc );
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
330 vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &mGCV);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
331 #ifdef HAVE_NEW_GUI
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
332 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
333 #endif
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
334
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13946
diff changeset
335 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
336
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
337 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
338 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
339 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
340 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
341 }
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
342 colork.x11 = colorkey;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
343 colork.r = r;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
344 colork.g = g;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
345 colork.b = b;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
346 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
347 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
348
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
349 set_window(1);
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 XSync(mDisplay, False);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
352
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
353 panscan_calc();
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 return(0);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
356 }
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 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
359 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
360 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
361
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
362 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
363 set_window(0);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
364 sub_vo->check_events();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
365 return;
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
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
368 /* 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
369 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
370 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
371 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
372 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
373 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
374
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
375 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
376 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
377 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
378 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
379
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
380 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
381 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
382 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
383 UNUSED(src);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
384 UNUSED(stride);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
385 UNUSED(w);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
386 UNUSED(h);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
387 UNUSED(x);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
388 UNUSED(y);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
389 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
390 return 1;
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
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
393 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
394 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
395 UNUSED(src);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
396 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
397 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
398 }
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 static void uninit(void)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
401 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
402 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
403 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
404 sub_vo = NULL;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
405 vo_x11_uninit();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
406 // Restore our callbacks
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
407 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
408 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
409 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
410 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
411 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
412
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
413 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
414 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
415 int i;
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(!arg) {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
418 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
419 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
420 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
421
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
422 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
423 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
424 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
425 break;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
426 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
427 if(!video_out_drivers[i]) {
10718
alex
parents: 10512
diff changeset
428 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
429 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
430 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
431 if(video_out_drivers[i]->control(VOCTRL_XOVERLAY_SUPPORT,NULL) != VO_TRUE) {
10718
alex
parents: 10512
diff changeset
432 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
433 return 1;
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 // X11 init
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
436 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
437 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
438 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
439 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
440 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
441 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
442 // 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
443 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
444 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
445 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
446 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
447 return 0;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
448 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
449
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15540
diff changeset
450 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
451 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
452 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
453 switch (request) {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
454 case VOCTRL_GUISUPPORT:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
455 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
456 case VOCTRL_GET_PANSCAN:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
457 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
458 return VO_TRUE;
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
459 case VOCTRL_ONTOP:
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
460 vo_x11_ontop();
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
461 return VO_TRUE;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
462 case VOCTRL_FULLSCREEN:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
463 vo_x11_fullscreen();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
464 case VOCTRL_SET_PANSCAN:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
465 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
466 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
467 panscan_calc();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
468 set_window(0);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
469 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
470 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
471 default:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
472 // 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
473 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
474 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
475 return VO_NOTIMPL;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
476 }