mirror of https://github.com/mpv-player/mpv
equalizer (brightness/contrast) support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6601 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
abd0478ed0
commit
1f901e5d6e
|
@ -6,14 +6,12 @@
|
||||||
YUY2 support (see config.format) added by A'rpi/ESP-team
|
YUY2 support (see config.format) added by A'rpi/ESP-team
|
||||||
double buffering added by A'rpi/ESP-team
|
double buffering added by A'rpi/ESP-team
|
||||||
|
|
||||||
Brightness/contrast support by Nick Kurshev
|
Brightness/contrast support by Nick Kurshev/Dariush Pietrzak (eyck) and me
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
* fix doublebuffering for vidix
|
* fix doublebuffering for vidix
|
||||||
* fix memory size detection (current reading pci userconfig isn't
|
* fix memory size detection (current reading pci userconfig isn't
|
||||||
working as requested - returns the max avail. ram on arch?)
|
working as requested - returns the max avail. ram on arch?)
|
||||||
* fix/complete brightness/contrast handling (Nick)
|
|
||||||
MGA users: please test this! (#define MGA_EQUALIZER)
|
|
||||||
* translate all non-english comments to english
|
* translate all non-english comments to english
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -46,8 +44,6 @@
|
||||||
|
|
||||||
#define MGA_VSYNC_POS 2
|
#define MGA_VSYNC_POS 2
|
||||||
|
|
||||||
#undef MGA_EQUALIZER
|
|
||||||
|
|
||||||
#undef MGA_PCICONFIG_MEMDETECT
|
#undef MGA_PCICONFIG_MEMDETECT
|
||||||
|
|
||||||
#define MGA_DEFAULT_FRAMES 1
|
#define MGA_DEFAULT_FRAMES 1
|
||||||
|
@ -122,11 +118,7 @@ static vidix_capability_t mga_cap =
|
||||||
4,
|
4,
|
||||||
4,
|
4,
|
||||||
-1,
|
-1,
|
||||||
FLAG_UPSCALER | FLAG_DOWNSCALER
|
FLAG_UPSCALER | FLAG_DOWNSCALER | FLAG_EQUALIZER,
|
||||||
#ifdef MGA_EQUALIZER
|
|
||||||
| FLAG_EQUALIZER
|
|
||||||
#endif
|
|
||||||
,
|
|
||||||
VENDOR_MATROX,
|
VENDOR_MATROX,
|
||||||
-1, /* will be set in vixProbe */
|
-1, /* will be set in vixProbe */
|
||||||
{ 0, 0, 0, 0}
|
{ 0, 0, 0, 0}
|
||||||
|
@ -734,7 +726,7 @@ int vixConfigPlayback(vidix_playback_t *config)
|
||||||
config->dest.pitch.y=32;
|
config->dest.pitch.y=32;
|
||||||
config->dest.pitch.u=config->dest.pitch.v=16;
|
config->dest.pitch.u=config->dest.pitch.v=16;
|
||||||
|
|
||||||
printf("[mga] Setting up a %dx%d+%d+%d video window (src %dx%d) format %X\n",
|
printf("[mga] Setting up a %dx%d-%dx%d video window (src %dx%d) format %X\n",
|
||||||
dw, dh, x, y, sw, sh, config->fourcc);
|
dw, dh, x, y, sw, sh, config->fourcc);
|
||||||
|
|
||||||
if ((sw < 4) || (sh < 4) || (dw < 4) || (dh < 4))
|
if ((sw < 4) || (sh < 4) || (dw < 4) || (dh < 4))
|
||||||
|
@ -852,7 +844,6 @@ int vixConfigPlayback(vidix_playback_t *config)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Disable contrast and brightness control
|
//Disable contrast and brightness control
|
||||||
regs.besglobctl |= (1<<5) + (1<<7);
|
regs.besglobctl |= (1<<5) + (1<<7);
|
||||||
regs.beslumactl = (0x7f << 16) + (0x80<<0);
|
regs.beslumactl = (0x7f << 16) + (0x80<<0);
|
||||||
|
@ -1443,46 +1434,49 @@ int vixSetGrKeys(const vidix_grkey_t *grkey)
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MGA_EQUALIZER
|
int vixPlaybackSetEq( const vidix_video_eq_t * eq)
|
||||||
static vidix_video_eq_t equal =
|
|
||||||
{
|
{
|
||||||
VEQ_CAP_BRIGHTNESS | VEQ_CAP_CONTRAST,
|
uint32_t luma = 0;
|
||||||
0, 0, 0, 0, 0, 0, 0, 0 };
|
float factor = 256.0 / 2000;
|
||||||
int vixPlaybackSetEq( const vidix_video_eq_t * eq)
|
|
||||||
{
|
|
||||||
uint32_t beslumactl;
|
|
||||||
int brightness,contrast;
|
|
||||||
|
|
||||||
/* contrast and brightness control isn't supported with G200,
|
/* contrast and brightness control isn't supported on G200 - alex */
|
||||||
don't enable c/b control and set values, just return error -- alex */
|
|
||||||
if (!is_g400)
|
if (!is_g400)
|
||||||
{
|
{
|
||||||
if (mga_verbose > 1)
|
if (mga_verbose > 1)
|
||||||
printf("[mga] equalizer isn't supported with G200\n");
|
printf("[mga] equalizer isn't supported with G200\n");
|
||||||
return ENOSYS;
|
return(ENOTSUP);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eq->cap & VEQ_CAP_BRIGHTNESS)
|
||||||
|
luma += ((int)(eq->brightness * factor) << 16);
|
||||||
|
if (eq->cap & VEQ_CAP_CONTRAST)
|
||||||
|
luma += ((int)(eq->contrast * factor) & 0xFFFF);
|
||||||
|
|
||||||
|
regs.beslumactl = luma+0x80;
|
||||||
|
|
||||||
|
writel(regs.beslumactl,mga_mmio_base + BESLUMACTL);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int vixPlaybackGetEq( vidix_video_eq_t * eq)
|
||||||
|
{
|
||||||
|
uint32_t luma;
|
||||||
|
float factor = 2000.0 / 256;
|
||||||
|
|
||||||
|
/* contrast and brightness control isn't supported on G200 - alex */
|
||||||
|
if (!is_g400)
|
||||||
|
{
|
||||||
|
if (mga_verbose > 1)
|
||||||
|
printf("[mga] equalizer isn't supported with G200\n");
|
||||||
|
return(ENOTSUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(eq->cap & VEQ_CAP_BRIGHTNESS) equal.brightness = eq->brightness;
|
regs.beslumactl = readl(mga_mmio_base + BESLUMACTL);
|
||||||
if(eq->cap & VEQ_CAP_CONTRAST) equal.contrast = eq->contrast;
|
luma = regs.beslumactl-0x80;
|
||||||
equal.flags = eq->flags;
|
|
||||||
|
|
||||||
//Enable contrast and brightness control
|
eq->brightness = (luma >> 16) * factor;
|
||||||
writel(readl(mga_mmio_base + BESGLOBCTL) & ~((1<<5) + (1<<7)),mga_mmio_base + BESGLOBCTL);
|
eq->contrast = (luma & 0xFFFF) * factor;
|
||||||
brightness = (equal.brightness * 128) / 1000;
|
eq->cap = VEQ_CAP_BRIGHTNESS | VEQ_CAP_CONTRAST;
|
||||||
if(brightness < -128) brightness = -128;
|
|
||||||
if(brightness > 127) brightness = 127;
|
|
||||||
contrast = ((equal.contrast + 1000) * 128) / 1000;
|
|
||||||
if(contrast < 0) contrast = 0;
|
|
||||||
if(contrast > 255) contrast = 255;
|
|
||||||
beslumactl = ((brightness & 0xff) << 16) | (contrast & 0xff);
|
|
||||||
|
|
||||||
writel(beslumactl,mga_mmio_base + BESLUMACTL);
|
return(0);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int vixPlaybackGetEq( vidix_video_eq_t * eq)
|
|
||||||
{
|
|
||||||
memcpy(eq,&equal,sizeof(vidix_video_eq_t));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
Loading…
Reference in New Issue