int tmedia_codec_plugin_register_2(const tmedia_codec_plugin_def_t* plugin, int prio) { tsk_size_t count = 0; tsk_bool_t already_registered = tsk_false; const tmedia_codec_plugin_def_t* tmp; if(!plugin || tsk_strnullORempty(plugin->name) || tsk_strnullORempty(plugin->format) || (prio + 1) >= TMED_CODEC_MAX_PLUGINS){ TSK_DEBUG_ERROR("Invalid parameter"); return -1; } // count codecs and found if already registered while(__tmedia_codec_plugins[count]){ if(__tmedia_codec_plugins[count] == plugin){ already_registered = tsk_true; } ++count; } if(count >= TMED_CODEC_MAX_PLUGINS){ TSK_DEBUG_ERROR("No room"); return -1; } // unregister and compact if(already_registered){ tmedia_codec_plugin_unregister(plugin); --count; } tmp = __tmedia_codec_plugins[prio]; __tmedia_codec_plugins[prio] = plugin; __tmedia_codec_plugins[count] = tmp;// put old codec add prio to the end of the list return 0; }
void tdav_set_codecs(tdav_codec_id_t codecs) { int i; int prio; for(i=0,prio=0; i<sizeof(__codecs)/sizeof(tdav_codec_decl_t); ++i){ if((codecs & __codecs[i].id)){ if(_tdav_codec_is_supported(__codecs[i].id, *(__codecs[i].plugin))){ tmedia_codec_plugin_register_2(*(__codecs[i].plugin), prio++); } } else{ tmedia_codec_plugin_unregister(*(__codecs[i].plugin)); } } }
int tmedia_codec_plugin_register_2(const tmedia_codec_plugin_def_t* plugin, int prio) { tsk_size_t index = 0, max; tsk_bool_t already_registered = tsk_false; const tmedia_codec_plugin_def_t* tmp; if (!plugin || tsk_strnullORempty(plugin->name) || tsk_strnullORempty(plugin->format) || (prio + 1) >= TMED_CODEC_MAX_PLUGINS) { TSK_DEBUG_ERROR("Invalid parameter"); return -1; } // count codecs and found if already registered while (__tmedia_codec_plugins[index]) { if (__tmedia_codec_plugins[index] == plugin) { already_registered = tsk_true; } ++index; } if (index >= TMED_CODEC_MAX_PLUGINS) { TSK_DEBUG_ERROR("No room"); return -1; } // clamp prio (must be done here before unregistering the plugin) max = tmedia_codec_plugin_registered_count(__tmedia_codec_plugins, sizeof(__tmedia_codec_plugins)/sizeof(__tmedia_codec_plugins[0])); prio = TSK_CLAMP(0, prio, (int)(max > 0 ? (max - 1) : 0)); // unregister and compact if (already_registered) { if (tmedia_codec_plugin_unregister(plugin) == 0) { --index; } } // put current plugin at prio and old (which was at prio) at the end tmp = __tmedia_codec_plugins[prio]; __tmedia_codec_plugins[index] = tmp;// put old codec add prio to the end of the list __tmedia_codec_plugins[prio] = plugin; return 0; }
int tdav_deinit() { int ret = 0; /* === OS specific === */ #if TDAV_UNDER_WINDOWS if ((ret = tdav_win32_deinit())) { return ret; } #elif TDAV_UNDER_APPLE if ((ret = tdav_apple_deinit())) { return ret; } #endif /* === UnRegister media contents === */ tmedia_content_plugin_unregister_all(); /* === UnRegister sessions === */ tmedia_session_plugin_unregister(tmedia_session_ghost_plugin_def_t); tmedia_session_plugin_unregister(tdav_session_audio_plugin_def_t); tmedia_session_plugin_unregister(tdav_session_video_plugin_def_t); tmedia_session_plugin_unregister(tdav_session_msrp_plugin_def_t); tmedia_session_plugin_unregister(tdav_session_t140_plugin_def_t); /* === UnRegister codecs === */ tmedia_codec_plugin_unregister(tdav_codec_dtmf_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_ulpfec_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_red_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_t140_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_msrp_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_g711a_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_g711u_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_g722_plugin_def_t); #if HAVE_OPENCORE_AMR tmedia_codec_plugin_unregister(tdav_codec_amrnb_oa_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_amrnb_be_plugin_def_t); #endif #if HAVE_BV16 tmedia_codec_plugin_unregister(tdav_codec_bv16_plugin_def_t); #endif #if HAVE_LIBGSM tmedia_codec_plugin_unregister(tdav_codec_gsm_plugin_def_t); #endif #if HAVE_ILBC tmedia_codec_plugin_unregister(tdav_codec_ilbc_plugin_def_t); #endif #if HAVE_LIB_SPEEX tmedia_codec_plugin_unregister(tdav_codec_speex_nb_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_speex_wb_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_speex_uwb_plugin_def_t); #endif #if HAVE_LIBOPUS tmedia_codec_plugin_unregister(tdav_codec_opus_plugin_def_t); #endif #if HAVE_G729 tmedia_codec_plugin_unregister(tdav_codec_g729ab_plugin_def_t); #endif #if HAVE_LIBVPX tmedia_codec_plugin_unregister(tdav_codec_vp8_plugin_def_t); #endif #if HAVE_CUDA if(tdav_codec_h264_cuda_is_supported()){ tmedia_codec_plugin_unregister(tdav_codec_h264_cuda_bp10_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_h264_cuda_bp20_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_h264_cuda_bp30_plugin_def_t); } #endif #if HAVE_FFMPEG tmedia_codec_plugin_unregister(tdav_codec_mp4ves_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_h261_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_h263_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_h263p_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_h263pp_plugin_def_t); # if !defined(HAVE_H264) || HAVE_H264 tmedia_codec_plugin_unregister(tdav_codec_h264_base_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_h264_main_plugin_def_t); # endif # if !defined(HAVE_THEORA) || HAVE_THEORA tmedia_codec_plugin_unregister(tdav_codec_theora_plugin_def_t); # endif #elif HAVE_H264_PASSTHROUGH tmedia_codec_plugin_unregister(tdav_codec_h264_base_plugin_def_t); tmedia_codec_plugin_unregister(tdav_codec_h264_main_plugin_def_t); #endif /* === unRegister converters === */ #if HAVE_LIBYUV tmedia_converter_video_plugin_unregister(tdav_converter_video_libyuv_plugin_def_t); #elif HAVE_FFMPEG || HAVE_SWSSCALE tmedia_converter_video_plugin_unregister(tdav_converter_video_ffmpeg_plugin_def_t); #endif /* === unRegister consumers === */ tmedia_consumer_plugin_unregister(tdav_consumer_t140_plugin_def_t); /* T140 */ #if HAVE_DSOUND_H tmedia_consumer_plugin_unregister(tdav_consumer_dsound_plugin_def_t); #endif #if HAVE_WAVE_API tmedia_consumer_plugin_unregister(tdav_consumer_waveapi_plugin_def_t); #endif #if HAVE_WASAPI tmedia_consumer_plugin_unregister(tdav_consumer_wasapi_plugin_def_t); #endif #if HAVE_TINYDSHOW // DirectShow (Windows XP and later) tmedia_consumer_plugin_unregister(tdshow_consumer_plugin_def_t); #elif HAVE_WINM // Windows Media (WP8) tmedia_consumer_plugin_unregister(tdav_consumer_winm_plugin_def_t); #elif HAVE_MF // Media Foundation (Windows 7 or later) tmedia_consumer_plugin_unregister(tdav_consumer_video_mf_plugin_def_t); #endif #if HAVE_COREAUDIO_AUDIO_UNIT // CoreAudio based on AudioUnit tmedia_consumer_plugin_unregister(tdav_consumer_audiounit_plugin_def_t); #endif #if HAVE_COREAUDIO_AUDIO_QUEUE // CoreAudio based on AudioQueue tmedia_consumer_plugin_unregister(tdav_consumer_audioqueue_plugin_def_t); #endif /* === UnRegister producers === */ tmedia_producer_plugin_unregister(tdav_producer_t140_plugin_def_t); /* T140 */ #if HAVE_DSOUND_H // DirectSound tmedia_producer_plugin_unregister(tdav_producer_dsound_plugin_def_t); #endif #if HAVE_WAVE_API // WaveAPI tmedia_producer_plugin_unregister(tdav_producer_waveapi_plugin_def_t); #endif #if HAVE_WASAPI // WASAPI tmedia_producer_plugin_unregister(tdav_producer_wasapi_plugin_def_t); #endif #if HAVE_TINYDSHOW // DirectShow (Windows XP or later) tmedia_producer_plugin_unregister(tdshow_producer_plugin_def_t); #elif HAVE_WINM // Windows Media (WP8) tmedia_producer_plugin_unregister(tdav_producer_winm_plugin_def_t); #elif HAVE_MF // Media Foundation (Windows 7 or later) tmedia_producer_plugin_unregister(tdav_producer_video_mf_plugin_def_t); #endif #if HAVE_COREAUDIO_AUDIO_UNIT // CoreAudio based on AudioUnit tmedia_producer_plugin_unregister(tdav_producer_audiounit_plugin_def_t); #elif HAVE_COREAUDIO_AUDIO_QUEUE // CoreAudio based on AudioQueue tmedia_producer_plugin_unregister(tdav_producer_audioqueue_plugin_def_t); #endif #if HAVE_OSS_H tmedia_consumer_plugin_unregister(tmedia_consumer_oss_plugin_def_t); #endif /* === UnRegister Audio Denoise (AGC, VAD, Noise Suppression and AEC) === */ #if HAVE_SPEEX_DSP && (!defined(HAVE_SPEEX_DENOISE) || HAVE_SPEEX_DENOISE) tmedia_denoise_plugin_unregister(tdav_speex_denoise_plugin_def_t); #endif #if HAVE_WEBRTC && (!defined(HAVE_WEBRTC_DENOISE) || HAVE_WEBRTC_DENOISE) tmedia_denoise_plugin_unregister(tdav_webrtc_denoise_plugin_def_t); #endif /* === UnRegister Audio Resampler === */ #if HAVE_SPEEX_DSP && (!defined(HAVE_SPEEX_RESAMPLER) || HAVE_SPEEX_RESAMPLER) tmedia_resampler_plugin_unregister(tdav_speex_resampler_plugin_def_t); #endif /* === UnRegister Audio/video JitterBuffer === */ #if HAVE_SPEEX_DSP && HAVE_SPEEX_JB tmedia_jitterbuffer_plugin_unregister(tdav_speex_jitterbuffer_plugin_def_t); #else tmedia_jitterbuffer_plugin_unregister(tdav_speakup_jitterbuffer_plugin_def_t); #endif return ret; }