changeset 4395:817530449706

New logic of HW equalizing: 1) Check HW capability. 2) If HW equalizer is capable control value then use it. In this case value of control is in range -100 : +100 (10x) 3) If not then try use SW equalizing (currently only divxds). Use old range (0 : +100) for that. Well, you shouldn't watch OSD bar if neighter HW nor SW equalizers are not capable control value. TODO: find out keys (maybe Rr Bb Gg) or 'on screen menu' for RGB intensity and OEM effects (fx).
author nick
date Mon, 28 Jan 2002 07:29:17 +0000
parents e8b73a96b736
children a07b7233930b
files dec_video.c mencoder.c mplayer.c
diffstat 3 files changed, 58 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/dec_video.c	Sun Jan 27 21:46:06 2002 +0000
+++ b/dec_video.c	Mon Jan 28 07:29:17 2002 +0000
@@ -39,11 +39,6 @@
 extern double video_time_usage;
 extern double vout_time_usage;
 extern vo_vaa_t vo_vaa;
-extern int v_hw_equ_cap;
-extern int v_bright;
-extern int v_cont;
-extern int v_hue;
-extern int v_saturation;
 
 extern int frameratecode2framerate[16];
 
@@ -281,22 +276,55 @@
  }
 }
 
-int set_video_colors(sh_video_t *sh_video,char *item,int value){
-    if(v_hw_equ_cap != 0)
+int set_video_colors(sh_video_t *sh_video,char *item,int value)
+{
+    if(vo_vaa.get_video_eq)
     {
-	if(vo_vaa.set_video_eq)
+	vidix_video_eq_t veq;
+	if(vo_vaa.get_video_eq(&veq) == 0)
 	{
-	    vidix_video_eq_t veq;
-	    veq.cap = VEQ_CAP_BRIGHTNESS | VEQ_CAP_CONTRAST | VEQ_CAP_SATURATION | VEQ_CAP_HUE;
-	    veq.brightness = v_bright*10;
-	    veq.contrast = v_cont*10;
-	    veq.saturation = v_saturation*10;
-	    veq.hue = v_hue;
-	    veq.flags = VEQ_FLG_ITU_R_BT_601; /* Fixme please !!! */
-	    vo_vaa.set_video_eq(&veq);
+	    int v_hw_equ_cap = veq.cap;
+	    if(v_hw_equ_cap != 0)
+	    {
+		if(vo_vaa.set_video_eq)
+		{
+		    vidix_video_eq_t veq;
+		    veq.flags = VEQ_FLG_ITU_R_BT_601; /* Fixme please !!! */
+		    if(strcmp(item,"Brightness") == 0)
+		    {
+			if(!(v_hw_equ_cap & VEQ_CAP_BRIGHTNESS)) goto try_sw_control;
+			veq.brightness = value*10;
+			veq.cap = VEQ_CAP_BRIGHTNESS;
+		    }
+		    else
+		    if(strcmp(item,"Contrast") == 0)
+		    {
+			if(!(v_hw_equ_cap & VEQ_CAP_CONTRAST)) goto try_sw_control;
+			veq.contrast = value*10;
+			veq.cap = VEQ_CAP_CONTRAST;
+		    }
+		    else
+		    if(strcmp(item,"Saturation") == 0)
+		    {
+			if(!(v_hw_equ_cap & VEQ_CAP_SATURATION)) goto try_sw_control;
+			veq.saturation = value*10;
+			veq.cap = VEQ_CAP_SATURATION;
+		    }
+		    else
+		    if(strcmp(item,"Hue") == 0)
+		    {
+			if(!(v_hw_equ_cap & VEQ_CAP_HUE)) goto try_sw_control;
+			veq.hue = value*10;
+			veq.cap = VEQ_CAP_HUE;
+		    }
+		    else goto try_sw_control;;
+		    vo_vaa.set_video_eq(&veq);
+		}
+		return 1;
+	    }
 	}
-	return 1;
     }
+    try_sw_control:
 #ifdef USE_DIRECTSHOW
     if(sh_video->codec->driver==VFM_DSHOW){
 	DS_VideoDecoder_SetValue(ds_vdec,item,value);
--- a/mencoder.c	Sun Jan 27 21:46:06 2002 +0000
+++ b/mencoder.c	Mon Jan 28 07:29:17 2002 +0000
@@ -88,11 +88,6 @@
              Video accelerated architecture
 **************************************************************************/
 vo_vaa_t vo_vaa;
-int v_hw_equ_cap=0;
-int v_bright=50;
-int v_cont=50;
-int v_hue=50;
-int v_saturation=50;
 
 
 //--------------------------
--- a/mplayer.c	Sun Jan 27 21:46:06 2002 +0000
+++ b/mplayer.c	Mon Jan 28 07:29:17 2002 +0000
@@ -114,11 +114,6 @@
              Video accelerated architecture
 **************************************************************************/
 vo_vaa_t vo_vaa;
-int v_hw_equ_cap=0;
-int v_bright=50;
-int v_cont=50;
-int v_hue=50;
-int v_saturation=50;
 
 //**************************************************************************//
 //             Config file
@@ -446,6 +441,11 @@
 int osd_show_av_delay = 0;
 int osd_show_sub_delay = 0;
 
+int v_hw_equ_cap=0;
+int v_bright=50;
+int v_cont=50;
+int v_hue=50;
+int v_saturation=50;
 /*
 For future:
 int v_red_intensity=0;
@@ -1327,10 +1327,10 @@
 	if(vo_vaa.get_video_eq(&veq) == 0)
 	{
 	    v_hw_equ_cap = veq.cap;
-	    v_bright = veq.brightness/10;
-	    v_cont = veq.contrast/10;
-	    v_hue = veq.hue/10;
-	    v_saturation=veq.saturation/10;
+	    if(veq.cap & VEQ_CAP_BRIGHTNESS) v_bright = veq.brightness/10;
+	    if(veq.cap & VEQ_CAP_CONTRAST) v_cont = veq.contrast/10;
+	    if(veq.cap & VEQ_CAP_HUE) v_hue = veq.hue/10;
+	    if(veq.cap & VEQ_CAP_SATURATION) v_saturation=veq.saturation/10;
 	    /*
 	    v_red_intensity=veq.red_intensity/10;
 	    v_green_intensity=veq.green_intensity/10;
@@ -2097,7 +2097,7 @@
 	    if ( ++v_cont > 100 ) v_cont = 100;
         } else {
 	    --v_cont;
-	    if(v_hw_equ_cap)
+	    if(v_hw_equ_cap & VEQ_CAP_CONTRAST)
 	    {
 		if(v_cont < -100) v_cont = -100;
 	    }
@@ -2125,7 +2125,7 @@
 	    if ( ++v_bright > 100 ) v_bright = 100;
         } else {
 	    --v_bright;
-	    if(v_hw_equ_cap)
+	    if(v_hw_equ_cap & VEQ_CAP_BRIGHTNESS)
 	    {
 		if(v_bright < -100) v_bright = -100;
 	    }
@@ -2153,7 +2153,7 @@
 	    if ( ++v_hue > 100 ) v_hue = 100;
         } else {
 	    --v_hue;
-	    if(v_hw_equ_cap)
+	    if(v_hw_equ_cap & VEQ_CAP_HUE)
 	    {
 		if(v_hue < -100) v_hue = -100;
 	    }
@@ -2181,7 +2181,7 @@
 	    if ( ++v_saturation > 100 ) v_saturation = 100;
         } else {
 	    --v_saturation;
-	    if(v_hw_equ_cap)
+	    if(v_hw_equ_cap & VEQ_CAP_SATURATION)
 	    {
 		if(v_saturation < -100) v_saturation = -100;
 	    }