]> sjero.net Git - linphone/blobdiff - coreapi/lsd.c
update ms2 and cleanup dead function
[linphone] / coreapi / lsd.c
index ddb8667c254f7156ef5142d05d990ba19a7c8362..e47023f4ffc94b93e4b7f675ec5c1b956071d670 100644 (file)
@@ -156,7 +156,7 @@ void *lsd_player_get_user_pointer(const LsdPlayer *p){
        return p->user_data;
 }
 
-static void lsd_player_on_eop(void * userdata, unsigned int id, void *arg){
+static void lsd_player_on_eop(void * userdata, MSFilter *f, unsigned int id, void *arg){
        LsdPlayer *p=(LsdPlayer *)userdata;
        if (p->eop_cb!=NULL)
                p->eop_cb(p);
@@ -215,11 +215,11 @@ bool_t lsd_player_loop_enabled(const LsdPlayer *p){
 void lsd_player_set_gain(LsdPlayer *p, float gain){
        MSAudioMixerCtl gainctl;
        gainctl.pin=p->mixer_pin;
-       gainctl.gain=gain;
+       gainctl.param.gain=gain;
        ms_filter_call_method(p->lsd->mixer,MS_AUDIO_MIXER_SET_INPUT_GAIN,&gainctl);
 }
 
-LinphoneSoundDaemon * linphone_sound_daemon_new(const char *cardname){
+LinphoneSoundDaemon * linphone_sound_daemon_new(const char *cardname, int rate, int nchannels){
        int i;
        MSConnectionPoint mp;
        LinphoneSoundDaemon *lsd;
@@ -238,8 +238,8 @@ LinphoneSoundDaemon * linphone_sound_daemon_new(const char *cardname){
        lsd=ms_new0(LinphoneSoundDaemon,1);
        lsd->soundout=ms_snd_card_create_writer(card);
        lsd->mixer=ms_filter_new(MS_AUDIO_MIXER_ID);
-       lsd->out_rate=44100;
-       lsd->out_nchans=2;
+       lsd->out_rate=rate;
+       lsd->out_nchans=nchannels;
        ms_filter_call_method(lsd->soundout,MS_FILTER_SET_SAMPLE_RATE,&lsd->out_rate);
        ms_filter_call_method(lsd->soundout,MS_FILTER_SET_NCHANNELS,&lsd->out_nchans);
        ms_filter_call_method(lsd->mixer,MS_FILTER_SET_SAMPLE_RATE,&lsd->out_rate);
@@ -250,7 +250,6 @@ LinphoneSoundDaemon * linphone_sound_daemon_new(const char *cardname){
 
        lsd_player_init(&lsd->branches[0],mp,MS_ITC_SOURCE_ID,lsd);
        ms_filter_set_notify_callback(lsd->branches[0].player,(MSFilterNotifyFunc)lsd_player_configure,&lsd->branches[0]);
-       ms_filter_enable_synchronous_notifcations (lsd->branches[0].player,TRUE);
        for(i=1;i<MAX_BRANCHES;++i){
                mp.pin=i;
                lsd_player_init(&lsd->branches[i],mp,MS_FILE_PLAYER_ID,lsd);
@@ -261,10 +260,24 @@ LinphoneSoundDaemon * linphone_sound_daemon_new(const char *cardname){
 
        lsd->proxycard=ms_snd_card_new(&proxycard);
        lsd->proxycard->data=lsd;
-       
+       ms_message("LinphoneSoundDaemon started with rate=%i, nchannels=%i",rate,nchannels);
        return lsd;
 }
 
+void linphone_sound_daemon_stop_all_players(LinphoneSoundDaemon *obj){
+       int i;
+       for(i=1;i<MAX_BRANCHES;++i){
+               lsd_player_stop(&obj->branches[i]);
+       }
+}
+
+void linphone_sound_daemon_release_all_players(LinphoneSoundDaemon *obj){
+       int i;
+       for(i=1;i<MAX_BRANCHES;++i){
+               linphone_sound_daemon_release_player(obj,&obj->branches[i]);
+       }
+}
+
 void linphone_sound_daemon_destroy(LinphoneSoundDaemon *obj){
        int i;
        MSConnectionPoint mp;
@@ -272,6 +285,7 @@ void linphone_sound_daemon_destroy(LinphoneSoundDaemon *obj){
        mp.filter=obj->mixer;
        for(i=0;i<MAX_BRANCHES;++i){
                mp.pin=i;
+               if (i!=0) linphone_sound_daemon_release_player(obj,&obj->branches[i]);
                lsd_player_uninit (&obj->branches[i],mp);
        }
        ms_filter_unlink(obj->mixer,0,obj->soundout,0);
@@ -285,5 +299,9 @@ MSSndCard *linphone_sound_daemon_get_proxy_card(LinphoneSoundDaemon *lsd){
 }
 
 void linphone_core_use_sound_daemon(LinphoneCore *lc, LinphoneSoundDaemon *lsd){
-       lc->sound_conf.lsd_card=linphone_sound_daemon_get_proxy_card (lsd);
+       if (lsd!=NULL){
+               lc->sound_conf.lsd_card=linphone_sound_daemon_get_proxy_card (lsd);
+       }else {
+               lc->sound_conf.lsd_card=NULL;
+       }
 }