changeset 6764:7755d1d59394

fix hue bug with nvidia's shit. i teszted with g400,radeon7500,tnt2ultra,geforce2mx200
author pontscho
date Sun, 21 Jul 2002 19:57:25 +0000
parents e29f95ed5d36
children 9c6ed4f15acc
files libvo/vo_xv.c
diffstat 1 files changed, 27 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_xv.c	Sun Jul 21 14:36:33 2002 +0000
+++ b/libvo/vo_xv.c	Sun Jul 21 19:57:25 2002 +0000
@@ -174,7 +174,7 @@
    then trigger it if it's ok so that the other values are at default upon query */
                 if (xv_atomka != None)
                 {
-		    int port_value,port_min,port_max,port_mid;
+		    int hue = 0,port_value,port_min,port_max,port_mid;
 		    if(strcmp(attributes[i].name,"XV_BRIGHTNESS") == 0
 			      && (info->cap & VEQ_CAP_BRIGHTNESS))
 				port_value = info->brightness;
@@ -189,7 +189,7 @@
 		    else
 		    if(strcmp(attributes[i].name,"XV_HUE") == 0
 			      && (info->cap & VEQ_CAP_HUE))
-				port_value = info->hue;
+				{ port_value = info->hue; hue=1; }
 		    else
                     /* Note: since 22.01.2002 GATOS supports these attrs for radeons (NK) */
 		    if(strcmp(attributes[i].name,"XV_RED_INTENSITY") == 0
@@ -210,8 +210,13 @@
 		    port_min = xv_min;
 		    port_max = xv_max;
 		    port_mid = (port_min + port_max) / 2;
-		    port_value = port_mid + (port_value * (port_max - port_min)) / 2000;
-		    mp_msg(MSGT_VO,MSGL_V,"vo_xv: set gamma %s to %i (min %i max %i mid %i)\n",attributes[i].name,port_value,port_min,port_max,port_mid);
+
+		    if ( hue && port_min == 0 && port_max == 360 )
+		     {
+		      port_value=( port_value * port_mid ) / 1000;
+		      if ( port_value < 0 ) port_value+=port_max - 1;
+		     } else port_value = port_mid + (port_value * (port_max - port_min)) / 2000;
+		    
                     XvSetPortAttribute(mDisplay, xv_port, xv_atomka, port_value);
                 }
         }
@@ -243,39 +248,46 @@
    then trigger it if it's ok so that the other values are at default upon query */
                 if (xv_atomka != None)
                 {
-		    int port_value,port_min,port_max,port_mid;
+		    int value,port_value,port_min,port_max,port_mid;
                     XvGetPortAttribute(mDisplay, xv_port, xv_atomka, &port_value);
 		    mp_msg(MSGT_VO,MSGL_V,"vo_xv: get: %s = %i\n",attributes[i].name,port_value);
 
 		    port_min = xv_min;
 		    port_max = xv_max;
-		    port_mid = (port_min + port_max) / 2;		    
-		    port_value = ((port_value - port_mid)*2000)/(port_max-port_min);
+		    port_mid = (port_min + port_max) / 2;
+		    
+                    value = ((port_value - port_mid)*2000)/(port_max-port_min);
 		    
 		    mp_msg(MSGT_VO,MSGL_V,"vo_xv: assume: %s = %i\n",attributes[i].name,port_value);
 		    
 		    if(strcmp(attributes[i].name,"XV_BRIGHTNESS") == 0)
 		    {
 			info->cap |= VEQ_CAP_BRIGHTNESS;
-			info->brightness = port_value;
+			info->brightness = value;
 		    }
 		    else
 		    if(strcmp(attributes[i].name,"XV_SATURATION") == 0)
 		    {
 			info->cap |= VEQ_CAP_SATURATION;
-			info->saturation = port_value;
+			info->saturation = value;
 		    }
 		    else
 		    if(strcmp(attributes[i].name,"XV_CONTRAST") == 0)
 		    {
 			info->cap |= VEQ_CAP_CONTRAST;
-			info->contrast = port_value;
+			info->contrast = value;
 		    }
 		    else
 		    if(strcmp(attributes[i].name,"XV_HUE") == 0)
 		    {
+		        if ( port_min == 0 && port_max == 360 )
+		         {
+		          if ( port_value > port_mid - 1 ) value=( port_value - port_max + 1 ) * 1000 / port_mid;
+			   else value=port_value * 1000 / port_mid;
+		         }
+//		        mp_msg(MSGT_VO,MSGL_STATUS,"vo_xv: assume: %s = %d (%d)\n",attributes[i].name,value,port_value);
 			info->cap |= VEQ_CAP_HUE;
-			info->hue = port_value;
+			info->hue = value;
 		    }
 		    else
                     /* Note: since 22.01.2002 GATOS supports these attrs for radeons (NK) */
@@ -303,6 +315,7 @@
     return 0;
 }
 
+#if 0
 static void set_gamma_correction( void )
 {
   vidix_video_eq_t info;
@@ -320,6 +333,7 @@
   /* reset with XV_SET_DEFAULTS only once */
   __xv_set_video_eq(&info,1);
 }
+#endif
 
 /*
  * connect to server, create and map window,
@@ -495,7 +509,9 @@
      current_buf=0;
      current_ip_buf=0;
 
+#if 0
      set_gamma_correction();
+#endif
 
      aspect(&vo_dwidth,&vo_dheight,A_NOZOOM);
      if ( ( flags&1 )&&( !WinID ) )