#define DEFAULT_VIDEO_SINK_ELEMENT "tizenwlsink"
#define DEFAULT_AUDIO_SINK_ELEMENT "pulsesink"
+#define GST_KLASS_NAME_PAYLOADER_RTP "Codec/Payloader/Network/RTP"
+#define GST_KLASS_NAME_DEPAYLOADER_RTP "Codec/Depayloader/Network/RTP"
+
#define MEDIA_TYPE_AUDIO_RAW "audio/x-raw"
#define MEDIA_TYPE_AUDIO_OPUS "audio/x-opus"
#define MEDIA_TYPE_AUDIO_VORBIS "audio/x-vorbis"
return element;
}
+static gboolean __is_acceptable_element(GstElementFactory *factory, GstPadDirection direction)
+{
+ const GList *templates = NULL;
+ GstStaticPadTemplate *temp = NULL;
+ GstCaps *caps = NULL;
+ GList *walk = NULL;
+ const GValue *value = NULL;
+ const gchar *media = NULL;
+
+ RET_VAL_IF(!factory, FALSE, "factory is NULL");
+
+ templates = gst_element_factory_get_static_pad_templates(factory);
+
+ for (walk = (GList *)templates; walk; walk = g_list_next(walk)) {
+ temp = walk->data;
+
+ if (temp->direction != direction)
+ continue;
+
+ caps = gst_static_caps_get(&temp->static_caps);
+ value = gst_structure_get_value(gst_caps_get_structure(caps, 0), "media");
+
+ if (!value || GST_VALUE_HOLDS_LIST(value)) {
+ gst_caps_unref(caps);
+ return TRUE;
+ }
+
+ media = g_value_get_string(value);
+
+ if (g_strrstr(media, "audio") || g_strrstr(media, "video")) {
+ gst_caps_unref(caps);
+ return TRUE;
+ }
+
+ LOG_WARNING("[%s] not supported media [%s]", GST_OBJECT_NAME(factory), media);
+ gst_caps_unref(caps);
+ }
+
+ LOG_WARNING("not acceptable factory [%s]", GST_OBJECT_NAME(factory));
+
+ return FALSE;
+}
+
static gboolean __element_filter(GstPluginFeature *feature, gpointer data)
{
element_info_s *elem_info = (element_info_s *)data;
if (!elem_info || !g_strrstr(factory_klass, elem_info->klass_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))
+ return FALSE;
+
if (GST_IS_CAPS(elem_info->src_caps))
src_can_accept = gst_element_factory_can_src_any_caps(factory, elem_info->src_caps);
#include <gst/video/videooverlay.h>
#include <media_packet_internal.h>
-#define GST_KLASS_NAME_DEPAYLOADER_RTP "Codec/Depayloader/Network/RTP"
-
#define DEFAULT_ELEMENT_CAPSFILTER "capsfilter"
#define DEFAULT_ELEMENT_AUDIOCONVERT "audioconvert"
#define DEFAULT_ELEMENT_AUDIORESAMPLE "audioresample"
#define GST_KLASS_NAME_ENCODER_VIDEO "Codec/Encoder/Video"
#define GST_KLASS_NAME_DECODER_AUDIO "Codec/Decoder/Audio"
#define GST_KLASS_NAME_DECODER_VIDEO "Codec/Decoder/Video"
-#define GST_KLASS_NAME_PAYLOADER_RTP "Codec/Payloader/Network/RTP"
#define GST_KLASS_NAME_CONVERTER_AUDIO "Filter/Converter/Audio"
#define GST_KLASS_NAME_CONVERTER_VIDEO "Filter/Converter/Video"