[Mplayer-cvslog] CVS: main/drivers/radeon README,1.11,1.12 radeon_vid.c,1.22,1.23
Nick Kurshev
nick at mplayer.dev.hu
Mon Dec 3 11:10:35 CET 2001
Update of /cvsroot/mplayer/main/drivers/radeon
In directory mplayer:/var/tmp.root/cvs-serv25850/main/drivers/radeon
Modified Files:
README radeon_vid.c
Log Message:
Color key still causes some troubles
Index: README
===================================================================
RCS file: /cvsroot/mplayer/main/drivers/radeon/README,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- README 2 Dec 2001 14:01:13 -0000 1.11
+++ README 3 Dec 2001 10:10:19 -0000 1.12
@@ -67,7 +67,6 @@
brightness=decval (-64:+63) doesn't work on radeons
saturation=decval (0:+31) doesn't work on radeons
double_buff=on/off enables/disables double buffering
-colour_key=hexval defines colour key
deinterlace=on/off enables/disables adaprive deinterlacing
deinterlace_pattern=hexval defines deinterlacing pattern
@@ -105,7 +104,7 @@
Full example:
~~~~~~~~~~~~~
modprobe radeon_vid mtrr=1
-echo "deinterlace_pattern=F0055555">>/dev/radeon_vid
+echo "deinterlace_pattern=F0055555">/dev/radeon_vid
mplayer -vo vesa:lvo:/dev/radeon_vid -fs -zoom -bpp 32 filename
Enjoy!
Index: radeon_vid.c
===================================================================
RCS file: /cvsroot/mplayer/main/drivers/radeon/radeon_vid.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- radeon_vid.c 2 Dec 2001 13:48:42 -0000 1.22
+++ radeon_vid.c 3 Dec 2001 10:10:19 -0000 1.23
@@ -107,6 +107,7 @@
/* base address of yuv framebuffer */
uint32_t yuv_base;
uint32_t fourcc;
+ uint32_t dest_bpp;
/* YUV BES registers */
uint32_t reg_load_cntl;
uint32_t h_inc;
@@ -138,16 +139,21 @@
uint32_t exclusive_horz;
uint32_t auto_flip_cntl;
uint32_t filter_cntl;
- uint32_t graphics_key_msk;
uint32_t key_cntl;
uint32_t test;
/* Configurable stuff */
int double_buff;
+
int brightness;
int saturation;
+
+ int ckey_on;
uint32_t graphics_key_clr;
+ uint32_t graphics_key_msk;
+
int deinterlace_on;
uint32_t deinterlace_pattern;
+
} bes_registers_t;
typedef struct video_registers_s
@@ -188,8 +194,8 @@
{ OV0_AUTO_FLIP_CNTL, 0 },
{ OV0_FILTER_CNTL, 0 },
{ OV0_COLOUR_CNTL, 0 },
- { OV0_GRAPHICS_KEY_MSK, 0 },
{ OV0_GRAPHICS_KEY_CLR, 0 },
+ { OV0_GRAPHICS_KEY_MSK, 0 },
{ OV0_KEY_CNTL, 0 },
{ OV0_TEST, 0 }
};
@@ -270,6 +276,21 @@
#define INREG(addr) readl((radeon_mmio_base)+addr)
#define OUTREG(addr,val) writel(val, (radeon_mmio_base)+addr)
+static uint32_t radeon_vid_get_dbpp( void )
+{
+ uint32_t dbpp,retval;
+ dbpp = (INREG(CRTC_GEN_CNTL)>>8)& 0xF;
+ switch(dbpp)
+ {
+ case DST_8BPP: retval = 8; break;
+ case DST_15BPP: retval = 15; break;
+ case DST_16BPP: retval = 16; break;
+ case DST_24BPP: retval = 24; break;
+ default: retval=32; break;
+ }
+ return retval;
+}
+
static void __init radeon_vid_save_state( void )
{
size_t i;
@@ -315,6 +336,14 @@
OUTREG(OV0_COLOUR_CNTL, (besr.brightness & 0x7f) |
(besr.saturation << 8) |
(besr.saturation << 16));
+
+ if(besr.ckey_on)
+ {
+ OUTREG(OV0_GRAPHICS_KEY_MSK, besr.graphics_key_msk);
+ OUTREG(OV0_GRAPHICS_KEY_CLR, besr.graphics_key_clr);
+ OUTREG(OV0_KEY_CNTL,GRAPHIC_KEY_FN_FALSE|VIDEO_KEY_FN_FALSE|CMP_MIX_OR);
+ }
+ else OUTREG(OV0_KEY_CNTL,GRAPHIC_KEY_FN_NE);
OUTREG(OV0_AUTO_FLIP_CNTL,(INREG(OV0_AUTO_FLIP_CNTL)^OV0_AUTO_FLIP_CNTL_SOFT_EOF_TOGGLE));
OUTREG(OV0_AUTO_FLIP_CNTL,(INREG(OV0_AUTO_FLIP_CNTL)^OV0_AUTO_FLIP_CNTL_SOFT_EOF_TOGGLE));
@@ -380,6 +409,22 @@
OUTREG(OV0_REG_LOAD_CNTL, 0);
}
+void radeon_vid_set_color_key(int ckey_on, uint8_t R, uint8_t G, uint8_t B)
+{
+ besr.ckey_on = ckey_on;
+ if(radeon_vid_get_dbpp() == 16)
+ { /* 5.6.5 mode,
+ note that these values depend on DAC_CNTL.EXPAND_MODE setting */
+ R = (R<<3);
+ G = (G<<2);
+ B = (B<<3);
+ besr.graphics_key_msk=((R|0x7)<<16)|((G|0x3)<<8)|(B|0x7)|(0xff<<24);
+ }
+ else besr.graphics_key_msk = ((R)<<16)|((G) <<8)|(B)|(0xff<<24);
+ besr.graphics_key_clr=(R<<16)|(G<<8)|(B)|(0x00 << 24);
+}
+
+
#define XXX_SRC_X 0
#define XXX_SRC_Y 0
@@ -463,8 +508,8 @@
case IMGFMT_BGR32: pitch = ((src_w*4) + 15) & ~15; break;
}
+ besr.dest_bpp = radeon_vid_get_dbpp();
besr.fourcc = config->format;
-
besr.v_inc = (src_h << 20) / XXX_DRW_H;
h_inc = (src_w << 12) / XXX_DRW_W;
step_by = 1;
@@ -640,6 +685,10 @@
printk(RVID_MSG"failed copy to userspace\n");
return -EFAULT;
}
+ radeon_vid_set_color_key(radeon_config.colkey_on,
+ radeon_config.colkey_red,
+ radeon_config.colkey_green,
+ radeon_config.colkey_blue);
if(swap_fourcc) radeon_config.format = swab32(radeon_config.format);
printk(RVID_MSG"configuring for '%s' fourcc\n",fourcc_format_name(radeon_config.format));
return radeon_vid_init_video(&radeon_config);
@@ -792,7 +841,6 @@
#define PARAM_BRIGHTNESS "brightness="
#define PARAM_SATURATION "saturation="
#define PARAM_DOUBLE_BUFF "double_buff="
-#define PARAM_COLOUR_KEY "colour_key="
#define PARAM_DEINTERLACE "deinterlace="
#define PARAM_DEINTERLACE_PATTERN "deinterlace_pattern="
@@ -811,14 +859,15 @@
#ifdef CONFIG_MTRR
len += sprintf(&radeon_param_buff[len],"Tune MTRR: %s\n",mtrr?"on":"off");
#endif
+ if(besr.ckey_on) len += sprintf(&radeon_param_buff[len],"Last used color_key=%X (mask=%X)\n",besr.graphics_key_clr,besr.graphics_key_msk);
len += sprintf(&radeon_param_buff[len],"Swapped fourcc: %s\n",swap_fourcc?"on":"off");
+ len += sprintf(&radeon_param_buff[len],"Last BPP: %u\n",besr.dest_bpp);
len += sprintf(&radeon_param_buff[len],"Last fourcc: %s\n\n",fourcc_format_name(besr.fourcc));
len += sprintf(&radeon_param_buff[len],"Configurable stuff:\n");
len += sprintf(&radeon_param_buff[len],"~~~~~~~~~~~~~~~~~~~\n");
len += sprintf(&radeon_param_buff[len],PARAM_DOUBLE_BUFF"%s\n",besr.double_buff?"on":"off");
len += sprintf(&radeon_param_buff[len],PARAM_BRIGHTNESS"%i\n",brightness);
len += sprintf(&radeon_param_buff[len],PARAM_SATURATION"%u\n",saturation);
- len += sprintf(&radeon_param_buff[len],PARAM_COLOUR_KEY"%X\n",besr.graphics_key_clr);
len += sprintf(&radeon_param_buff[len],PARAM_DEINTERLACE"%s\n",besr.deinterlace_on?"on":"off");
len += sprintf(&radeon_param_buff[len],PARAM_DEINTERLACE_PATTERN"%X\n",besr.deinterlace_pattern);
radeon_param_buff_len = len;
@@ -862,13 +911,6 @@
{
if(memcmp(&buf[strlen(PARAM_DOUBLE_BUFF)],"on",2) == 0) besr.double_buff = 1;
else besr.double_buff = 0;
- }
- else
- if(memcmp(buf,PARAM_COLOUR_KEY,min(count,strlen(PARAM_COLOUR_KEY))) == 0)
- {
- long ckey;
- ckey=simple_strtol(&buf[strlen(PARAM_COLOUR_KEY)],NULL,16);
- OUTREG(OV0_GRAPHICS_KEY_CLR, ckey);
}
else
if(memcmp(buf,PARAM_DEINTERLACE,min(count,strlen(PARAM_DEINTERLACE))) == 0)
More information about the MPlayer-cvslog
mailing list