Add new param of postfix number to CREATE_ELEMENT_FROM_REGISTRY macro function 09/303409/5 accepted/tizen/unified/20240104.012426
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 27 Dec 2023 08:09:24 +0000 (17:09 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 2 Jan 2024 02:03:36 +0000 (11:03 +0900)
-1 value will affect nothing.
Otherwise, the element name will be followed by the postfix number.

[Version] 0.4.28
[Issue Type] Improvement

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

index b723e273605c25a69b244b42066e4750bf2e59aa..1b49dc96e4a76c1f147fe9896e85ea8cbe2c03fe 100644 (file)
@@ -206,13 +206,13 @@ do { \
        LOG_DEBUG("%s is prepended", GST_ELEMENT_NAME(x_element)); \
 } while (0)
 
-#define CREATE_ELEMENT_FROM_REGISTRY(x_elem_info, x_klass_name, x_sink_caps, x_src_caps, x_excluded_elements, x_element) \
+#define CREATE_ELEMENT_FROM_REGISTRY(x_elem_info, x_klass_name, x_sink_caps, x_src_caps, x_excluded_elements, x_element, x_i) \
 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); \
+       x_element = _create_element_from_registry(&x_elem_info, x_i); \
        if (!x_element) \
                LOG_ERROR("failed to create element of [%s]", x_klass_name); \
        if (x_elem_info.sink_caps) \
@@ -892,7 +892,7 @@ void _gst_destroy_pipeline(webrtc_s *webrtc);
 int _gst_pipeline_set_state(webrtc_s *webrtc, GstState state);
 
 GstElement *_create_element(const char *factory_name, const char *name);
-GstElement *_create_element_from_registry(element_info_s *elem_info);
+GstElement *_create_element_from_registry(element_info_s *elem_info, int i);
 bool _sync_elements_state_with_parent(GList *element_list);
 bool _add_elements_to_bin(GstBin *bin, GList *element_list);
 bool _link_elements(GList *element_list);
index 501d769a12f8b74f82966a4cfaae5b537a3e0088..6ff3c348f135f1527f40121488279bdbb1c199d2 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.4.27
+Version:    0.4.28
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 6a376a0ccb75b8929649b99362b833994ef64f4a..0cd747f998111bd1058e529c176546da972d4252 100644 (file)
@@ -985,24 +985,32 @@ 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)
+static gchar *__append_num_to_string(const char *str, int i)
+{
+       if (i == -1)
+               return g_strdup(str);
+       return g_strdup_printf("%s%i", str, i);
+}
+
+static gchar *__get_element_name_if_encoder(const char *klass_name, int i)
 {
        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;
+               return __append_num_to_string(ELEMENT_NAME_AUDIO_ENCODER, i);
 
        if (g_strrstr(klass_name, GST_KLASS_NAME_ENCODER_VIDEO))
-               return ELEMENT_NAME_VIDEO_ENCODER;
+               return __append_num_to_string(ELEMENT_NAME_VIDEO_ENCODER, i);
 
        return NULL;
 }
 
-GstElement *_create_element_from_registry(element_info_s *elem_info)
+GstElement *_create_element_from_registry(element_info_s *elem_info, int i)
 {
        GstElement *element = NULL;
        GList *factories = NULL;
        GstElementFactory *factory = NULL;
+       g_autofree gchar *element_name = NULL;
 
        RET_VAL_IF(elem_info == NULL, NULL, "elem_info is NULL");
 
@@ -1012,7 +1020,8 @@ 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), __get_element_name_if_encoder(elem_info->klass_name));
+               element_name = __get_element_name_if_encoder(elem_info->klass_name, i);
+               element = _create_element(GST_OBJECT_NAME(factory), element_name);
        } else {
                LOG_DEBUG("could not find any compatible element for klass_name[%s]", elem_info->klass_name);
        }
index a5fc7cb2b9afe980fdeddd07128299252b2398ca..981794824542a0de5d27a02abc47116ea9dc7990 100644 (file)
@@ -1064,7 +1064,7 @@ int _add_forwarding_sink_bin(webrtc_s *webrtc, GstPad *src_pad, bool is_audio)
        g_free(bin_name);
 
        GET_CAPS_INFO_FROM_PAD(src_pad, src_caps);
-       CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_DEPAYLOADER_RTP, src_caps, NULL, NULL, depayloader);
+       CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_DEPAYLOADER_RTP, src_caps, NULL, NULL, depayloader, -1);
 
        if (!depayloader)
                goto error_before_insert;
index 3f7efcb79b5fa7208e51672ddd662a28dc81babb..9f0f43b4d3064ad95739f30beb12b1177fd27d9d 100644 (file)
@@ -300,7 +300,8 @@ static GstElement * __create_payloader_for_filesrc_pipeline(GstPad *pad, bool is
                                                                caps,
                                                                NULL,
                                                                NULL,
-                                                               payloader);
+                                                               payloader,
+                                                               -1);
        RET_VAL_IF(payloader == NULL, NULL, "payloader is NULL");
 
        gst_element_set_name(payloader, _get_element_name(GET_AV_IDX(is_audio), ELEMENT_PAYLOADER));
index 1e0b069d739c8ffcaa5f78170175aa5d70c3fde3..e94ab34fb035b1c2b867aec21f6f7d3e7fe6e6a8 100644 (file)
@@ -317,7 +317,8 @@ static int __create_rest_of_elements_for_encoded_format(webrtc_s *webrtc, webrtc
                                                __make_encoded_caps_from_media_format(source, &media_type),
                                                NULL,
                                                NULL,
-                                               payloader);
+                                               payloader,
+                                               -1);
        if (!payloader)
                goto error;
        APPEND_ELEMENT(*element_list, payloader);
index 387f1594349fcf41d353d9e9834a4e4933d2a44a..63d76b0d7bc75d04ac055d94e965d585f228a315 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 202 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -625,7 +625,8 @@ static GstElement * __prepare_encoder(webrtc_s *webrtc, webrtc_gst_slot_s *sourc
                                                        __make_default_raw_caps(source, &webrtc->ini),
                                                        __make_default_encoded_caps(source, &webrtc->ini, NULL),
                                                        webrtc->ini.general.gst_excluded_elements,
-                                                       encoder);
+                                                       encoder,
+                                                       -1);
 
        RET_VAL_IF(encoder == NULL, NULL, "encoder is NULL");
 
@@ -887,7 +888,8 @@ skip_encoder:
                                                caps_for_encoder,
                                                NULL,
                                                NULL,
-                                               payloader);
+                                               payloader,
+                                               -1);
        if (payloader == NULL)
                goto error;
        APPEND_ELEMENT(*element_list, payloader);