]> sjero.net Git - linphone/commitdiff
Add callbacks for audio (un)initialization in the echo canceller calibrator.
authorGhislain MARY <ghislain.mary@belledonne-communications.com>
Tue, 23 Apr 2013 08:45:01 +0000 (10:45 +0200)
committerGhislain MARY <ghislain.mary@belledonne-communications.com>
Tue, 23 Apr 2013 08:48:17 +0000 (10:48 +0200)
coreapi/ec-calibrator.c
coreapi/linphonecore_jni.cc
coreapi/linphonecore_utils.h
coreapi/private.h
coreapi/test_ecc.c

index d724669a4d6037f8474b5d8ebd001e4a47c50352..223fb087d91b3c3144aefccee607a12d7ce894dd 100644 (file)
@@ -77,10 +77,17 @@ static void ecc_init_filters(EcCalibrator *ecc){
 
        ms_ticker_attach(ecc->ticker,ecc->sndread);
        ms_ticker_attach(ecc->ticker,ecc->play);
-       
+
+       if (ecc->audio_init_cb != NULL) {
+               (*ecc->audio_init_cb)(ecc->cb_data);
+       }
 }
 
 static void ecc_deinit_filters(EcCalibrator *ecc){
+       if (ecc->audio_uninit_cb != NULL) {
+               (*ecc->audio_uninit_cb)(ecc->cb_data);
+       }
+
        ms_ticker_detach(ecc->ticker,ecc->sndread);
        ms_ticker_detach(ecc->ticker,ecc->play);
 
@@ -232,12 +239,15 @@ static void  * ecc_thread(void *p){
        return NULL;
 }
 
-EcCalibrator * ec_calibrator_new(MSSndCard *play_card, MSSndCard *capt_card, unsigned int rate, LinphoneEcCalibrationCallback cb, void *cb_data ){
+EcCalibrator * ec_calibrator_new(MSSndCard *play_card, MSSndCard *capt_card, unsigned int rate, LinphoneEcCalibrationCallback cb,
+                                LinphoneEcCalibrationAudioInit audio_init_cb, LinphoneEcCalibrationAudioUninit audio_uninit_cb, void *cb_data){
        EcCalibrator *ecc=ms_new0(EcCalibrator,1);
 
        ecc->rate=rate;
        ecc->cb=cb;
        ecc->cb_data=cb_data;
+       ecc->audio_init_cb=audio_init_cb;
+       ecc->audio_uninit_cb=audio_uninit_cb;
        ecc->capt_card=capt_card;
        ecc->play_card=play_card;
        ms_thread_create(&ecc->thread,NULL,ecc_thread,ecc);
@@ -253,13 +263,14 @@ void ec_calibrator_destroy(EcCalibrator *ecc){
        ms_free(ecc);
 }
 
-int linphone_core_start_echo_calibration(LinphoneCore *lc, LinphoneEcCalibrationCallback cb, void *cb_data){
+int linphone_core_start_echo_calibration(LinphoneCore *lc, LinphoneEcCalibrationCallback cb,
+                                        LinphoneEcCalibrationAudioInit audio_init_cb, LinphoneEcCalibrationAudioUninit audio_uninit_cb, void *cb_data){
        if (lc->ecc!=NULL){
                ms_error("Echo calibration is still on going !");
                return -1;
        }
        unsigned int rate = lp_config_get_int(lc->config,"sound","echo_cancellation_rate",8000);
-       lc->ecc=ec_calibrator_new(lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard,rate,cb,cb_data);
+       lc->ecc=ec_calibrator_new(lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard,rate,cb,audio_init_cb,audio_uninit_cb,cb_data);
        return 0;
 }
 
index b721c689247bacf88288decdf4a338114fbde52f..02ac62c7a8498c546a1d49f557b7fe1cca97dabc 100644 (file)
@@ -996,6 +996,8 @@ extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_startEchoCalibration(JNI
                                                                                                                                                                ,jobject data) {
        return (jint)linphone_core_start_echo_calibration((LinphoneCore*)lc
                                                                                                        , LinphoneCoreData::ecCalibrationStatus
+                                                                                                       , NULL
+                                                                                                       , NULL
                                                                                                        , data?env->NewGlobalRef(data):NULL);
 
 }
index cc0a6f692ad420071682b4505c443d26348dd6d2..b80992ad1471c6bc5c9aab370d8610087d6567a2 100644 (file)
@@ -64,12 +64,15 @@ typedef enum {
 
 
 typedef void (*LinphoneEcCalibrationCallback)(LinphoneCore *lc, LinphoneEcCalibratorStatus status, int delay_ms, void *data);
+typedef void (*LinphoneEcCalibrationAudioInit)(void *data);
+typedef void (*LinphoneEcCalibrationAudioUninit)(void *data);
 
 /**
  *
  * Start an echo calibration of the sound devices, in order to find adequate settings for the echo canceller automatically.
 **/
-int linphone_core_start_echo_calibration(LinphoneCore *lc, LinphoneEcCalibrationCallback cb, void *cb_data);
+int linphone_core_start_echo_calibration(LinphoneCore *lc, LinphoneEcCalibrationCallback cb,
+                                        LinphoneEcCalibrationAudioInit audio_init_cb, LinphoneEcCalibrationAudioUninit audio_uninit_cb, void *cb_data);
 /**
  * @ingroup IOS
  * Special function to warm up  dtmf feeback stream. #linphone_core_stop_dtmf_stream must() be called before entering FG mode
index d80607ca95cbd2af3d6cfac1d9e1d315d80b8c07..b5312bd60c27634b4f927266c690ef9506a41f91 100644 (file)
@@ -662,6 +662,8 @@ struct _EcCalibrator{
        MSTicker *ticker;
        LinphoneEcCalibrationCallback cb;
        void *cb_data;
+       LinphoneEcCalibrationAudioInit audio_init_cb;
+       LinphoneEcCalibrationAudioUninit audio_uninit_cb;
        int64_t acc;
        int delay;
        unsigned int rate;
index 43ae0dcb2bf4c3e7485be432c2628f80dbfc72c5..38ba727655e51192c00a67ec0e717e5dec621597 100644 (file)
@@ -45,7 +45,7 @@ int main(int argc, char *argv[]){
        
        linphone_core_enable_logs(NULL);
 
-       linphone_core_start_echo_calibration(lc,calibration_finished,NULL);
+       linphone_core_start_echo_calibration(lc,calibration_finished,NULL,NULL,NULL);
        
        while(count++<1000){
                linphone_core_iterate(lc);