From aa00108e6da6a7065a02d330f714b2cd27a7f6a2 Mon Sep 17 00:00:00 2001 From: bossiel Date: Sat, 20 Dec 2014 22:57:24 +0000 Subject: [PATCH] Change "tmedia_codec_plugin_registered_get_all" signature --- branches/2.0/doubango/tinyDAV/src/tdav.c | 33 ++++++++++++++----- .../include/tinymedia/tmedia_codec.h | 2 +- .../2.0/doubango/tinyMEDIA/src/tmedia_codec.c | 4 +-- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/branches/2.0/doubango/tinyDAV/src/tdav.c b/branches/2.0/doubango/tinyDAV/src/tdav.c index a0202fe0..3d366f2c 100644 --- a/branches/2.0/doubango/tinyDAV/src/tdav.c +++ b/branches/2.0/doubango/tinyDAV/src/tdav.c @@ -31,7 +31,7 @@ static const tsk_size_t __codec_plugins_all_count = sizeof(__codec_plugins_all)/ #endif // Shared libraries not allowed on WP8 and iOS -#if !TDAV_UNDER_WINDOWS_PHONE && !TDAV_UNDER_WINDOWS_CE && !TDAV_UNDER_IPHONE +#if !TDAV_UNDER_WINDOWS_PHONE && !TDAV_UNDER_IPHONE #include "tsk_plugin.h" # if TDAV_UNDER_WINDOWS # define TDAV_HAVE_PLUGIN_EXT_WIN32 1 @@ -200,23 +200,23 @@ int tdav_init() } } /* DirectShow (Video consumer, Video producer) */ - if(tdav_win32_is_winxp_or_later()){ + if (tdav_win32_is_winxp_or_later()) { tsk_sprintf(&full_path, "%s/pluginDirectShow.dll", tdav_get_current_directory_const()); - if(tsk_plugin_file_exist(full_path) && (__dll_plugin_dshow = tsk_plugin_create(full_path))){ + if (tsk_plugin_file_exist(full_path) && (__dll_plugin_dshow = tsk_plugin_create(full_path))) { plugins_count += tmedia_plugin_register(__dll_plugin_dshow, tsk_plugin_def_type_all, tsk_plugin_def_media_type_all); } } /* Audio DSP (Resampler, AEC, NS, AGC...) */ - if(tdav_win32_is_winvista_or_later()){ + if (tdav_win32_is_winvista_or_later()){ tsk_sprintf(&full_path, "%s/pluginWinAudioDSP.dll", tdav_get_current_directory_const()); - if(tsk_plugin_file_exist(full_path) && (__dll_plugin_audio_dsp = tsk_plugin_create(full_path))){ + if(tsk_plugin_file_exist(full_path) && (__dll_plugin_audio_dsp = tsk_plugin_create(full_path))) { plugins_count += tmedia_plugin_register(__dll_plugin_audio_dsp, tsk_plugin_def_type_all, tsk_plugin_def_media_type_all); } } /* IPSec implementation using Windows Filtering Platform (WFP) */ - if(tdav_win32_is_winvista_or_later()){ + if (tdav_win32_is_winvista_or_later()) { tsk_sprintf(&full_path, "%s/pluginWinIPSecVista.dll", tdav_get_current_directory_const()); - if(tsk_plugin_file_exist(full_path) && (tipsec_plugin_register_file(full_path, &__dll_plugin_ipsec_wfp) == 0)){ + if (tsk_plugin_file_exist(full_path) && (tipsec_plugin_register_file(full_path, &__dll_plugin_ipsec_wfp) == 0)) { plugins_count += 1; // at least one __b_ipsec_supported = tsk_true; } @@ -482,7 +482,8 @@ int tdav_set_codecs(tdav_codec_id_t codecs) static inline int _tdav_codec_plugins_collect() { - const struct tmedia_codec_plugin_def_s** plugins = tsk_null; +#if defined(_MSC_VER) // TODO: Why next code crash on CentOS64 when built with debug enabled ("-g -O0") + const struct tmedia_codec_plugin_def_s* (* plugins)[TMED_CODEC_MAX_PLUGINS]; tsk_size_t i, count; int ret; static const tsk_size_t __codec_plugins_all_count = sizeof(__codec_plugins_all)/sizeof(__codec_plugins_all[0]); @@ -490,10 +491,24 @@ static inline int _tdav_codec_plugins_collect() ret = _tdav_codec_plugins_disperse(); if((ret = tmedia_codec_plugin_registered_get_all(&plugins, &count)) == 0) { for(i = 0; i < count && i < __codec_plugins_all_count; ++i) { - __codec_plugins_all[i] = plugins[i]; + __codec_plugins_all[i] = (*plugins)[i]; } } return 0; +#else + extern const tmedia_codec_plugin_def_t* __tmedia_codec_plugins[TMED_CODEC_MAX_PLUGINS]; + + static const tsk_size_t __codec_plugins_all_count = sizeof(__codec_plugins_all)/sizeof(__codec_plugins_all[0]); + + int ret = _tdav_codec_plugins_disperse(); + if (ret == 0) { + tsk_size_t i, count_max = sizeof(__tmedia_codec_plugins)/sizeof(__tmedia_codec_plugins[0]); + for(i = 0; i < count_max && i < __codec_plugins_all_count; ++i) { + __codec_plugins_all[i] = __tmedia_codec_plugins[i]; + } + } + return ret; +#endif } static inline int _tdav_codec_plugins_disperse() diff --git a/branches/2.0/doubango/tinyMEDIA/include/tinymedia/tmedia_codec.h b/branches/2.0/doubango/tinyMEDIA/include/tinymedia/tmedia_codec.h index 0118d5ac..d558a64f 100644 --- a/branches/2.0/doubango/tinyMEDIA/include/tinymedia/tmedia_codec.h +++ b/branches/2.0/doubango/tinyMEDIA/include/tinymedia/tmedia_codec.h @@ -317,7 +317,7 @@ TINYMEDIA_API int tmedia_codec_plugin_register(const tmedia_codec_plugin_def_t* TINYMEDIA_API int tmedia_codec_plugin_register_2(const tmedia_codec_plugin_def_t* plugin, int prio); TINYMEDIA_API tsk_bool_t tmedia_codec_plugin_is_registered(const tmedia_codec_plugin_def_t* plugin); TINYMEDIA_API tsk_bool_t tmedia_codec_plugin_is_registered_2(tmedia_codec_id_t codec_id); -TINYMEDIA_API int tmedia_codec_plugin_registered_get_all(const struct tmedia_codec_plugin_def_s*** plugins, tsk_size_t* count); +TINYMEDIA_API int tmedia_codec_plugin_registered_get_all(const struct tmedia_codec_plugin_def_s*(** plugins)[TMED_CODEC_MAX_PLUGINS], tsk_size_t* count); TINYMEDIA_API const struct tmedia_codec_plugin_def_s* tmedia_codec_plugin_registered_get_const(tmedia_codec_id_t codec_id); TINYMEDIA_API int tmedia_codec_plugin_unregister(const tmedia_codec_plugin_def_t* plugin); TINYMEDIA_API int tmedia_codec_plugin_unregister_all(); diff --git a/branches/2.0/doubango/tinyMEDIA/src/tmedia_codec.c b/branches/2.0/doubango/tinyMEDIA/src/tmedia_codec.c index fb806ffd..2b2b140a 100644 --- a/branches/2.0/doubango/tinyMEDIA/src/tmedia_codec.c +++ b/branches/2.0/doubango/tinyMEDIA/src/tmedia_codec.c @@ -338,13 +338,13 @@ tsk_bool_t tmedia_codec_plugin_is_registered_2(tmedia_codec_id_t codec_id) * @param count Number of plugins in the list. * @return 0 if succeed and non-zero error code otherwise. */ -int tmedia_codec_plugin_registered_get_all(const struct tmedia_codec_plugin_def_s*** plugins, tsk_size_t* count) +int tmedia_codec_plugin_registered_get_all(const struct tmedia_codec_plugin_def_s*(** plugins)[TMED_CODEC_MAX_PLUGINS], tsk_size_t* count) { if(!plugins || !count) { TSK_DEBUG_ERROR("Invalid parameter"); return -1; } - *plugins = (const struct tmedia_codec_plugin_def_s**)&__tmedia_codec_plugins; + *plugins = &__tmedia_codec_plugins; *count = sizeof(__tmedia_codec_plugins)/sizeof(__tmedia_codec_plugins[0]); return 0; }