DirectorConference::~DirectorConference() { // 释放所有 sources, sinks, ... do { ost::MutexLock al(cs_graphics_); GRAPHICS::iterator it; for (it = graphics_.begin(); it != graphics_.end(); ++it) { delete *it; } graphics_.clear(); } while (0); do { ost::MutexLock al(cs_sinks_); SINKS::iterator it; for (it = sinks_.begin(); it != sinks_.end(); ++it) { del_sink(*it); delete *it; } sinks_.clear(); } while (0); do { ost::MutexLock al(cs_streams_); STREAMS::iterator it; for (it = streams_.begin(); it != streams_.end(); ++it) { del_stream(*it); delete *it; } streams_.clear(); } while (0); do { ost::MutexLock al(cs_sources_); SOURCES::iterator it; for (it = sources_.begin(); it != sources_.end(); ++it) { del_source(*it); delete *it; } sources_.clear(); } while (0); pause_audio(); pause_video(); ms_ticker_destroy(audio_ticker_); ms_ticker_destroy(video_ticker_); ms_filter_destroy(audio_resample_); ms_filter_destroy(audio_encoder_); ms_filter_destroy(audio_mixer_); ms_filter_destroy(video_mixer_); ms_filter_destroy(audio_publisher_); ms_filter_destroy(video_publisher_); ms_filter_destroy(video_tee_); if (filter_tee_) ms_filter_destroy(filter_tee_); if (filter_sink_) ms_filter_destroy(filter_sink_); }
void ms_media_stream_sessions_uninit(MSMediaStreamSessions *sessions){ if (sessions->srtp_session) { RtpTransport *rtptr=NULL,*rtcptr=NULL; ortp_srtp_dealloc(sessions->srtp_session); if (sessions->rtp_session){ rtp_session_get_transports(sessions->rtp_session,&rtptr,&rtcptr); rtp_session_set_transports(sessions->rtp_session,NULL,NULL); if (rtptr) srtp_transport_destroy(rtptr); if (rtcptr) srtp_transport_destroy(rtcptr); } sessions->srtp_session=NULL; } if (sessions->rtp_session) { rtp_session_destroy(sessions->rtp_session); sessions->rtp_session=NULL; } if (sessions->zrtp_context != NULL) { ortp_zrtp_context_destroy(sessions->zrtp_context); sessions->zrtp_context = NULL; } if (sessions->ticker){ ms_ticker_destroy(sessions->ticker); sessions->ticker=NULL; } }
int main(int argc, char *argv[]){ MSFilter *f1,*f2; MSSndCard *card; MSTicker *ticker; char *card_id=NULL; ms_init(); signal(SIGINT,stop); if (argc>1) card_id=argv[1]; if (card_id!=NULL) card=ms_snd_card_manager_get_card(ms_snd_card_manager_get(),card_id); else card=ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()); if (card==NULL){ ms_error("No card."); return -1; } f1=ms_snd_card_create_reader(card); f2=ms_snd_card_create_writer(card); ticker=ms_ticker_new(); ms_filter_link(f1,0,f2,0); ms_ticker_attach(ticker,f1); while(run) sleep(1); ms_ticker_detach(ticker,f1); ms_ticker_destroy(ticker); ms_filter_unlink(f1,0,f2,0); ms_filter_destroy(f1); ms_filter_destroy(f2); return 0; }
SinkBase::~SinkBase(void) { ms_ticker_destroy(ticker_); ms_filter_destroy(f_void_); ms_filter_destroy(f_recv_); rtp_session_destroy(rtp_); }
void VodWnd::stop_vod() { if (ticker_) { char opt[128]; snprintf(opt, sizeof(opt), "sinkid=%d", sinkid_); zk_xmpp_uac_send_cmd(uac_, mcu_jid_.c_str(), "test.fc.del_sink", opt, 0, 0); ms_ticker_detach(ticker_, filter_rtp_); ms_filter_destroy(filter_rtp_); filter_rtp_ = 0; ms_filter_destroy(filter_decoder_); filter_decoder_ = 0; ms_filter_destroy(filter_sink_); filter_sink_ = 0; rtp_session_destroy(rtp_); rtp_ = 0; ortp_ev_queue_destroy(evq_); evq_ = 0; ms_ticker_destroy(ticker_); ticker_ = 0; if (render_) { rv_close(render_); render_ = 0; } } }
/* this code is not part of the library itself, it is part of the mediastream program */ void video_stream_free (VideoStream * stream) { if (stream->session!=NULL){ rtp_session_unregister_event_queue(stream->session,stream->evq); rtp_session_destroy(stream->session); } if (stream->rtprecv != NULL) ms_filter_destroy (stream->rtprecv); if (stream->rtpsend!=NULL) ms_filter_destroy (stream->rtpsend); if (stream->source != NULL) ms_filter_destroy (stream->source); if (stream->output != NULL) ms_filter_destroy (stream->output); if (stream->decoder != NULL) ms_filter_destroy (stream->decoder); if (stream->sizeconv != NULL) ms_filter_destroy (stream->sizeconv); if (stream->pixconv!=NULL) ms_filter_destroy(stream->pixconv); if (stream->tee!=NULL) ms_filter_destroy(stream->tee); if (stream->ticker != NULL) ms_ticker_destroy (stream->ticker); if (stream->evq!=NULL) ortp_ev_queue_destroy(stream->evq); ms_free (stream); }
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); ms_filter_unlink(ecc->play,0,ecc->gen,0); ms_filter_unlink(ecc->gen,0,ecc->write_resampler,0); ms_filter_unlink(ecc->write_resampler,0,ecc->sndwrite,0); ms_filter_unlink(ecc->sndread,0,ecc->read_resampler,0); ms_filter_unlink(ecc->read_resampler,0,ecc->det,0); ms_filter_unlink(ecc->det,0,ecc->rec,0); ms_filter_destroy(ecc->sndread); ms_filter_destroy(ecc->det); ms_filter_destroy(ecc->rec); ms_filter_destroy(ecc->play); ms_filter_destroy(ecc->gen); ms_filter_destroy(ecc->read_resampler); ms_filter_destroy(ecc->write_resampler); ms_filter_destroy(ecc->sndwrite); ms_ticker_destroy(ecc->ticker); }
void ring_stop(RingStream *stream){ ms_ticker_detach(stream->ticker,stream->source); ms_filter_unlink(stream->source,0,stream->sndwrite,0); ms_ticker_destroy(stream->ticker); ms_filter_destroy(stream->source); ms_filter_destroy(stream->sndwrite); ms_free(stream); }
static void webcam_free(ConfWebCam *localcam){ if (localcam->ticker!=NULL) ms_ticker_destroy(localcam->ticker); if (localcam->webcam!=NULL) ms_filter_destroy(localcam->webcam); if (localcam->pixconv!=NULL) ms_filter_destroy(localcam->pixconv); if (localcam->sizeconv!=NULL) ms_filter_destroy(localcam->sizeconv); if (localcam->itc_sink!=NULL) ms_filter_destroy(localcam->itc_sink); ms_free(localcam); }
static void snd_card_free(ConfSoundCard *sndcard) { if (sndcard->ticker!=NULL) ms_ticker_destroy(sndcard->ticker); if (sndcard->capture_card!=NULL) ms_filter_destroy(sndcard->capture_card); if (sndcard->itc_source!=NULL) ms_filter_destroy(sndcard->itc_source); if (sndcard->playback_card!=NULL) ms_filter_destroy(sndcard->playback_card); if (sndcard->itc_sink!=NULL) ms_filter_destroy(sndcard->itc_sink); ms_free(sndcard); }
static void conf_stream_free(LinphoneConferenceStream *stream) { if(stream->audio_ticker!=NULL)ms_ticker_destroy(stream->audio_ticker); if(stream->audio_fileplayer!=NULL) ms_filter_destroy(stream->audio_fileplayer); if(stream->audio_filerecorder!=NULL) ms_filter_destroy(stream->audio_filerecorder); if(stream->audio_mixer!=NULL) ms_filter_destroy(stream->audio_mixer); if(stream->audio_record_sink!=NULL) ms_filter_destroy(stream->audio_record_sink); if(stream->video_record_sink!=NULL) ms_filter_destroy(stream->video_record_sink); MSList *list = stream->audio_ports; for(;list!=NULL;list=list->next){ ConfAudioPort* port = (ConfAudioPort*) list->data; audio_slot_destory(port); } ms_list_free(stream->audio_ports); if(stream->has_video){ if(stream->video_ticker!=NULL){ ms_cond_destroy(&stream->video_ticker->cond); ms_ticker_destroy(stream->video_ticker); } if(stream->video_mixer!=NULL) ms_filter_destroy(stream->video_mixer); if(stream->video_output!=NULL) ms_filter_destroy(stream->video_output); if(stream->video_static_image!=NULL) ms_filter_destroy(stream->video_static_image); if(stream->video_static_image_tee!=NULL) ms_filter_destroy(stream->video_static_image_tee); MSList *list = stream->video_ports; for(;list!=NULL;list=list->next){ ConfVideoPort* port = (ConfVideoPort*) list->data; video_slot_destory(port); } ms_list_free(stream->video_ports); } if(stream->display_name!=NULL) ms_free(stream->display_name); if(stream->static_image_path!=NULL) ms_free(stream->static_image_path); ms_free(stream); }
void ring_stop(RingStream *stream){ ms_ticker_detach(stream->ticker,stream->source); ms_filter_unlink(stream->source,0,stream->sndwrite,0); ms_ticker_destroy(stream->ticker); ms_filter_destroy(stream->source); ms_filter_destroy(stream->sndwrite); ms_free(stream); #ifdef _WIN32_WCE ms_warning("Sleeping a bit after closing the audio device..."); ms_sleep(1); #endif }
/* this code is not part of the library itself, it is part of the mediastream program */ void audio_stream_free(AudioStream *stream) { if (stream->session!=NULL) rtp_session_destroy(stream->session); if (stream->rtpsend!=NULL) ms_filter_destroy(stream->rtpsend); if (stream->rtprecv!=NULL) ms_filter_destroy(stream->rtprecv); if (stream->soundread!=NULL) ms_filter_destroy(stream->soundread); if (stream->soundwrite!=NULL) ms_filter_destroy(stream->soundwrite); if (stream->encoder!=NULL) ms_filter_destroy(stream->encoder); if (stream->decoder!=NULL) ms_filter_destroy(stream->decoder); if (stream->dtmfgen!=NULL) ms_filter_destroy(stream->dtmfgen); if (stream->ec!=NULL) ms_filter_destroy(stream->ec); if (stream->ticker!=NULL) ms_ticker_destroy(stream->ticker); ms_free(stream); }
int CameraStream::close() { if (rtp_) { ms_ticker_detach(ticker_sender_, filter_h264_sender_); ms_ticker_detach(ticker_recver_, filter_rtp_recver_); ms_ticker_destroy(ticker_sender_); ms_ticker_destroy(ticker_recver_); ms_filter_destroy(filter_h264_sender_); ms_filter_destroy(filter_rtp_sender_); ms_filter_destroy(filter_rtp_recver_); ms_filter_destroy(filter_decoder_); ms_filter_destroy(filter_yuv_sink_); rtp_session_destroy(rtp_); rtp_ = 0; } if (cap_) { cvReleaseCapture(&cap_); cap_ = 0; } if (sws_) { avpicture_free(&pic_); sws_freeContext(sws_); sws_ = 0; } if (encoder_) { x264_encoder_close(encoder_); encoder_ = 0; } return 0; }
void linphone_sound_daemon_destroy(LinphoneSoundDaemon *obj){ int i; MSConnectionPoint mp; ms_ticker_detach(obj->ticker,obj->soundout); 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); ms_ticker_destroy(obj->ticker); ms_filter_destroy(obj->soundout); ms_filter_destroy(obj->mixer); }
static void video_mail_record_free(VideoMailRecord *vp) { if(vp->display_name!=NULL) ms_free(vp->display_name); if(vp->ticker!=NULL) ms_ticker_destroy(vp->ticker); if(vp->snd_read!=NULL) ms_filter_destroy(vp->snd_read); if(vp->snd_sink!=NULL) ms_filter_destroy(vp->snd_sink); if(vp->sizeconv!=NULL) ms_filter_destroy(vp->sizeconv); if(vp->pixconv!=NULL) ms_filter_destroy(vp->pixconv); if(vp->video_tee!=NULL) ms_filter_destroy(vp->video_tee); if(vp->video_sink!=NULL) ms_filter_destroy(vp->video_sink); if(vp->video_source!=NULL) ms_filter_destroy(vp->video_source); if(vp->video_output!=NULL) ms_filter_destroy(vp->video_output); ms_free(vp); }
/* this code is not part of the library itself, it is part of the mediastream program */ void video_stream_free (VideoStream * stream) { if (stream->ortpZrtpContext) ortp_zrtp_context_destroy(stream->ortpZrtpContext); if (stream->session!=NULL){ rtp_session_unregister_event_queue(stream->session,stream->evq); rtp_session_destroy(stream->session); } if (stream->rtprecv != NULL) ms_filter_destroy (stream->rtprecv); if (stream->rtpsend!=NULL) ms_filter_destroy (stream->rtpsend); if (stream->source != NULL) ms_filter_destroy (stream->source); if (stream->output != NULL) ms_filter_destroy (stream->output); if (stream->encoder != NULL) ms_filter_destroy (stream->encoder); if (stream->decoder != NULL) ms_filter_destroy (stream->decoder); if (stream->sizeconv != NULL) ms_filter_destroy (stream->sizeconv); if (stream->pixconv!=NULL) ms_filter_destroy(stream->pixconv); if (stream->tee!=NULL) ms_filter_destroy(stream->tee); if (stream->tee2!=NULL) ms_filter_destroy(stream->tee2); if (stream->jpegwriter!=NULL) ms_filter_destroy(stream->jpegwriter); if (stream->output2!=NULL) ms_filter_destroy(stream->output2); if (stream->voidsink!=NULL) ms_filter_destroy(stream->voidsink); if (stream->ticker != NULL) ms_ticker_destroy (stream->ticker); if (stream->evq!=NULL) ortp_ev_queue_destroy(stream->evq); if (stream->display_name!=NULL) ms_free(stream->display_name); if (stream->rc!=NULL){ ms_bitrate_controller_destroy(stream->rc); } ms_free (stream); }
/* this code is not part of the library itself, it is part of the mediastream program */ void video_stream_free (VideoStream * stream) { if (stream->session!=NULL){ rtp_session_unregister_event_queue(stream->session,stream->evq); rtp_session_destroy(stream->session); } if (stream->rtprecv != NULL) ms_filter_destroy (stream->rtprecv); if (stream->rtpsend!=NULL) ms_filter_destroy (stream->rtpsend); if (stream->source != NULL) ms_filter_destroy (stream->source); if (stream->output != NULL) ms_filter_destroy (stream->output); if (stream->encoder != NULL) ms_filter_destroy (stream->encoder); if (stream->decoder != NULL) ms_filter_destroy (stream->decoder); if (stream->sizeconv != NULL) ms_filter_destroy (stream->sizeconv); if (stream->pixconv!=NULL) ms_filter_destroy(stream->pixconv); if (stream->tee!=NULL) ms_filter_destroy(stream->tee); if (stream->tee2!=NULL) ms_filter_destroy(stream->tee2); if (stream->jpegwriter!=NULL) ms_filter_destroy(stream->jpegwriter); if(stream->video_record!=NULL) ms_filter_destroy(stream->video_record); if (stream->output2!=NULL) ms_filter_destroy(stream->output2); #ifdef ENABLE_UDT if (stream->udt!=NULL) ms_filter_destroy(stream->udt); #endif // ENABLE_UDT if (stream->ticker != NULL) ms_ticker_destroy (stream->ticker); if (stream->evq!=NULL) ortp_ev_queue_destroy(stream->evq); if (stream->display_name!=NULL) ms_free(stream->display_name); ms_free (stream); }
void ring_stop(RingStream *stream){ MSConnectionHelper h; ms_ticker_detach(stream->ticker,stream->source); ms_connection_helper_start(&h); ms_connection_helper_unlink(&h,stream->source,-1,0); ms_connection_helper_unlink(&h,stream->gendtmf,0,0); if (stream->write_resampler) ms_connection_helper_unlink(&h,stream->write_resampler,0,0); ms_connection_helper_unlink(&h,stream->sndwrite,0,-1); ms_ticker_destroy(stream->ticker); ms_filter_destroy(stream->source); ms_filter_destroy(stream->gendtmf); ms_filter_destroy(stream->sndwrite); if (stream->write_resampler) ms_filter_destroy(stream->write_resampler); ms_free(stream); }
static void ecc_deinit_filters(EcCalibrator *ecc){ ms_ticker_detach(ecc->ticker,ecc->play); ms_ticker_detach(ecc->ticker,ecc->sndread); ms_filter_unlink(ecc->play,0,ecc->gen,0); ms_filter_unlink(ecc->gen,0,ecc->resampler,0); ms_filter_unlink(ecc->resampler,0,ecc->sndwrite,0); ms_filter_unlink(ecc->sndread,0,ecc->det,0); ms_filter_unlink(ecc->det,0,ecc->rec,0); ms_filter_destroy(ecc->sndread); ms_filter_destroy(ecc->det); ms_filter_destroy(ecc->rec); ms_filter_destroy(ecc->play); ms_filter_destroy(ecc->gen); ms_filter_destroy(ecc->resampler); ms_filter_destroy(ecc->sndwrite); ms_ticker_destroy(ecc->ticker); }
void ring_stop(RingStream *stream){ MSConnectionHelper h; ms_ticker_detach(stream->ticker,stream->source); ms_connection_helper_start(&h); ms_connection_helper_unlink(&h,stream->source,-1,0); ms_connection_helper_unlink(&h,stream->gendtmf,0,0); if (stream->write_resampler) ms_connection_helper_unlink(&h,stream->write_resampler,0,0); ms_connection_helper_unlink(&h,stream->sndwrite,0,-1); ms_ticker_destroy(stream->ticker); ms_filter_destroy(stream->source); ms_filter_destroy(stream->gendtmf); ms_filter_destroy(stream->sndwrite); ms_free(stream); #ifdef _WIN32_WCE ms_warning("Sleeping a bit after closing the audio device..."); ms_sleep(1); #endif }
static int uninit_bench(struct bench_config *bench) { MSList *it; for(it=bench->tsessions;it!=NULL;it=bench->tsessions){ struct test_session *ts = (struct test_session *)it->data; bench->tsessions = ms_list_remove_link(bench->tsessions, it); ms_ticker_detach(bench->ticker,ts->fplayer); ms_ticker_detach(bench->ticker,ts->rtprecv); ms_filter_call_method_noarg(ts->frecorder,MS_FILE_REC_CLOSE); if (strstr(bench->wavfile, ".au")==NULL) { ms_filter_unlink(ts->fplayer,0,ts->encoder,0); ms_filter_unlink(ts->encoder,0,ts->rtpsend,0); } else { ms_filter_unlink(ts->fplayer,0,ts->rtpsend,0); } ms_filter_unlink(ts->rtprecv,0,ts->decoder,0); ms_filter_unlink(ts->decoder,0,ts->frecorder,0); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); } ms_ticker_destroy(bench->ticker); return 0; }
void ms_media_stream_sessions_uninit(MSMediaStreamSessions *sessions){ if (sessions->srtp_context) { ms_srtp_context_delete(sessions->srtp_context); sessions->srtp_context=NULL; } if (sessions->rtp_session) { rtp_session_destroy(sessions->rtp_session); sessions->rtp_session=NULL; } if (sessions->zrtp_context != NULL) { ms_zrtp_context_destroy(sessions->zrtp_context); sessions->zrtp_context = NULL; } if (sessions->dtls_context != NULL) { ms_dtls_srtp_context_destroy(sessions->dtls_context); sessions->dtls_context = NULL; } if (sessions->ticker){ ms_ticker_destroy(sessions->ticker); sessions->ticker=NULL; } }
int main() { ms_init(); MSFilter *source = get_source(); MSFilter *render = get_render(); ms_filter_link(source, 0, render, 0); MSTicker *ticker = ms_ticker_new(); ms_ticker_attach(ticker, source); while (true) { ms_sleep(1); } ms_ticker_destroy(ticker); ms_filter_destroy(render); ms_filter_destroy(source); return 0; }
/* this code is not part of the library itself, it is part of the mediastream program */ void audio_stream_free(AudioStream *stream) { if (stream->session!=NULL) { rtp_session_unregister_event_queue(stream->session,stream->evq); rtp_session_destroy(stream->session); } if (stream->evq) ortp_ev_queue_destroy(stream->evq); if (stream->rtpsend!=NULL) ms_filter_destroy(stream->rtpsend); if (stream->rtprecv!=NULL) ms_filter_destroy(stream->rtprecv); if (stream->soundread!=NULL) ms_filter_destroy(stream->soundread); if (stream->soundwrite!=NULL) ms_filter_destroy(stream->soundwrite); if (stream->encoder!=NULL) ms_filter_destroy(stream->encoder); if (stream->decoder!=NULL) ms_filter_destroy(stream->decoder); if (stream->dtmfgen!=NULL) ms_filter_destroy(stream->dtmfgen); #ifndef ENABLED_MCU_MEDIA_SERVER if (stream->ec!=NULL) ms_filter_destroy(stream->ec); if (stream->volrecv!=NULL) ms_filter_destroy(stream->volrecv); if (stream->volsend!=NULL) ms_filter_destroy(stream->volsend); if (stream->equalizer!=NULL) ms_filter_destroy(stream->equalizer); #endif // ENABLED_MCU_MEDIA_SERVER if (stream->ticker!=NULL) ms_ticker_destroy(stream->ticker); #ifdef ENABLE_UDT if (stream->udt!=NULL) ms_filter_destroy(stream->udt); #endif // ENABLE_UDT if (stream->read_resampler!=NULL) ms_filter_destroy(stream->read_resampler); if (stream->write_resampler!=NULL) ms_filter_destroy(stream->write_resampler); if (stream->mic_tee!=NULL) ms_filter_destroy(stream->mic_tee); if (stream->spk_tee!=NULL) ms_filter_destroy(stream->spk_tee); if (stream->filewriter!=NULL) ms_filter_destroy(stream->filewriter); if (stream->recordmixer!=NULL) ms_filter_destroy(stream->recordmixer); if (stream->tee2!=NULL) ms_filter_destroy(stream->tee2); if (stream->audio_record!=NULL) ms_filter_destroy(stream->audio_record); if (stream->dtmfgen_rtp!=NULL) ms_filter_destroy(stream->dtmfgen_rtp); ms_free(stream); }
/* this code is not part of the library itself, it is part of the mediastream program */ void audio_stream_free(AudioStream *stream) { if (stream->session!=NULL) { rtp_session_unregister_event_queue(stream->session,stream->evq); rtp_session_destroy(stream->session); } if (stream->rtpsend!=NULL) ms_filter_destroy(stream->rtpsend); if (stream->rtprecv!=NULL) ms_filter_destroy(stream->rtprecv); if (stream->soundread!=NULL) ms_filter_destroy(stream->soundread); if (stream->soundwrite!=NULL) ms_filter_destroy(stream->soundwrite); if (stream->encoder!=NULL) ms_filter_destroy(stream->encoder); if (stream->decoder!=NULL) ms_filter_destroy(stream->decoder); if (stream->dtmfgen!=NULL) ms_filter_destroy(stream->dtmfgen); if (stream->ec!=NULL) ms_filter_destroy(stream->ec); if (stream->volrecv!=NULL) ms_filter_destroy(stream->volrecv); if (stream->volsend!=NULL) ms_filter_destroy(stream->volsend); if (stream->equalizer!=NULL) ms_filter_destroy(stream->equalizer); if (stream->ticker!=NULL) ms_ticker_destroy(stream->ticker); if (stream->read_resampler!=NULL) ms_filter_destroy(stream->read_resampler); if (stream->write_resampler!=NULL) ms_filter_destroy(stream->write_resampler); if (stream->evq!=NULL) ortp_ev_queue_destroy(stream->evq); ms_free(stream); }
int main(int argc, char *argv[]){ MSFilter *src, *gen, *det, *rec; MSTicker *ticker; ms_base_init(); ortp_set_log_level_mask (ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); src=ms_filter_new(MS_FILE_PLAYER_ID); rec=ms_filter_new(MS_FILE_REC_ID); gen=ms_filter_new(MS_DTMF_GEN_ID); det=ms_filter_new(MS_TONE_DETECTOR_ID); ms_filter_link(src,0,gen,0); ms_filter_link(gen,0,det,0); //ms_filter_link(gen,0,rec,0); ms_filter_link(det,0,rec,0); ticker=ms_ticker_new(); ms_ticker_attach(ticker,src); ms_filter_call_method(rec,MS_FILE_REC_OPEN,"/tmp/output.wav"); ms_filter_call_method_noarg(rec,MS_FILE_REC_START); { /*generate and detect the tones*/ MSDtmfGenCustomTone tone; MSToneDetectorDef expected_tone; char dtmf='*'; tone.frequency=2000; tone.duration=400; tone.amplitude=0.6; expected_tone.frequency=2000; expected_tone.min_duration=200; expected_tone.min_amplitude=0.5; ms_filter_set_notify_callback(det,(MSFilterNotifyFunc)tone_detected_cb,NULL); ms_filter_set_notify_callback(gen,(MSFilterNotifyFunc)tone_sent_cb,NULL); ms_filter_call_method(det,MS_TONE_DETECTOR_ADD_SCAN,&expected_tone); ms_filter_call_method(gen,MS_DTMF_GEN_PLAY,&dtmf); ms_sleep(1); ms_filter_call_method(gen,MS_DTMF_GEN_PLAY_CUSTOM,&tone); ms_sleep(1); ms_filter_call_method(gen,MS_DTMF_GEN_PLAY_CUSTOM,&tone); ms_sleep(1); ms_filter_call_method(gen,MS_DTMF_GEN_PLAY_CUSTOM,&tone); ms_sleep(1); tone.frequency=1500; tone.amplitude=1.0; ms_filter_call_method(gen,MS_DTMF_GEN_PLAY_CUSTOM,&tone); ms_sleep(1); } ms_filter_call_method_noarg(rec,MS_FILE_REC_CLOSE); ms_ticker_detach(ticker,src); ms_filter_unlink(src,0,gen,0); ms_filter_unlink(gen,0,det,0); //ms_filter_unlink(gen,0,rec,0); ms_filter_unlink(det,0,rec,0); ms_ticker_destroy(ticker); ms_filter_destroy(src); ms_filter_destroy(gen); ms_filter_destroy(det); ms_filter_destroy(rec); ms_base_exit(); return 0; }
void ms_tester_destroy_ticker(void) { if (ms_tester_ticker) { ms_ticker_destroy(ms_tester_ticker); ms_tester_ticker = NULL; } }
void ms_audio_conference_destroy(MSAudioConference *obj){ ms_ticker_destroy(obj->ticker); ms_filter_destroy(obj->mixer); ms_free(obj); }
int main(int argc, char *argv[]){ MSFilter *f1,*f2; MSSndCard *card_capture; MSSndCard *card_playback; MSTicker *ticker; MSFactory *factory; char *capt_card=NULL,*play_card=NULL; int rate = 8000; int i; #ifdef __linux const char *alsadev=NULL; #endif ortp_init(); ortp_set_log_level_mask(ORTP_LOG_DOMAIN, ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); factory = ms_factory_new_with_voip(); #ifndef _WIN32_WCE signal(SIGINT,stop); #endif #ifdef __linux alsadev=getenv("MS2_ALSADEV"); if (alsadev!=NULL){ ms_snd_card_manager_add_card( ms_factory_get_snd_card_manager(factory), ms_alsa_card_new_custom (alsadev,alsadev)); } #endif for(i=1;i<argc;++i){ if (strcmp(argv[i],"--help")==0){ print_usage(); }else if (strcmp(argv[i],"--card")==0){ i++; capt_card=play_card=argv[i]; }else if (strcmp(argv[i],"--capt-card")==0){ i++; capt_card=argv[i]; }else if (strcmp(argv[i],"--play-card")==0){ i++; play_card=argv[i]; } } if (capt_card) card_capture = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(factory),capt_card); else card_capture = ms_snd_card_manager_get_default_capture_card(ms_factory_get_snd_card_manager(factory)); if (play_card) card_playback = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(factory),play_card); else card_playback = ms_snd_card_manager_get_default_playback_card(ms_factory_get_snd_card_manager(factory)); if (card_playback==NULL || card_capture==NULL){ ms_error("No card."); return -1; } f1=ms_snd_card_create_reader(card_capture); f2=ms_snd_card_create_writer(card_playback); ms_filter_call_method (f1, MS_FILTER_SET_SAMPLE_RATE, &rate); ms_filter_call_method (f2, MS_FILTER_SET_SAMPLE_RATE, &rate); ticker=ms_ticker_new(); ms_filter_link(f1,0,f2,0); ms_ticker_attach(ticker,f1); #ifndef _WIN32_WCE while(run) ms_sleep(1); #else ms_sleep(5); #endif ms_ticker_detach(ticker,f1); ms_ticker_destroy(ticker); ms_filter_unlink(f1,0,f2,0); ms_filter_destroy(f1); ms_filter_destroy(f2); ms_factory_destroy(factory); return 0; }