The excluded element list from ini file is now referenced by two locations.
1. sink side (previous one) - _decodebin_autoplug_select_cb()
2. source side - CREATE_ELEMENT_FROM_REGISTRY() in __create_rest_of_elements()
[Version] 0.2.152
[Issue Type] Improvement
Change-Id: I277dfd574d8abbb9cd25e961a46efbaff7855ffc
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
g_free(caps_str); \
} while (0)
-#define CREATE_ELEMENT_FROM_REGISTRY(x_elem_info, x_klass_name, x_sink_caps, x_src_caps, x_element) \
+#define CREATE_ELEMENT_FROM_REGISTRY(x_elem_info, x_klass_name, x_sink_caps, x_src_caps, x_excluded_elements, x_element) \
do { \
x_elem_info.klass_name = x_klass_name; \
x_elem_info.sink_caps = x_sink_caps; \
x_elem_info.src_caps = x_src_caps; \
+ x_elem_info.excluded_elements = x_excluded_elements; \
x_element = _create_element_from_registry(&x_elem_info); \
if (!x_element) \
LOG_ERROR("failed to create element of [%s]", x_klass_name); \
const gchar *klass_name;
GstCaps *src_caps;
GstCaps *sink_caps;
+ gchar **excluded_elements;
} element_info_s;
typedef struct _webrtc_signal_s {
Name: capi-media-webrtc
Summary: A WebRTC library in Tizen Native API
-Version: 0.2.151
+Version: 0.2.152
Release: 0
Group: Multimedia/API
License: Apache-2.0
element_info_s *elem_info = (element_info_s *)data;
gboolean src_can_accept = FALSE;
gboolean sink_can_accept = FALSE;
+ gchar *factory_name;
GstElementFactory *factory = NULL;
const gchar *factory_klass = NULL;
+ gchar **str_arr;
if (!GST_IS_ELEMENT_FACTORY(feature))
return FALSE;
factory = GST_ELEMENT_FACTORY(feature);
+ factory_name = GST_OBJECT_NAME(factory);
factory_klass = gst_element_factory_get_klass(factory);
if (!elem_info || !g_strrstr(factory_klass, elem_info->klass_name))
return FALSE;
+ str_arr = elem_info->excluded_elements;
+ while (str_arr && *str_arr) {
+ if (g_strrstr(factory_name, *str_arr++)) {
+ LOG_WARNING("this element[%s] is an item of excluded element list in ini file, skip it", factory_name);
+ return FALSE;
+ }
+ }
+
if (g_strrstr(factory_klass, GST_KLASS_NAME_PAYLOADER_RTP) && !__is_acceptable_element(factory, GST_PAD_SRC))
return FALSE;
else if (g_strrstr(factory_klass, GST_KLASS_NAME_DEPAYLOADER_RTP) && !__is_acceptable_element(factory, GST_PAD_SINK))
if (GST_IS_CAPS(elem_info->src_caps) && GST_IS_CAPS(elem_info->sink_caps)) {
if (src_can_accept && sink_can_accept) {
- LOG_DEBUG("found compatible factory [%s] for klass [%s]", GST_OBJECT_NAME(factory), factory_klass);
+ LOG_DEBUG("found compatible factory [%s] for klass [%s]", factory_name, factory_klass);
return TRUE;
}
return FALSE;
}
if (src_can_accept || sink_can_accept) {
- LOG_DEBUG("found compatible factory [%s] for klass [%s]", GST_OBJECT_NAME(factory), factory_klass);
+ LOG_DEBUG("found compatible factory [%s] for klass [%s]", factory_name, factory_klass);
return TRUE;
}
g_free(bin_name);
- CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_DEPAYLOADER_RTP, gst_pad_get_current_caps(src_pad), NULL, depayloader);
+ CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_DEPAYLOADER_RTP, gst_pad_get_current_caps(src_pad), NULL, NULL, depayloader);
if (!depayloader)
goto error_before_insert;
CREATE_ELEMENT_FROM_REGISTRY(elem_info, encoder_klass_name,
__make_default_raw_caps(source, &webrtc->ini),
__make_default_encoded_caps(source, &webrtc->ini, NULL),
+ webrtc->ini.general.gst_excluded_elements,
encoder);
if (encoder == NULL) {
__remove_probe_from_pad_for_render(source, idx);
CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_PAYLOADER_RTP,
__make_default_encoded_caps(source, &webrtc->ini, &media_type),
NULL,
+ NULL,
payloader);
if (payloader == NULL)
goto error;
CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_PAYLOADER_RTP,
__make_encoded_caps_from_media_format(source, &media_type),
NULL,
+ NULL,
payloader);
if (payloader == NULL) {
g_free(media_type);
CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_PAYLOADER_RTP,
gst_pad_get_current_caps(pad),
NULL,
+ NULL,
payloader);
RET_VAL_IF(payloader == NULL, NULL, "payloader is NULL");