[Mplayer-cvslog] CVS: main/libvo vo_xvidix.c,1.9,1.10
Alex Beregszaszi
alex at mplayer.dev.hu
Sat Jan 19 23:43:22 CET 2002
Update of /cvsroot/mplayer/main/libvo
In directory mplayer:/var/tmp.root/cvs-serv22189
Modified Files:
vo_xvidix.c
Log Message:
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
Index: vo_xvidix.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_xvidix.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- vo_xvidix.c 19 Jan 2002 16:58:33 -0000 1.9
+++ vo_xvidix.c 19 Jan 2002 22:43:19 -0000 1.10
@@ -43,13 +43,14 @@
""
};
+#define UNUSED(x) ((void)(x)) /* Removes warning about unused arguments */
+
/* X11 related variables */
static Window mWindow;
static int X_already_started = 0;
static GC mGC;
static XGCValues mGCV;
-
static uint32_t fgColor;
/* VIDIX related stuff */
@@ -71,33 +72,24 @@
static uint32_t drwX, drwY, drwWidth, drwHeight, drwBorderWidth,
drwDepth, drwcX, drwcY, dwidth, dheight, mFullscreen;
-#ifdef HAVE_NEW_GUI
-static uint32_t mdwidth, mdheight;
-#endif
-
static vidix_grkey_t gr_key;
-static void mDrawColorKey(void)
-{
- XSetForeground(mDisplay, mGC, fgColor);
- XFillRectangle(mDisplay, mWindow, mGC, drwX, drwY, drwWidth,
- (mFullscreen ? drwHeight - 1 : drwHeight));
- XFlush(mDisplay);
-}
-
static void set_window(int force_update)
{
#ifdef HAVE_NEW_GUI
if (vo_window != None)
{
- mFullscreen = 0;
- dwidth = mdwidth;
- dheight = mdheight;
if ((vo_dwidth == vo_screenwidth) && (vo_dheight == vo_screenheight))
{
mFullscreen = 1;
dwidth = vo_screenwidth;
- dheight = vo_screenwidth * mdheight / mdwidth;
+ dheight = vo_screenwidth * vo_dheight / vo_dwidth;
+ }
+ else
+ {
+ mFullscreen = 0;
+ dwidth = vo_dwidth;
+ dheight = vo_dheight;
}
}
#endif
@@ -108,8 +100,9 @@
XTranslateCoordinates(mDisplay, mWindow, mRoot, 0, 0,
&drwcX, &drwcY, &mRoot);
- mp_msg(MSGT_VO, MSGL_DBG2, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",
- drwcX, drwcY, drwX, drwY, drwWidth, drwHeight);
+ if (!mFullscreen)
+ mp_msg(MSGT_VO, MSGL_V, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",
+ drwcX, drwcY, drwX, drwY, drwWidth, drwHeight);
/* following stuff copied from vo_xmga.c */
aspect(&dwidth, &dheight, A_NOZOOM);
@@ -123,13 +116,11 @@
drwcY += drwY;
drwWidth = (dwidth > vo_screenwidth ? vo_screenwidth : dwidth);
drwHeight = (dheight > vo_screenheight ? vo_screenheight : dheight);
- mp_msg(MSGT_VO, MSGL_DBG2, "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",
+ mp_msg(MSGT_VO, MSGL_V, "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",
drwcX, drwcY, drwX, drwY, drwWidth, drwHeight);
}
#endif
- mDrawColorKey();
-
#ifdef HAVE_XINERAMA
if (XineramaIsActive(mDisplay))
{
@@ -153,8 +144,8 @@
#endif
/* set new values in VIDIX */
- if (force_update || ((window_x != drwcX) || (window_y != drwcY) ||
- (window_width != drwWidth) || (window_height != drwHeight)))
+ if (force_update || (window_x != drwcX) || (window_y != drwcY) ||
+ (window_width != drwWidth) || (window_height != drwHeight))
{
window_x = drwcX;
window_y = drwcY;
@@ -178,6 +169,16 @@
mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] window properties: pos: %dx%d, size: %dx%d\n",
window_x, window_y, window_width, window_height);
+
+ /* mDrawColorKey: */
+
+ /* fill drawable with specified color */
+ XSetForeground(mDisplay, mGC, fgColor);
+ XFillRectangle(mDisplay, mWindow, mGC, drwX, drwY, drwWidth,
+ (mFullscreen ? drwHeight - 1 : drwHeight));
+ /* flush, update drawable */
+ XFlush(mDisplay);
+
return;
}
@@ -188,7 +189,6 @@
uint32_t d_height, uint32_t flags, char *title, uint32_t format)
{
XVisualInfo vinfo;
- XEvent xev;
XSizeHints hint;
XSetWindowAttributes xswa;
unsigned long xswamask;
@@ -248,11 +248,6 @@
window_width = d_width;
window_height = d_height;
-#ifdef HAVE_NEW_GUI
- mdwidth = width;
- mdheight = height;
-#endif
-
mFullscreen = flags&0x01;
X_already_started++;
@@ -284,6 +279,7 @@
#ifdef X11_FULLSCREEN
if (mFullscreen) /* fullscreen */
+ {
if (flags & 0x04)
{
aspect(&d_width, &d_height, A_ZOOM);
@@ -293,6 +289,7 @@
d_width = vo_screenwidth;
d_height = vo_screenheight;
}
+ }
#endif
/* Make the window */
@@ -320,7 +317,7 @@
}
else
mWindow = XCreateWindow(mDisplay, RootWindow(mDisplay, mScreen),
- hint.x, hint.y, hint.width, hint.height, xswa.border_pixel,
+ window_x, window_y, window_width, window_height, xswa.border_pixel,
vinfo.depth, InputOutput, vinfo.visual, xswamask, &xswa);
vo_x11_classhint(mDisplay, mWindow, "xvidix");
@@ -353,11 +350,15 @@
}
else
{
+ /* window was created by GUI */
mWindow = vo_window;
mGC = vo_gc;
}
#endif
+ mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] image properties: %dx%d depth: %d\n",
+ image_width, image_height, image_depth);
+
if (vidix_grkey_support())
{
vidix_grkey_get(&gr_key);
@@ -371,44 +372,16 @@
set_window(1);
-#if 0
- XGetGeometry(mDisplay, mWindow, &mRoot, &drwX, &drwY, &drwWidth,
- &drwHeight, &drwBorderWidth, &drwDepth);
- drwX = drwY = 0;
- XTranslateCoordinates(mDisplay, mWindow, mRoot, 0, 0, &drwcX, &drwcY, &mRoot);
-
- window_x = drwcX;
- window_y = drwcY;
- window_width = drwWidth;
- window_height = drwHeight;
-#endif
-
- mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] image properties: %dx%d depth: %d\n",
- image_width, image_height, image_depth);
- mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] window properties: pos: %dx%d, size: %dx%d\n",
- window_x, window_y, window_width, window_height);
-
-#if 0
- if (vidix_init(image_width, image_height, window_x, window_y, window_width,
- window_height, format, vo_depthonscreen, vo_screenwidth, vo_screenheight) != 0)
- {
- mp_msg(MSGT_VO, MSGL_FATAL, "Can't initialize VIDIX driver: %s: %s\n",
- vidix_name, strerror(errno));
- vidix_term();
- return(-1);
- }
-#endif
-
#ifdef HAVE_NEW_GUI
-if (vo_window == None)
+ if (vo_window == None)
#endif
-{
- XFlush(mDisplay);
- XSync(mDisplay, False);
-}
+ {
+ XFlush(mDisplay);
+ XSync(mDisplay, False);
+ }
#ifdef HAVE_NEW_GUI
- if (vo_window == None);
+ if (vo_window == None)
#endif
saver_off(mDisplay); /* turning off screen saver */
@@ -420,27 +393,13 @@
return(&vo_info);
}
-/* i think this is obsoleted.... -- alex */
-static void Terminate_Display_Process(void)
-{
- getchar(); /* wait for enter to remove window */
- vidix_term();
- XDestroyWindow(mDisplay, mWindow);
- XCloseDisplay(mDisplay);
- X_already_started = 0;
-
- return;
-}
static void check_events(void)
{
const int event = vo_x11_check_events(mDisplay);
- if (event & VO_EVENT_RESIZE)
+ if ((event & VO_EVENT_RESIZE) || (event & VO_EVENT_EXPOSE))
set_window(0);
- else
- if (event & VO_EVENT_EXPOSE)
- mDrawColorKey();
return;
}
@@ -462,12 +421,19 @@
static uint32_t draw_slice(uint8_t *src[], int stride[],
int w, int h, int x, int y)
{
+ UNUSED(src);
+ UNUSED(stride);
+ UNUSED(w);
+ UNUSED(h);
+ UNUSED(x);
+ UNUSED(y);
mp_msg(MSGT_VO, MSGL_FATAL, "[xvidix] error: didn't used vidix draw_slice!\n");
return(0);
}
static uint32_t draw_frame(uint8_t *src[])
{
+ UNUSED(src);
mp_msg(MSGT_VO, MSGL_FATAL, "[xvidix] error: didn't used vidix draw_frame!\n");
return(0);
}
@@ -503,12 +469,27 @@
{
vidix_term();
#ifdef HAVE_NEW_GUI
+ /* destroy window only if it's not controlled by GUI */
if (vo_window == None)
#endif
{
saver_on(mDisplay); /* screen saver back on */
if (!(WinID > 0)) /* don't destory window if -wid specified */
+ {
XDestroyWindow(mDisplay, mWindow);
-// XCloseDisplay(mDisplay);
+ XCloseDisplay(mDisplay);
+ }
}
+}
+
+/* i think this is obsoleted.... -- alex */
+static void Terminate_Display_Process(void)
+{
+ getchar(); /* wait for enter to remove window */
+ vidix_term();
+ XDestroyWindow(mDisplay, mWindow);
+ XCloseDisplay(mDisplay);
+ X_already_started = 0;
+
+ return;
}
More information about the MPlayer-cvslog
mailing list