MSAudioEndpoint * ms_audio_endpoint_get_from_stream(AudioStream *st, bool_t is_remote) { MSAudioEndpoint *ep=ms_audio_endpoint_new(); ep->st=st; ep->in_resampler=ms_factory_create_filter(st->ms.factory, MS_RESAMPLE_ID); ep->out_resampler=ms_factory_create_filter(st->ms.factory, MS_RESAMPLE_ID); cut_audio_stream_graph(ep,is_remote); return ep; }
MSAudioEndpoint * ms_audio_endpoint_new_recorder(MSFactory* factory) { MSAudioEndpoint *ep=ms_audio_endpoint_new(); ep->in_resampler=ms_factory_create_filter(factory, MS_RESAMPLE_ID); ep->out_resampler=ms_factory_create_filter(factory, MS_RESAMPLE_ID); ep->recorder=ms_factory_create_filter(factory, MS_FILE_REC_ID); ep->player=ms_factory_create_filter(factory, MS_FILE_PLAYER_ID); ep->mixer_out.filter=ep->recorder; ep->mixer_in.filter=ep->player; ep->samplerate=-1; return ep; }
MSAudioConference * ms_audio_conference_new(const MSAudioConferenceParams *params, MSFactory* factory) { MSAudioConference *obj=ms_new0(MSAudioConference,1); int tmp=1; obj->ticker=ms_ticker_new(); ms_ticker_set_name(obj->ticker,"Audio conference MSTicker"); ms_ticker_set_priority(obj->ticker,__ms_get_default_prio(FALSE)); obj->mixer = ms_factory_create_filter(factory, MS_AUDIO_MIXER_ID); obj->params=*params; ms_filter_call_method(obj->mixer,MS_AUDIO_MIXER_ENABLE_CONFERENCE_MODE,&tmp); ms_filter_call_method(obj->mixer,MS_FILTER_SET_SAMPLE_RATE,&obj->params.samplerate); return obj; }
MSFilter *ms_filter_new(MSFilterId id){ return ms_factory_create_filter(ms_factory_get_fallback(),id); }
int main(int argc, char *argv[]){ MSFilter *src, *gen, *det, *rec; MSTicker *ticker; MSFactory *factory ; //ms_base_init(); factory = ms_factory_new(); ms_factory_init_voip(factory); ms_factory_init_plugins(factory); ortp_set_log_level_mask (ORTP_LOG_DOMAIN, ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); src=ms_factory_create_filter(factory,MS_FILE_PLAYER_ID); rec=ms_factory_create_filter(factory,MS_FILE_REC_ID); gen=ms_factory_create_filter(factory,MS_DTMF_GEN_ID); det=ms_factory_create_filter(factory,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='*'; memset(&tone,0,sizeof(tone)); memset(&expected_tone,0,sizeof(expected_tone)); tone.frequencies[0]=2000; tone.duration=400; tone.amplitude=0.6f; expected_tone.frequency=2000; expected_tone.min_duration=200; expected_tone.min_amplitude=0.5; ms_filter_add_notify_callback(det,(MSFilterNotifyFunc)tone_detected_cb,NULL,TRUE); ms_filter_add_notify_callback(gen,(MSFilterNotifyFunc)tone_sent_cb,NULL,TRUE); 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.frequencies[0]=1500; tone.amplitude=1.0f; 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_factory_destroy(factory); //ms_base_exit(); return 0; }
void ms_tester_create_filter(MSFilter **filter, MSFilterId id, MSFactory *f) { BC_ASSERT_PTR_NOT_NULL(filter); BC_ASSERT_PTR_NULL(*filter); *filter = ms_factory_create_filter(f, id); BC_ASSERT_PTR_NOT_NULL(*filter); }
int main(int argc, char *argv[]){ VideoStream *vs; MSWebCam *cam; MSVideoSize vsize; MSFactory* factory; int i; vsize.width=MS_VIDEO_SIZE_CIF_W; vsize.height=MS_VIDEO_SIZE_CIF_H; ortp_init(); ortp_set_log_level_mask(ORTP_LOG_DOMAIN, ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); //ms_init(); factory = ms_factory_new(); ms_factory_init_voip(factory); ms_factory_init_plugins(factory); cam=ms_web_cam_manager_get_cam(ms_factory_get_web_cam_manager(factory),"StaticImage: Static picture"); //cam=ms_web_cam_manager_get_cam(ms_web_cam_manager_get(),"StaticImage: Static picture"); signal(SIGINT,stop); /* this is to test the sequence start/stop */ for(i=0;i<1;++i){ int n; vs=video_preview_new(factory); /*video_preview_set_display_filter_name(vs,"MSVideoOut");*/ video_preview_set_size(vs,vsize); video_preview_start(vs, cam); for(n=0;n<60000 && !stopped;++n){ #ifdef _WIN32 MSG msg; Sleep(100); while (PeekMessage(&msg, NULL, 0, 0,1)){ TranslateMessage(&msg); DispatchMessage(&msg); } #else struct timespec ts; ts.tv_sec=0; ts.tv_nsec=10000000; nanosleep(&ts,NULL); if (vs) video_stream_iterate(vs); #endif /* test code */ if (n==400) { ms_ticker_detach (vs->ms.sessions.ticker, vs->source); vs->tee = ms_factory_create_filter(factory, MS_TEE_ID); ms_filter_unlink(vs->pixconv,0, vs->output2,0); ms_filter_link(vs->pixconv,0,vs->tee,0); ms_filter_link(vs->tee,0,vs->output2,0); ms_filter_link(vs->tee,1,vs->output2,1); //ms_filter_unlink(vs->tee,0,vs->output,0); ms_ticker_attach (vs->ms.sessions.ticker, vs->source); } if (n==500) { int corner=1; ms_filter_call_method(vs->output2,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner); } if (n==600) { int corner=2; ms_filter_call_method(vs->output2,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner); } if (n==700) { int corner=3; ms_filter_call_method(vs->output2,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner); } if (n==800) { int corner=-1; ms_filter_call_method(vs->output2,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner); } if (n==900) { ms_ticker_detach (vs->ms.sessions.ticker, vs->source); ms_filter_unlink(vs->pixconv,0,vs->tee,0); ms_filter_unlink(vs->tee,0,vs->output2,0); ms_filter_unlink(vs->tee,1,vs->output2,1); ms_filter_destroy(vs->tee); vs->tee=NULL; ms_filter_link(vs->pixconv,0, vs->output2,0); ms_ticker_attach (vs->ms.sessions.ticker, vs->source); } } video_preview_stop(vs); } return 0; }