annotate libvo/vo_xover.c @ 13610:b79ee5bf2c9e

Sync with GomGom's patch-12 version. updated copyright bvhq options added (xvid 1.1+ api4.1) psnr handling moved in separate functions proper free() on uninit printf -> mp_msg capability to flush delayed frames Changes by me (iive) support for flushing delayed frames at the end suppressed cosmetics and new aspect code changes
author iive
date Mon, 11 Oct 2004 15:48:18 +0000
parents 1c2f6de431bf
children e047e70a9767
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
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
37 #include "../Gui/interface.h"
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 */
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
207 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
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 }
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
259 mp_msg(MSGT_VO, MSGL_INFO, "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
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
273 if ( ( flags&1 )||(flags & 0x04) ) aspect(&d_width, &d_height, A_ZOOM);
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 );
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
303 } 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
304 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
305 else
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
306 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
307 if ( vo_window == None )
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 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
310 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
311 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
312
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
313 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
314 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
315 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
316
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
317 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
318 XMapWindow(mDisplay, vo_window);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
319
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
320 if ( flags&1 ) vo_x11_fullscreen();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
321
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
322 #ifdef HAVE_XINERAMA
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
323 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
324 #endif
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
325 } else if ( !(flags&1) ) XMoveResizeWindow( mDisplay,vo_window,vo_dx,vo_dy,vo_dwidth,vo_dheight );
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
326 }
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 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
329 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
330 #ifdef HAVE_NEW_GUI
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 #endif
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 ( ( !WinID )&&( flags&1 ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
335
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
336 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
337 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
338 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
339 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
340 }
10988
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
341 colork.x11 = colorkey;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
342 colork.r = r;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
343 colork.g = g;
c2bff70784d5 user settable colorkey
alex
parents: 10718
diff changeset
344 colork.b = b;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
345 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
346 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
347
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
348 set_window(1);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
349
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
350 XSync(mDisplay, False);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
351
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
352 panscan_calc();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
353
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
354 return(0);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
355 }
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 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
358 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
359 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
360
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
361 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
362 set_window(0);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
363 sub_vo->check_events();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
364 return;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
365 }
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 /* 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
368 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
369 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
370 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
371 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
372 }
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 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
375 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
376 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
377 }
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 static uint32_t draw_slice(uint8_t *src[], int stride[],
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
380 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
381 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
382 UNUSED(src);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
383 UNUSED(stride);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
384 UNUSED(w);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
385 UNUSED(h);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
386 UNUSED(x);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
387 UNUSED(y);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
388 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
389 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
390 }
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 static uint32_t draw_frame(uint8_t *src[])
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
393 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
394 UNUSED(src);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
395 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
396 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
397 }
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 static void uninit(void)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
400 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
401 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
402 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
403 sub_vo = NULL;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
404 vo_x11_uninit();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
405 // Restore our callbacks
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
406 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
407 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
408 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
409 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
410 }
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 static uint32_t preinit(const char *arg)
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 int i;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
415
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
416 if(!arg) {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
417 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
418 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
419 }
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 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
422 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
423 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
424 break;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
425 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
426 if(!video_out_drivers[i]) {
10718
alex
parents: 10512
diff changeset
427 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
428 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
429 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
430 if(video_out_drivers[i]->control(VOCTRL_XOVERLAY_SUPPORT,NULL) != VO_TRUE) {
10718
alex
parents: 10512
diff changeset
431 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
432 return 1;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
433 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
434 // X11 init
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
435 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
436 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
437 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
438 return 1;
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 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
441 // 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
442 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
443 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
444 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
445 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
446 return 0;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
447 }
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 static uint32_t control(uint32_t request, void *data, ...)
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
450 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
451 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
452 switch (request) {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
453 case VOCTRL_GUISUPPORT:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
454 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
455 case VOCTRL_GET_PANSCAN:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
456 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
457 return VO_TRUE;
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
458 case VOCTRL_ONTOP:
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
459 vo_x11_ontop();
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 10988
diff changeset
460 return VO_TRUE;
9569
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
461 case VOCTRL_FULLSCREEN:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
462 vo_x11_fullscreen();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
463 case VOCTRL_SET_PANSCAN:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
464 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
465 {
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
466 panscan_calc();
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
467 set_window(0);
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
468 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
469 return VO_TRUE;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
470 default:
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
471 // 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
472 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
473 }
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
474 return VO_NOTIMPL;
894d02a6469e vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff changeset
475 }