Commit 2e94a354 authored by aymeric's avatar aymeric

clean up PSD computing on high frequency

git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@394 3f6dc0c8-ddfe-455d-9043-3cd528dc4637
parent 8a5f7e90
...@@ -131,13 +131,13 @@ static void channel_init(ConfState *s, Channel *chan, int pos){ ...@@ -131,13 +131,13 @@ static void channel_init(ConfState *s, Channel *chan, int pos){
/* enable AGC only on local soundcard */ /* enable AGC only on local soundcard */
val=0; val=0;
f=8000; f=12000;
if (s->agc_level>0 && pos==0) if (s->agc_level>0 && pos==0)
val=1; val=1;
else if (pos==0 && s->enable_halfduplex>0) else if (pos==0 && s->enable_halfduplex>0)
val=1; val=1;
else if ( pos%2==1 && s->enable_halfduplex>0) else if ( pos%2==1 && s->enable_halfduplex>0)
val=1; val=1; //1; should not do that
if (s->agc_level>0) if (s->agc_level>0)
f=(float)s->agc_level; f=(float)s->agc_level;
...@@ -266,7 +266,6 @@ static double powerspectrum_stat_beyond8K(struct Channel *chan){ ...@@ -266,7 +266,6 @@ static double powerspectrum_stat_beyond8K(struct Channel *chan){
ps = (spx_int32_t*)ortp_malloc(sizeof(spx_int32_t)*ps_size); ps = (spx_int32_t*)ortp_malloc(sizeof(spx_int32_t)*ps_size);
speex_preprocess_ctl(chan->speex_pp, SPEEX_PREPROCESS_GET_PSD, ps); speex_preprocess_ctl(chan->speex_pp, SPEEX_PREPROCESS_GET_PSD, ps);
mystat = 0; mystat = 0;
for (i=ps_size/2;i < ps_size; i++) { for (i=ps_size/2;i < ps_size; i++) {
double yp; double yp;
...@@ -277,19 +276,21 @@ static double powerspectrum_stat_beyond8K(struct Channel *chan){ ...@@ -277,19 +276,21 @@ static double powerspectrum_stat_beyond8K(struct Channel *chan){
#endif #endif
yp = yp * fftmul; yp = yp * fftmul;
yp = MIN(yp * 3000.0, 1.0); yp = MIN(yp * 3000.0, 1.0);
yp = (1 - yp) * (100 - 1.0f);
mystat = yp + mystat; mystat = yp + mystat;
} }
mystat = (mystat*2)/ps_size;
ortp_free(ps); ortp_free(ps);
/* value between 0 and 100? */ //ms_message("average power spectrum on half highest values ONLY: stat=%.3lf", 108.064 - mystat);
mystat = mystat*100*2/ps_size; /* values:
if (mystat<0) Maximum: 108,064 low volume on high frequency.
mystat=0; Decrease when volume increase. */
if (mystat>100)
mystat=100;
return mystat; /* return value between 0 and 108,064? */
return 108.064-mystat;
} }
#endif #endif
...@@ -402,8 +403,7 @@ static void conf_sum(MSFilter *f, ConfState *s){ ...@@ -402,8 +403,7 @@ static void conf_sum(MSFilter *f, ConfState *s){
if (s->enable_halfduplex>0) if (s->enable_halfduplex>0)
{ {
double mystat = powerspectrum_stat_beyond8K(chan); double mystat = powerspectrum_stat_beyond8K(chan);
//ms_message("is_speaking (chan=%i) -> on/stat=%.3lf", i, mystat); if (mystat>12)
if (mystat>10)
{ {
ms_message("is_speaking (chan=%i) -> on/stat=%.3lf", i, mystat); ms_message("is_speaking (chan=%i) -> on/stat=%.3lf", i, mystat);
s->channels[0].is_speaking=20; /* keep RTP unmuted for the next few ms */ s->channels[0].is_speaking=20; /* keep RTP unmuted for the next few ms */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment