webrtc_source_private: Set name to encoder element 07/279007/2
authorSangchul Lee <sc11.lee@samsung.com>
Fri, 29 Jul 2022 07:47:39 +0000 (16:47 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 29 Jul 2022 12:57:06 +0000 (21:57 +0900)
[Version] 0.3.183
[Issue Type] Improvement

Change-Id: I491a618176e819a735377e0248f86b4d6a325893
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_private.c
src/webrtc_source_private.c

index ee1f645793d0124b3a4b44f7039e89946079da87..48d4c1d6fa5e28433741e9d9fa0528d3da548c81 100644 (file)
@@ -240,8 +240,13 @@ do { \
 #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"
index dd98473e784a5310d6e7a517b8110ad405d4ca3c..7bc23cd6ab3b0bf6542bd52d7d5e9eef3c763334 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.182
+Version:    0.3.183
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index cbbf2dcb34d8df741e37b296fa0a5ed4a1cb6d5c..5cc95bc1c61dc945c206bfe2dfdefd37dfd6c158 100644 (file)
@@ -937,6 +937,19 @@ static int __rank_compare(GstPluginFeature *first, GstPluginFeature *second)
        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;
@@ -951,7 +964,7 @@ GstElement *_create_element_from_registry(element_info_s *elem_info)
        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);
        }
index 0e2b47ef6ae2b7c84f3178ddacb50dd28f03d17a..05ea280706f9a8d926ad389e01a824c3dca05d99 100644 (file)
@@ -865,15 +865,15 @@ static GstElement *__get_hw_encoder_element(webrtc_s *webrtc, webrtc_gst_slot_s
        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);
@@ -898,7 +898,7 @@ static GstElement * __prepare_encoder(webrtc_s *webrtc, webrtc_gst_slot_s *sourc
        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");
@@ -916,8 +916,8 @@ static GstElement * __prepare_encoder(webrtc_s *webrtc, webrtc_gst_slot_s *sourc
 
        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,
@@ -934,7 +934,7 @@ static GstElement * __prepare_encoder(webrtc_s *webrtc, webrtc_gst_slot_s *sourc
                        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,
@@ -946,7 +946,6 @@ static GstElement * __prepare_encoder(webrtc_s *webrtc, webrtc_gst_slot_s *sourc
                }
        }
 
-       g_free(encoder_name);
        return encoder;
 }