diff options
author | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-10-17 09:08:37 +0000 |
---|---|---|
committer | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-10-17 09:08:37 +0000 |
commit | a34978c3a7ccdcc7b629134461ecffc95ec26364 (patch) | |
tree | b7169a152b6a87ac75034c6d06e0eb96d3c3e70e | |
parent | e6bf2b355a0125b5d0be7b26f5a864f5b5166ef7 (diff) | |
download | mpv-a34978c3a7ccdcc7b629134461ecffc95ec26364.tar.bz2 mpv-a34978c3a7ccdcc7b629134461ecffc95ec26364.tar.xz |
Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
by Jake Page <jake@CS.Stanford.EDU>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11159 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | cfg-mplayer.h | 1 | ||||
-rw-r--r-- | libvo/video_out.c | 1 | ||||
-rw-r--r-- | libvo/vo_cvidix.c | 11 | ||||
-rw-r--r-- | libvo/vo_fbdev.c | 16 | ||||
-rw-r--r-- | libvo/vo_svga.c | 14 | ||||
-rw-r--r-- | libvo/vo_vesa.c | 17 | ||||
-rw-r--r-- | libvo/vo_xvidix.c | 16 |
7 files changed, 70 insertions, 6 deletions
diff --git a/cfg-mplayer.h b/cfg-mplayer.h index 756a6e7dee..b44548133e 100644 --- a/cfg-mplayer.h +++ b/cfg-mplayer.h @@ -272,6 +272,7 @@ m_option_t mplayer_opts[]={ // 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}, + {"nocolorkey", &vo_colorkey, CONF_TYPE_FLAG, 0, 0, 0xff000000, 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}, diff --git a/libvo/video_out.c b/libvo/video_out.c index 18594910d4..56b2d643d7 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -48,6 +48,7 @@ char *vo_subdevice = NULL; int vo_directrendering=0; int vo_colorkey = 0x0000ff00; // default colorkey is green + // (0xff000000 means that colorkey has been disabled) // // Externally visible list of all vo drivers diff --git a/libvo/vo_cvidix.c b/libvo/vo_cvidix.c index 997142a6ee..3f6ae80ded 100644 --- a/libvo/vo_cvidix.c +++ b/libvo/vo_cvidix.c @@ -48,8 +48,15 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,uint32_ if(vidix_grkey_support()){ vidix_grkey_get(&gr_key); gr_key.key_op = KEYS_PUT; - gr_key.ckey.op = CKEY_TRUE; - gr_key.ckey.red = gr_key.ckey.green = gr_key.ckey.blue = 0; + if (vo_colorkey != 0xff000000) + { + gr_key.ckey.op = CKEY_TRUE; + gr_key.ckey.red = (vo_colorkey & 0x00FF0000) >> 16; + gr_key.ckey.green = (vo_colorkey & 0x0000FF00) >> 8; + gr_key.ckey.blue = vo_colorkey & 0x000000FF; + } + else + gr_key.ckey.op = CKEY_FALSE; vidix_grkey_set(&gr_key); } return 0; diff --git a/libvo/vo_fbdev.c b/libvo/vo_fbdev.c index f2f7e1c3d3..b9c61713b4 100644 --- a/libvo/vo_fbdev.c +++ b/libvo/vo_fbdev.c @@ -42,6 +42,7 @@ LIBVO_EXTERN(fbdev) #ifdef CONFIG_VIDIX /* Name of VIDIX driver */ static const char *vidix_name = NULL; +static vidix_grkey_t gr_key; #endif static signed int pre_init_err = -2; /****************************** @@ -976,6 +977,21 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, } else mp_msg(MSGT_VO, MSGL_V, "Using VIDIX\n"); vidix_start(); + if (vidix_grkey_support()) + { + vidix_grkey_get(&gr_key); + gr_key.key_op = KEYS_PUT; + if (vo_colorkey != 0xff000000) + { + gr_key.ckey.op = CKEY_TRUE; + gr_key.ckey.red = (vo_colorkey & 0x00ff0000) >> 16; + gr_key.ckey.green = (vo_colorkey & 0x0000ff00) >> 8; + gr_key.ckey.blue = vo_colorkey & 0x000000ff; + } + else + gr_key.ckey.op = CKEY_FALSE; + vidix_grkey_set(&gr_key); + } } else #endif diff --git a/libvo/vo_svga.c b/libvo/vo_svga.c index 605fee716b..9a973061cb 100644 --- a/libvo/vo_svga.c +++ b/libvo/vo_svga.c @@ -105,6 +105,7 @@ static vo_info_t info = { #ifdef CONFIG_VIDIX static char vidix_name[32] = ""; +static vidix_grkey_t gr_key; #endif LIBVO_EXTERN(svga) @@ -526,6 +527,19 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, printf("vo_svga: Using VIDIX. w=%i h=%i mw=%i mh=%i\n",width,height, modeinfo->width,modeinfo->height); vidix_start(); + /*set colorkey*/ + if(vidix_grkey_support()){ + vidix_grkey_get(&gr_key); + gr_key.key_op = KEYS_PUT; + if (vo_colorkey != 0xFF000000) { + gr_key.ckey.op = CKEY_TRUE; + gr_key.ckey.red = (vo_colorkey & 0x00FF0000) >> 16; + gr_key.ckey.green = (vo_colorkey & 0x0000FF00) >> 8; + gr_key.ckey.blue = vo_colorkey & 0x000000FF; + } else + gr_key.ckey.op = CKEY_FALSE; + vidix_grkey_set(&gr_key); + } } #endif diff --git a/libvo/vo_vesa.c b/libvo/vo_vesa.c index 8b7ad638a3..4804274200 100644 --- a/libvo/vo_vesa.c +++ b/libvo/vo_vesa.c @@ -120,6 +120,7 @@ static int lvo_opened = 0; #ifdef CONFIG_VIDIX static const char *vidix_name = NULL; static int vidix_opened = 0; +static vidix_grkey_t gr_key; #endif #define HAS_DGA() (win.idx == -1) @@ -958,6 +959,22 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin } else printf("vo_vesa: Using VIDIX\n"); vidix_start(); + + /* set colorkey */ + if (vidix_grkey_support()) + { + vidix_grkey_get(&gr_key); + gr_key.key_op = KEYS_PUT; + if (vo_colorkey != 0xFF000000) + { + gr_key.ckey.op = CKEY_TRUE; + gr_key.ckey.red = (vo_colorkey & 0x00FF0000) >> 16; + gr_key.ckey.green = (vo_colorkey & 0x0000FF00) >> 8; + gr_key.ckey.blue = vo_colorkey & 0x000000FF; + } else + gr_key.ckey.op = CKEY_FALSE; + vidix_grkey_set(&gr_key); + } vidix_opened = 1; } #endif diff --git a/libvo/vo_xvidix.c b/libvo/vo_xvidix.c index 14be69f70e..21594f59bc 100644 --- a/libvo/vo_xvidix.c +++ b/libvo/vo_xvidix.c @@ -197,11 +197,14 @@ static void set_window(int force_update) /* mDrawColorKey: */ /* fill drawable with specified color */ + if (vo_colorkey != 0xff000000) + { XSetBackground(mDisplay, vo_gc, 0L); XClearWindow( mDisplay,vo_window ); XSetForeground(mDisplay, vo_gc, colorkey); XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, (vo_fs ? drwHeight - 1 : drwHeight)); + } /* flush, update drawable */ XFlush(mDisplay); @@ -346,10 +349,15 @@ else { vidix_grkey_get(&gr_key); gr_key.key_op = KEYS_PUT; - gr_key.ckey.op = CKEY_TRUE; - gr_key.ckey.red = r; - gr_key.ckey.green = g; - gr_key.ckey.blue = b; + if (vo_colorkey != 0xff000000) + { + gr_key.ckey.op = CKEY_TRUE; + gr_key.ckey.red = r; + gr_key.ckey.green = g; + gr_key.ckey.blue = b; + } + else + gr_key.ckey.op = CKEY_FALSE; vidix_grkey_set(&gr_key); } |