]> sjero.net Git - linphone/commitdiff
echo limiter clarified
authorSimon Morlat <simon.morlat@linphone.org>
Thu, 24 Jun 2010 08:22:18 +0000 (10:22 +0200)
committerSimon Morlat <simon.morlat@linphone.org>
Thu, 24 Jun 2010 08:22:18 +0000 (10:22 +0200)
console/shell.c
coreapi/linphonecore.c
mediastreamer2

index 0f0906439c10db1e46322412313cc8d88e226580..e61a6e51467c0d88ad3f9ad9e906b72d1fb64733 100644 (file)
@@ -142,7 +142,11 @@ static void spawn_linphonec(int argc, char *argv[]){
        }
        args[j++]=NULL;
 
+#ifdef __uClinux__
        pid = vfork();
+#else
+       pid = fork();
+#endif
        if (pid < 0){
                fprintf(stderr,"Could not fork\n");
                exit(-1);
index ccc40a810ea814ae5decaff0d949ddd4f99461ef..5e0555bc7ae3c6967f4034c906c654d69cf38213 100644 (file)
@@ -2174,8 +2174,8 @@ void linphone_core_init_media_streams(LinphoneCore *lc, LinphoneCall *call){
                const char *type=lp_config_get_string(lc->config,"sound","el_type","mic");
                if (strcasecmp(type,"mic")==0)
                        audio_stream_enable_echo_limiter(lc->audiostream,ELControlMic);
-               else if (strcasecmp(type,"speaker")==0)
-                       audio_stream_enable_echo_limiter(lc->audiostream,ELControlSpeaker);
+               else if (strcasecmp(type,"full")==0)
+                       audio_stream_enable_echo_limiter(lc->audiostream,ELControlFull);
        }
        audio_stream_enable_gain_control(lc->audiostream,TRUE);
        if (linphone_core_echo_cancellation_enabled(lc)){
@@ -2241,9 +2241,10 @@ static void parametrize_equalizer(LinphoneCore *lc, AudioStream *st){
 
 static void post_configure_audio_streams(LinphoneCore *lc){
        AudioStream *st=lc->audiostream;
-       float gain=lp_config_get_float(lc->config,"sound","mic_gain",-1);
-       if (gain!=-1)
-               audio_stream_set_mic_gain(st,gain);
+       float mic_gain=lp_config_get_float(lc->config,"sound","mic_gain",-1);
+       float thres = 0;
+       if (mic_gain!=-1)
+               audio_stream_set_mic_gain(st,mic_gain);
        lc->audio_muted=FALSE;
        float recv_gain = lc->sound_conf.soft_play_lev;
        if (recv_gain != 0) {
@@ -2251,36 +2252,34 @@ static void post_configure_audio_streams(LinphoneCore *lc){
        }
        if (linphone_core_echo_limiter_enabled(lc)){
                float speed=lp_config_get_float(lc->config,"sound","el_speed",-1);
-               float thres=lp_config_get_float(lc->config,"sound","el_thres",-1);
+               thres=lp_config_get_float(lc->config,"sound","el_thres",-1);
                float force=lp_config_get_float(lc->config,"sound","el_force",-1);
                int sustain=lp_config_get_int(lc->config,"sound","el_sustain",-1);
                MSFilter *f=NULL;
-               if (st->el_type==ELControlMic){
+               if (st->el_type!=ELInactive){
                        f=st->volsend;
                        if (speed==-1) speed=0.03;
-                       if (force==-1) force=10;
-               }
-               else if (st->el_type==ELControlSpeaker){
-                       f=st->volrecv;
-                       if (speed==-1) speed=0.02;
-                       if (force==-1) force=5;
-               }
-               if (speed!=-1)
+                       if (force==-1) force=25;
                        ms_filter_call_method(f,MS_VOLUME_SET_EA_SPEED,&speed);
+                       ms_filter_call_method(f,MS_VOLUME_SET_EA_FORCE,&force);
                if (thres!=-1)
                        ms_filter_call_method(f,MS_VOLUME_SET_EA_THRESHOLD,&thres);
-               if (force!=-1)
-                       ms_filter_call_method(f,MS_VOLUME_SET_EA_FORCE,&force);
                if (sustain!=-1)
                        ms_filter_call_method(f,MS_VOLUME_SET_EA_SUSTAIN,&sustain);
-
        }
-       if (st->volsend){
+       }
                float ng_thres=lp_config_get_float(lc->config,"sound","ng_thres",0.05);
                float ng_floorgain=lp_config_get_float(lc->config,"sound","ng_floorgain",0);
+       if (st->volsend){
                ms_filter_call_method(st->volsend,MS_VOLUME_SET_NOISE_GATE_THRESHOLD,&ng_thres);
                ms_filter_call_method(st->volsend,MS_VOLUME_SET_NOISE_GATE_FLOORGAIN,&ng_floorgain);
        }
+       if (st->volrecv){
+               /* parameters for a limited noise-gate effect, using echo limiter threshold */
+               float floorgain = 1/mic_gain;
+               ms_filter_call_method(st->volrecv,MS_VOLUME_SET_NOISE_GATE_THRESHOLD,&thres);
+               ms_filter_call_method(st->volrecv,MS_VOLUME_SET_NOISE_GATE_FLOORGAIN,&floorgain);
+       }
        parametrize_equalizer(lc,st);
        if (lc->vtable.dtmf_received!=NULL){
                /* replace by our default action*/
@@ -3007,7 +3006,7 @@ bool_t linphone_core_echo_limiter_enabled(const LinphoneCore *lc){
 void linphone_core_mute_mic(LinphoneCore *lc, bool_t val){
        if (lc->audiostream!=NULL){
                 audio_stream_set_mic_gain(lc->audiostream,
-                       (val==TRUE) ? 0 : 1.0);
+                       (val==TRUE) ? 0 : 1.0);   // REVISIT: take mic_gain value
                 if ( linphone_core_get_rtp_no_xmit_on_audio_mute(lc) ){
                   audio_stream_mute_rtp(lc->audiostream,val);
                 }
index 0401519a5946e9216c836ef6271bb2b3bf688179..1b3906bb79d1942854eef377e935fa46dfcf7062 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 0401519a5946e9216c836ef6271bb2b3bf688179
+Subproject commit 1b3906bb79d1942854eef377e935fa46dfcf7062