rage128_vid are fully works!!!

{Also there works brightness and saturation control ;)
 (Cause: there was saturation == 0 and as effect - grayscaled output).
 (on Radeons brightness and saturation still don't work)}
Reversed color and video key definition for radeons - they caused problems


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3367 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
nick 2001-12-07 09:56:39 +00:00
parent 5e4118bef3
commit 1510486f5d
2 changed files with 49 additions and 40 deletions

View File

@ -637,34 +637,16 @@
#define OV0_GRAPHICS_KEY_CLR 0x04EC
#define OV0_GRAPHICS_KEY_MSK 0x04F0
#define OV0_KEY_CNTL 0x04F4
#ifdef RAGE128
# define VIDEO_KEY_FN_MASK 0x00000007L
#else
# define VIDEO_KEY_FN_MASK 0x00000003L
#endif
# define VIDEO_KEY_FN_FALSE 0x00000000L
# define VIDEO_KEY_FN_TRUE 0x00000001L
#ifdef RAGE128
# define VIDEO_KEY_FN_EQ 0x00000004L
# define VIDEO_KEY_FN_NE 0x00000005L
#else
# define VIDEO_KEY_FN_EQ 0x00000002L
# define VIDEO_KEY_FN_NE 0x00000003L
#endif
#ifdef RAGE128
# define GRAPHIC_KEY_FN_MASK 0x00000070L
#else
# define GRAPHIC_KEY_FN_MASK 0x00000030L
#endif
# define GRAPHIC_KEY_FN_FALSE 0x00000000L
# define GRAPHIC_KEY_FN_TRUE 0x00000010L
#ifdef RAGE128
# define GRAPHIC_KEY_FN_EQ 0x00000040L
# define GRAPHIC_KEY_FN_NE 0x00000050L
#else
# define GRAPHIC_KEY_FN_EQ 0x00000020L
# define GRAPHIC_KEY_FN_NE 0x00000030L
#endif
# define CMP_MIX_MASK 0x00000100L
# define CMP_MIX_OR 0x00000000L
# define CMP_MIX_AND 0x00000100L

View File

@ -12,9 +12,12 @@
* This file is partly based on mga_vid and sis_vid stuff from
* mplayer's package.
* Also here was used code from CVS of GATOS project and X11 trees.
*
* SPECIAL THANKS TO: Hans-Peter Raschke for active testing and hacking
* Rage128(pro) stuff of this driver.
*/
#define RADEON_VID_VERSION "1.0.2.2"
#define RADEON_VID_VERSION "1.1.0"
/*
It's entirely possible this major conflicts with something else
@ -27,17 +30,16 @@
-----------------------------------------------------------
TODO:
Highest priority: fbvid.h compatibility
High priority: RGB/BGR 2-32, YVU9, IF09 support
Middle priority:
SCALER_GAMMA_SEL_BRIGHT gamma correction ???
OV0_AUTO_FLIP_CNTL
OV0_FILTER_CNTL
OV0_VIDEO_KEY_CLR
OV0_KEY_CNTL
Low priority: CLPL, IYU1, IYU2, UYNV, CYUV
YUNV, YVYU, Y41P, Y211, Y41T, Y42T, V422, V655, CLJR
^^^^
YUVP, UYVP, Mpeg PES (mpeg-1,2) support
High priority: Fixing BUGS
Middle priority: RGB/BGR 2-32, YVU9, IF09 support
Low priority: CLPL, IYU1, IYU2, UYNV, CYUV, YUNV, YVYU, Y41P, Y211, Y41T,
^^^^
Y42T, V422, V655, CLJR, YUVP, UYVP, Mpeg PES (mpeg-1,2) support
...........................................................
BUGS and LACKS:
Wrong aspect of scaling if image_height < 200 && screen_height == 200
Color and video keys don't work
Contrast and brightness are unconfigurable on radeons
*/
#include <linux/config.h>
@ -375,15 +377,20 @@ static void radeon_vid_display_video( void )
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_EQ|VIDEO_KEY_FN_FALSE|CMP_MIX_OR);
}
else OUTREG(OV0_KEY_CNTL,GRAPHIC_KEY_FN_NE);
else
{
OUTREG(OV0_GRAPHICS_KEY_MSK, 0ULL);
OUTREG(OV0_GRAPHICS_KEY_CLR, 0ULL);
OUTREG(OV0_KEY_CNTL,GRAPHIC_KEY_FN_NE);
}
OUTREG(OV0_H_INC, besr.h_inc);
OUTREG(OV0_STEP_BY, besr.step_by);
OUTREG(OV0_Y_X_START, besr.y_x_start);
@ -651,6 +658,7 @@ static void radeon_vid_frame_sel(int frame)
static void radeon_vid_make_default(void)
{
OUTREG(OV0_COLOUR_CNTL,0x00101000UL); /* Default brihgtness and saturation for Rage128 */
besr.deinterlace_pattern = 0x900AAAAA;
OUTREG(OV0_DEINTERLACE_PATTERN,besr.deinterlace_pattern);
besr.deinterlace_on=1;
@ -879,8 +887,11 @@ static int __init radeon_vid_config_card(void)
static void radeon_param_buff_fill( void )
{
unsigned len,saturation;
long brightness;
brightness = besr.brightness;
int8_t brightness;
brightness = besr.brightness & 0x7f;
/* FIXME: It's probably x86 specific convertion. But it doesn't matter
for general logic - only for printing value */
if(brightness > 63) brightness = (((~besr.brightness) & 0x3f)+1) * (-1);
saturation = besr.saturation;
len = 0;
len += sprintf(&radeon_param_buff[len],"Interface version: %04X\nDriver version: %s\n",MGA_VID_VERSION,RADEON_VID_VERSION);
@ -898,7 +909,7 @@ static void radeon_param_buff_fill( void )
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"%li\n",brightness);
len += sprintf(&radeon_param_buff[len],PARAM_BRIGHTNESS"%i\n",(int)brightness);
len += sprintf(&radeon_param_buff[len],PARAM_SATURATION"%u\n",saturation);
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);
@ -923,7 +934,7 @@ static ssize_t radeon_vid_write(struct file *file, const char *buf, size_t count
{
long brightness;
brightness=simple_strtol(&buf[strlen(PARAM_BRIGHTNESS)],NULL,10);
if(brightness >= -64 && brightness <= 63)
if(brightness >= -64 && brightness <= 63) besr.brightness = brightness;
OUTREG(OV0_COLOUR_CNTL, (brightness & 0x7f) |
(besr.saturation << 8) |
(besr.saturation << 16));
@ -1009,12 +1020,28 @@ static int radeon_vid_open(struct inode *inode, struct file *file)
static struct file_operations radeon_vid_fops =
{
llseek: radeon_vid_lseek,
read: radeon_vid_read,
read: radeon_vid_read,
write: radeon_vid_write,
/*
readdir:
poll:
*/
ioctl: radeon_vid_ioctl,
mmap: radeon_vid_mmap,
open: radeon_vid_open,
mmap: radeon_vid_mmap,
open: radeon_vid_open,
/*
flush:
*/
release: radeon_vid_release
/*
fsync:
fasync:
lock:
readv:
writev:
sendpage:
get_unmapped_area:
*/
};
#else
static struct file_operations radeon_vid_fops =