changeset 10988:c2bff70784d5

user settable colorkey
author alex
date Fri, 03 Oct 2003 18:13:45 +0000
parents d5bea962297a
children 3185f64f6350
files cfg-mplayer.h libvo/video_out.c libvo/video_out.h libvo/vo_xmga.c libvo/vo_xover.c libvo/vo_xvidix.c
diffstat 6 files changed, 52 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/cfg-mplayer.h	Fri Oct 03 17:36:55 2003 +0000
+++ b/cfg-mplayer.h	Fri Oct 03 18:13:45 2003 +0000
@@ -271,6 +271,7 @@
 	{"fsmode-dontuse", &vo_fsmode, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL},
 	// set bpp (x11+vm, dga, fbdev, vesa, svga?)
         {"bpp", &vo_dbpp, CONF_TYPE_INT, CONF_RANGE, 0, 32, NULL},
+	{"colorkey", &vo_colorkey, CONF_TYPE_INT, 0, 0, 0, NULL},
 	// double buffering:  (mga/xmga, xv, vidix, vesa, fbdev)
 	{"double", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 0, 1, NULL},
 	{"nodouble", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 1, 0, NULL},
--- a/libvo/video_out.c	Fri Oct 03 17:36:55 2003 +0000
+++ b/libvo/video_out.c	Fri Oct 03 18:13:45 2003 +0000
@@ -47,6 +47,8 @@
 char *vo_subdevice = NULL;
 int vo_directrendering=0;
 
+int vo_colorkey = 0x0000ff00; // default colorkey is green
+
 //
 // Externally visible list of all vo drivers
 //
--- a/libvo/video_out.h	Fri Oct 03 17:36:55 2003 +0000
+++ b/libvo/video_out.h	Fri Oct 03 18:13:45 2003 +0000
@@ -211,6 +211,8 @@
 
 extern char *vo_subdevice;
 
+extern int vo_colorkey;
+
 #if defined(HAVE_FBDEV)||defined(HAVE_VESA) 
 
 typedef struct {
--- a/libvo/vo_xmga.c	Fri Oct 03 17:36:55 2003 +0000
+++ b/libvo/vo_xmga.c	Fri Oct 03 18:13:45 2003 +0000
@@ -62,7 +62,7 @@
 
 static uint32_t               mDepth;
 static XWindowAttributes      attribs;
-static uint32_t               fgColor;
+static int colorkey;
 
 static uint32_t               mvHeight;
 static uint32_t               mvWidth;
@@ -81,7 +81,7 @@
 {
  XSetBackground( mDisplay,vo_gc,0 );
  XClearWindow( mDisplay,vo_window );
- XSetForeground( mDisplay,vo_gc,fgColor );
+ XSetForeground( mDisplay,vo_gc,colorkey );
  XFillRectangle( mDisplay,vo_window,vo_gc,drwX,drwY,drwWidth,(vo_fs?drwHeight - 1:drwHeight) );
  XFlush( mDisplay );
 }
@@ -112,6 +112,7 @@
  char                 * mTitle=(title == NULL) ? "XMGA render" : title;
  XVisualInfo            vinfo;
  unsigned long          xswamask;
+ int r, g, b;
 
  if(mga_init(width,height,format)) return -1; // ioctl errors?
 
@@ -129,14 +130,18 @@
  vo_dwidth=d_width; vo_dheight=d_height;
  vo_mouse_autohide=1;
 
+ r = (vo_colorkey & 0x00ff0000) >> 16;
+ g = (vo_colorkey & 0x0000ff00) >> 8;
+ b = vo_colorkey & 0x000000ff;
  switch ( vo_depthonscreen )
   {
-   case 32:
-   case 24: fgColor=0x00ff00ffL; break;
-   case 16: fgColor=0xf81fL; break;
-   case 15: fgColor=0x7c1fL; break;
+   case 32: colorkey = vo_colorkey; break;
+   case 24: colorkey = vo_colorkey & 0x00ffffff; break;
+   case 16: colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); break;
+   case 15: colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3); break;
    default: mp_msg(MSGT_VO,MSGL_ERR,"Sorry, this (%d) color depth not supported.\n",vo_depthonscreen ); return -1;
   }
+  mp_msg(MSGT_VO, MSGL_INFO, "Using colorkey: %x\n", colorkey);
 
   inited=1;
 
@@ -208,9 +213,9 @@
  panscan_calc();
 
  mga_vid_config.colkey_on=1;
- mga_vid_config.colkey_red=255;
- mga_vid_config.colkey_green=0;
- mga_vid_config.colkey_blue=255;
+ mga_vid_config.colkey_red=r;
+ mga_vid_config.colkey_green=g;
+ mga_vid_config.colkey_blue=b;
 
  set_window();	// set up mga_vid_config.dest_width etc
 
--- a/libvo/vo_xover.c	Fri Oct 03 17:36:55 2003 +0000
+++ b/libvo/vo_xover.c	Fri Oct 03 18:13:45 2003 +0000
@@ -53,8 +53,7 @@
 /* X11 related variables */
 /* Colorkey handling */
 static XGCValues mGCV;
-static uint32_t	fgColor;
-static uint32_t bgColor;
+static int colorkey;
 
 /* Image parameters */
 static uint32_t image_width;
@@ -188,9 +187,9 @@
   /* mDrawColorKey: */
 
   /* fill drawable with specified color */
-  XSetBackground( mDisplay,vo_gc,bgColor );
+  XSetBackground(mDisplay, vo_gc, 0L);
   XClearWindow( mDisplay,vo_window );
-  XSetForeground(mDisplay, vo_gc, fgColor);
+  XSetForeground(mDisplay, vo_gc, colorkey);
   XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth,
 		 (vo_fs ? drwHeight - 1 : drwHeight));
   /* flush, update drawable */
@@ -210,7 +209,7 @@
   XSetWindowAttributes xswa;
   unsigned long xswamask;
   XWindowAttributes attribs;
-  int window_depth;
+  int window_depth, r, g, b;
   mp_colorkey_t colork;
   char _title[255];
 
@@ -233,24 +232,28 @@
   window_width = d_width;
   window_height = d_height;
 
-  /* from xmga.c */
-  bgColor = 0x0L;
+  r = (vo_colorkey & 0x00ff0000) >> 16;
+  g = (vo_colorkey & 0x0000ff00) >> 8;
+  b = vo_colorkey & 0x000000ff;
   switch(vo_depthonscreen)
     {
     case 32:
+      colorkey = vo_colorkey;
+      break;
     case 24:
-      fgColor = 0x00ff00ffL;
+      colorkey = vo_colorkey & 0x00ffffff;
       break;
     case 16:
-      fgColor = 0xf81fL;
+      colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
       break;
     case 15:
-      fgColor = 0x7c1fL;
+      colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);
       break;
     default:
       mp_msg(MSGT_VO, MSGL_ERR, "Sorry, this (%d) color depth is not supported\n",
 	     vo_depthonscreen);
     }
+  mp_msg(MSGT_VO, MSGL_INFO, "Using colorkey: %x\n", colorkey);
 
   aspect(&d_width, &d_height, A_NOZOOM);
 
@@ -332,10 +335,10 @@
     mp_msg(MSGT_VO, MSGL_ERR, "xover: sub vo config failed\n");
     return 1;
   }
-  colork.x11 = fgColor;
-  colork.r = 255;
-  colork.g = 0;
-  colork.b = 255;
+  colork.x11 = colorkey;
+  colork.r = r;
+  colork.g = g;
+  colork.b = b;
   if(sub_vo->control(VOCTRL_XOVERLAY_SET_COLORKEY,&colork) != VO_TRUE)
     mp_msg(MSGT_VO, MSGL_WARN, "xover: set_colorkey failed\n");
 
--- a/libvo/vo_xvidix.c	Fri Oct 03 17:36:55 2003 +0000
+++ b/libvo/vo_xvidix.c	Fri Oct 03 18:13:45 2003 +0000
@@ -53,8 +53,7 @@
 /* X11 related variables */
 /* Colorkey handling */
 static XGCValues mGCV;
-static uint32_t	fgColor;
-static uint32_t bgColor;
+static int colorkey;
 static vidix_grkey_t gr_key;
 
 /* VIDIX related */
@@ -198,9 +197,9 @@
     /* mDrawColorKey: */
 
     /* fill drawable with specified color */
-    XSetBackground( mDisplay,vo_gc,bgColor );
+    XSetBackground(mDisplay, vo_gc, 0L);
     XClearWindow( mDisplay,vo_window );
-    XSetForeground(mDisplay, vo_gc, fgColor);
+    XSetForeground(mDisplay, vo_gc, colorkey);
     XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth,
 	(vo_fs ? drwHeight - 1 : drwHeight));
     /* flush, update drawable */
@@ -220,7 +219,7 @@
     XSetWindowAttributes xswa;
     unsigned long xswamask;
     XWindowAttributes attribs;
-    int window_depth;
+    int window_depth, r, g, b;
 
     title = "MPlayer VIDIX X11 Overlay";
 
@@ -246,24 +245,28 @@
 //    if (vo_fs)
 //     { vo_old_width=d_width; vo_old_height=d_height; }
 
-    /* from xmga.c */
-    bgColor = 0x0L;
+    r = (vo_colorkey & 0x00ff0000) >> 16;
+    g = (vo_colorkey & 0x0000ff00) >> 8;
+    b = vo_colorkey & 0x000000ff;
     switch(vo_depthonscreen)
     {
 	case 32:
+	    colorkey = vo_colorkey;
+	    break;
 	case 24:
-	    fgColor = 0x00ff00ffL;
+	    colorkey = vo_colorkey & 0x00ffffff;
 	    break;
 	case 16:
-	    fgColor = 0xf81fL;
+	    colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
 	    break;
 	case 15:
-	    fgColor = 0x7c1fL;
+	    colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);
 	    break;
 	default:
 	    mp_msg(MSGT_VO, MSGL_ERR, "Sorry, this (%d) color depth is not supported\n",
 		vo_depthonscreen);
     }
+    mp_msg(MSGT_VO, MSGL_INFO, "Using colorkey: %x\n", colorkey);
 
     aspect(&d_width, &d_height, A_NOZOOM);
 
@@ -344,9 +347,9 @@
 	vidix_grkey_get(&gr_key);
 	gr_key.key_op = KEYS_PUT;
 	gr_key.ckey.op = CKEY_TRUE;
-	gr_key.ckey.red = 255;
-	gr_key.ckey.green = 0;
-	gr_key.ckey.blue = 255;
+	gr_key.ckey.red = r;
+	gr_key.ckey.green = g;
+	gr_key.ckey.blue = b;
 	vidix_grkey_set(&gr_key);
     }