Mercurial > mplayer.hg
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 ) )