#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 GST_KLASS_NAME_PAYLOADER_RTP "Codec/Payloader/Network/RTP"
+#define GST_KLASS_NAME_DEPAYLOADER_RTP "Codec/Depayloader/Network/RTP"
+#define GST_KLASS_NAME_ENCODER_AUDIO "Codec/Encoder/Audio"
+#define GST_KLASS_NAME_ENCODER_VIDEO "Codec/Encoder/Video"
+
+#define ELEMENT_NAME_AUDIO_ENCODER "audioEncoder"
+#define ELEMENT_NAME_VIDEO_ENCODER "videoEncoder"
#define MEDIA_TYPE_AUDIO_RAW "audio/x-raw"
#define MEDIA_TYPE_AUDIO_MULAW "audio/x-mulaw"
return second_rank - first_rank;
}
+static const char *__get_element_name_if_encoder(const char *klass_name)
+{
+ RET_VAL_IF(klass_name == NULL, NULL, "klass_name is NULL");
+
+ if (g_strrstr(klass_name, GST_KLASS_NAME_ENCODER_AUDIO))
+ return ELEMENT_NAME_AUDIO_ENCODER;
+
+ if (g_strrstr(klass_name, GST_KLASS_NAME_ENCODER_VIDEO))
+ return ELEMENT_NAME_VIDEO_ENCODER;
+
+ return NULL;
+}
+
GstElement *_create_element_from_registry(element_info_s *elem_info)
{
GstElement *element = NULL;
if (factories) {
factory = GST_ELEMENT_FACTORY(factories->data);
LOG_INFO("sorted result element is [%s]", GST_OBJECT_NAME(factory));
- element = _create_element(GST_OBJECT_NAME(factory), NULL);
+ element = _create_element(GST_OBJECT_NAME(factory), __get_element_name_if_encoder(elem_info->klass_name));
} else {
LOG_DEBUG("could not find any compatible element for klass_name[%s]", elem_info->klass_name);
}
switch (source->media_types) {
case MEDIA_TYPE_AUDIO:
if (ini_source && ini_source->a_hw_encoder_element)
- return _create_element(ini_source->a_hw_encoder_element, NULL);
+ return _create_element(ini_source->a_hw_encoder_element, ELEMENT_NAME_AUDIO_ENCODER);
else if (webrtc->ini.media_source.a_hw_encoder_element)
- return _create_element(webrtc->ini.media_source.a_hw_encoder_element, NULL);
+ return _create_element(webrtc->ini.media_source.a_hw_encoder_element, ELEMENT_NAME_AUDIO_ENCODER);
break;
case MEDIA_TYPE_VIDEO:
if (ini_source && ini_source->v_hw_encoder_element)
- encoder = _create_element(ini_source->v_hw_encoder_element, NULL);
+ encoder = _create_element(ini_source->v_hw_encoder_element, ELEMENT_NAME_VIDEO_ENCODER);
else if (webrtc->ini.media_source.v_hw_encoder_element)
- encoder = _create_element(webrtc->ini.media_source.v_hw_encoder_element, NULL);
+ encoder = _create_element(webrtc->ini.media_source.v_hw_encoder_element, ELEMENT_NAME_VIDEO_ENCODER);
break;
default:
LOG_ERROR_IF_REACHED("type(0x%x)", source->media_types);
GstElement *encoder = NULL;
element_info_s elem_info;
const gchar *encoder_klass_name = NULL;
- gchar *encoder_name = NULL;
+ const gchar *encoder_name = NULL;
RET_VAL_IF(webrtc == NULL, NULL, "webrtc is NULL");
RET_VAL_IF(source == NULL, NULL, "source is NULL");
RET_VAL_IF(encoder == NULL, NULL, "encoder is NULL");
- encoder_name = gst_element_get_name(encoder);
- if (g_strrstr(encoder_name, "vp8enc") || g_strrstr(encoder_name, "vp9enc")) {
+ encoder_name = GST_OBJECT_NAME(gst_element_get_factory(encoder));
+ if (!g_strcmp0(encoder_name, "vp8enc") || !g_strcmp0(encoder_name, "vp9enc")) {
g_object_set(G_OBJECT(encoder),
"threads", webrtc->ini.vpxenc_params.threads,
"end-usage", webrtc->ini.vpxenc_params.end_usage,
webrtc->ini.vpxenc_params.keyframe_max_dist, webrtc->ini.vpxenc_params.max_quantizer, webrtc->ini.vpxenc_params.min_quantizer,
webrtc->ini.vpxenc_params.undershoot);
- } else if (g_strrstr(encoder_name, "opusenc")) {
+ } else if (!g_strcmp0(encoder_name, "opusenc")) {
if (source->av[AV_IDX_AUDIO].inbandfec) {
g_object_set(G_OBJECT(encoder),
"inband-fec", TRUE,
}
}
- g_free(encoder_name);
return encoder;
}