From bffd4007956561f8f3e442c934213bb1e774d9ae Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 27 Jan 2002 18:39:53 +0000 Subject: [PATCH] Support for HW equalizing git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4389 b3059339-0415-0410-9bf9-f77b7e298cf2 --- dec_video.c | 22 ++++++++++++++- mencoder.c | 11 ++++++++ mplayer.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 104 insertions(+), 9 deletions(-) diff --git a/dec_video.c b/dec_video.c index f8b46c1c9a..8ae5e85b96 100644 --- a/dec_video.c +++ b/dec_video.c @@ -38,6 +38,12 @@ extern int verbose; // defined in mplayer.c 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]; @@ -89,7 +95,6 @@ static DS_VideoDecoder* ds_vdec=NULL; #ifdef USE_TV #include "libmpdemux/tv.h" - extern int tv_param_on; extern tvi_handle_t *tv_handler; #endif @@ -277,6 +282,21 @@ void set_video_quality(sh_video_t *sh_video,int quality){ } int set_video_colors(sh_video_t *sh_video,char *item,int value){ + if(v_hw_equ_cap != 0) + { + if(vo_vaa.set_video_eq) + { + 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); + } + return 1; + } #ifdef USE_DIRECTSHOW if(sh_video->codec->driver==VFM_DSHOW){ DS_VideoDecoder_SetValue(ds_vdec,item,value); diff --git a/mencoder.c b/mencoder.c index 3a95dda64a..7a6f57cb85 100644 --- a/mencoder.c +++ b/mencoder.c @@ -84,6 +84,17 @@ int lavc_param_keyint = -1; #include "fastmemcpy.h" +/************************************************************************** + 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; + + //-------------------------- // cache2: diff --git a/mplayer.c b/mplayer.c index 55c28d0a87..44d7b1b2e8 100644 --- a/mplayer.c +++ b/mplayer.c @@ -114,6 +114,12 @@ m_config_t* mconfig; 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 //**************************************************************************// @@ -440,10 +446,12 @@ int osd_last_pts=-303; int osd_show_av_delay = 0; int osd_show_sub_delay = 0; -int v_bright=50; -int v_cont=50; -int v_hue=50; -int v_saturation=50; +/* +For future: +int v_red_intensity=0; +int v_green_intensity=0; +int v_blue_intensity=0; +*/ int vo_flags=0; @@ -1310,6 +1318,26 @@ current_module="init_libvo"; inited_flags|=INITED_VO; mp_msg(MSGT_CPLAYER,MSGL_V,"INFO: Video OUT driver init OK!\n"); video_out->query_vaa(&vo_vaa); + /* + get_hw_eq + */ + if(vo_vaa.get_video_eq) + { + vidix_video_eq_t veq; + 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; + /* + v_red_intensity=veq.red_intensity/10; + v_green_intensity=veq.green_intensity/10; + v_blue_intensity=veq.blue_intensity/10; + */ + } + } fflush(stdout); //================== MAIN: ========================== @@ -2068,7 +2096,15 @@ if(step_sec>0) { if(c=='2'){ if ( ++v_cont > 100 ) v_cont = 100; } else { - if ( --v_cont < 0 ) v_cont = 0; + --v_cont; + if(v_hw_equ_cap) + { + if(v_cont < -100) v_cont = -100; + } + else + { + if ( v_cont < 0 ) v_cont = 0; + } } if(set_video_colors(sh_video,"Contrast",v_cont)){ #ifdef USE_OSD @@ -2076,6 +2112,7 @@ if(step_sec>0) { osd_visible=sh_video->fps; // 1 sec vo_osd_progbar_type=OSD_CONTRAST; vo_osd_progbar_value=((v_cont)<<8)/100; + if(v_hw_equ_cap) vo_osd_progbar_value = ((v_cont+100)<<8)/200; } #endif } @@ -2087,7 +2124,15 @@ if(step_sec>0) { if(c=='4'){ if ( ++v_bright > 100 ) v_bright = 100; } else { - if ( --v_bright < 0 ) v_bright = 0; + --v_bright; + if(v_hw_equ_cap) + { + if(v_bright < -100) v_bright = -100; + } + else + { + if ( v_bright < 0 ) v_bright = 0; + } } if(set_video_colors(sh_video,"Brightness",v_bright)){ #ifdef USE_OSD @@ -2095,6 +2140,7 @@ if(step_sec>0) { osd_visible=sh_video->fps; // 1 sec vo_osd_progbar_type=OSD_BRIGHTNESS; vo_osd_progbar_value=((v_bright)<<8)/100; + if(v_hw_equ_cap) vo_osd_progbar_value = ((v_bright+100)<<8)/200; } #endif } @@ -2106,7 +2152,15 @@ if(step_sec>0) { if(c=='6'){ if ( ++v_hue > 100 ) v_hue = 100; } else { - if ( --v_hue < 0 ) v_hue = 0; + --v_hue; + if(v_hw_equ_cap) + { + if(v_hue < -100) v_hue = -100; + } + else + { + if ( v_hue < 0 ) v_hue = 0; + } } if(set_video_colors(sh_video,"Hue",v_hue)){ #ifdef USE_OSD @@ -2114,6 +2168,7 @@ if(step_sec>0) { osd_visible=sh_video->fps; // 1 sec vo_osd_progbar_type=OSD_HUE; vo_osd_progbar_value=((v_hue)<<8)/100; + if(v_hw_equ_cap) vo_osd_progbar_value = ((v_hue+100)<<8)/200; } #endif } @@ -2125,7 +2180,15 @@ if(step_sec>0) { if(c=='8'){ if ( ++v_saturation > 100 ) v_saturation = 100; } else { - if ( --v_saturation < 0 ) v_saturation = 0; + --v_saturation; + if(v_hw_equ_cap) + { + if(v_saturation < -100) v_saturation = -100; + } + else + { + if ( v_saturation < 0 ) v_saturation = 0; + } } if(set_video_colors(sh_video,"Saturation",v_saturation)){ #ifdef USE_OSD @@ -2133,6 +2196,7 @@ if(step_sec>0) { osd_visible=sh_video->fps; // 1 sec vo_osd_progbar_type=OSD_SATURATION; vo_osd_progbar_value=((v_saturation)<<8)/100; + if(v_hw_equ_cap) vo_osd_progbar_value = ((v_saturation+100)<<8)/200; } #endif }