void linphone_call_stop_media_streams(LinphoneCall *call){ if (call->audiostream!=NULL) { rtp_session_unregister_event_queue(call->audiostream->session,call->audiostream_app_evq); ortp_ev_queue_flush(call->audiostream_app_evq); ortp_ev_queue_destroy(call->audiostream_app_evq); if (call->audiostream->ec){ const char *state_str=NULL; ms_filter_call_method(call->audiostream->ec,MS_ECHO_CANCELLER_GET_STATE_STRING,&state_str); if (state_str){ ms_message("Writing echo canceller state, %i bytes",strlen(state_str)); lp_config_set_string(call->core->config,"sound","ec_state",state_str); } } linphone_call_log_fill_stats (call->log,call->audiostream); audio_stream_stop(call->audiostream); call->audiostream=NULL; } #ifdef VIDEO_ENABLED if (call->videostream!=NULL){ rtp_session_unregister_event_queue(call->videostream->session,call->videostream_app_evq); ortp_ev_queue_flush(call->videostream_app_evq); ortp_ev_queue_destroy(call->videostream_app_evq); video_stream_stop(call->videostream); call->videostream=NULL; } ms_event_queue_skip(call->core->msevq); #endif if (call->audio_profile){ rtp_profile_clear_all(call->audio_profile); rtp_profile_destroy(call->audio_profile); call->audio_profile=NULL; } if (call->video_profile){ rtp_profile_clear_all(call->video_profile); rtp_profile_destroy(call->video_profile); call->video_profile=NULL; } }
void ortp_ev_queue_destroy(OrtpEvQueue * qp){ ortp_ev_queue_flush(qp); ortp_mutex_destroy(&qp->mutex); ortp_free(qp); }