PATCH: Fix XV overlay color attr. (Intel-2.2.1)

Thomas Fritzsche tf at noto.de
Sat May 10 23:59:44 PDT 2008


Hi Edgar,

looks good! I also cleaned up a little and now it looks like below.
These links are also updated:

This patch is against 2.2.1 intel driver:
http://linux.pengin.de/intel_xv_attr.diff

I tested successful with my i965 and gnome video player.
(patched Ubuntu 8:10 package:
http://linux.pengin.de/xserver-xorg-video-intel_2.2.1-1ubun.deb)

Cheers,
 Thomas Fritzsche

====================
diff -urN xserver-xorg-video-intel-2.2.1_orig/src/i830_video.c
xserver-xorg-video-intel-2.2.1/src/i830_video.c
--- xserver-xorg-video-intel-2.2.1_orig/src/i830_video.c	2008-02-21
06:41:25.000000000 +0900
+++ xserver-xorg-video-intel-2.2.1/src/i830_video.c	2008-05-11
15:48:44.000000000 +0900
@@ -623,8 +623,11 @@
     overlay->SWIDTH = 0;
     overlay->SWIDTHSW = 0;
     overlay->SHEIGHT = 0;
-    overlay->OCLRC0 = (pPriv->contrast << 18) | (pPriv->brightness & 0xff);
-    overlay->OCLRC1 = pPriv->saturation;
+    overlay->OCLRC0 = ((pPriv->contrast <= 128 ? pPriv->contrast / 2 :
+       64  + ((pPriv->contrast - 128) * 191 ) / 127) << 18)
+       | (pPriv->brightness & 0xff);
+    overlay->OCLRC1 = pPriv->saturation <= 512 ? pPriv->saturation / 4 :
+       128  + ((pPriv->saturation - 512) * 895) / 511;
 #if 0
     overlay->AWINPOS = 0;
     overlay->AWINSZ = 0;
@@ -834,8 +837,8 @@
     pPriv->colorKey = pI830->colorKey & ((1 << pScrn->depth) - 1);
     pPriv->videoStatus = 0;
     pPriv->brightness = 0;
-    pPriv->contrast = 64;
-    pPriv->saturation = 128;
+    pPriv->contrast = 128;
+    pPriv->saturation = 512;
     pPriv->current_crtc = NULL;
     pPriv->desired_crtc = NULL;
     pPriv->buf = NULL;
@@ -1046,21 +1049,23 @@
 	if ((value < -128) || (value > 127))
 	    return BadValue;
 	pPriv->brightness = value;
-	overlay->OCLRC0 = (pPriv->contrast << 18) | (pPriv->brightness & 0xff);
+	overlay->OCLRC0 = (overlay->OCLRC0 & 0xffffff00) | (pPriv->brightness & 0xff);
 	OVERLAY_DEBUG("BRIGHTNESS\n");
 	i830_overlay_continue (pScrn, FALSE);
     } else if (attribute == xvContrast) {
 	if ((value < 0) || (value > 255))
 	    return BadValue;
 	pPriv->contrast = value;
-	overlay->OCLRC0 = (pPriv->contrast << 18) | (pPriv->brightness & 0xff);
+	overlay->OCLRC0 = ( (pPriv->contrast <= 128 ? pPriv->contrast / 2 :
+          64  + ((pPriv->contrast - 128) * 191 ) / 127) << 18) |
(overlay->OCLRC0  & 0xff);
 	OVERLAY_DEBUG("CONTRAST\n");
 	i830_overlay_continue (pScrn, FALSE);
     } else if (attribute == xvSaturation) {
 	if ((value < 0) || (value > 1023))
 	    return BadValue;
 	pPriv->saturation = value;
-	overlay->OCLRC1 = pPriv->saturation;
+        overlay->OCLRC1 = pPriv->saturation <= 512 ? pPriv->saturation / 4 :
+           128  + ((pPriv->saturation - 512) * 895) / 511;
 	i830_overlay_continue (pScrn, FALSE);
     } else if (attribute == xvPipe) {
 	xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);



On Sat, May 10, 2008 at 7:29 PM, Edgar Toernig <froese at gmx.de> wrote:
> Thomas Fritzsche wrote:
>>
>> +    if (pPriv->contrast <= 128) contrast = (int) (pPriv->contrast / 2);
>> +    else contrast = (int) (64  + (pPriv->contrast -127) * (192/127));
>> +    if (contrast > 255) contrast = 255;
>
>> +    if (pPriv->saturation <= 512) saturation = (int) (pPriv->saturation / 4 );
>> +    else saturation = (int) (128  + (pPriv->saturation-512) * (895/512));
>> +    if ( saturation > 1023 ) saturation = 1023;
>
> Expressions like (192/127) are evalutated to 1.  Is that really what
> you want?  The constants itself look a little bit off, too.
>
> What about:
>
>       else contrast = 64 + (pPriv->contrast - 128) * 191 / 127;
>
>       else saturation = 128 + (pPriv->saturation - 512) * 895 / 511;
>
> instead?
>
> Ciao, ET.
>
> _______________________________________________
> xorg mailing list
> xorg at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xorg
>



More information about the xorg mailing list