From 9bd556786740b77796dd51008a642641a394827b Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Wed, 27 Dec 2023 17:09:24 +0900 Subject: [PATCH] Add new param of postfix number to CREATE_ELEMENT_FROM_REGISTRY macro function -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 --- include/webrtc_private.h | 6 +++--- packaging/capi-media-webrtc.spec | 2 +- src/webrtc_private.c | 19 ++++++++++++++----- src/webrtc_sink.c | 2 +- src/webrtc_source_file.c | 3 ++- src/webrtc_source_mediapacket.c | 3 ++- src/webrtc_source_private.c | 8 +++++--- 7 files changed, 28 insertions(+), 15 deletions(-) diff --git a/include/webrtc_private.h b/include/webrtc_private.h index b723e273..1b49dc96 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -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); diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 501d769a..6ff3c348 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -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 diff --git a/src/webrtc_private.c b/src/webrtc_private.c index 6a376a0c..0cd747f9 100644 --- a/src/webrtc_private.c +++ b/src/webrtc_private.c @@ -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); } diff --git a/src/webrtc_sink.c b/src/webrtc_sink.c index a5fc7cb2..98179482 100644 --- a/src/webrtc_sink.c +++ b/src/webrtc_sink.c @@ -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; diff --git a/src/webrtc_source_file.c b/src/webrtc_source_file.c index 3f7efcb7..9f0f43b4 100644 --- a/src/webrtc_source_file.c +++ b/src/webrtc_source_file.c @@ -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)); diff --git a/src/webrtc_source_mediapacket.c b/src/webrtc_source_mediapacket.c index 1e0b069d..e94ab34f 100644 --- a/src/webrtc_source_mediapacket.c +++ b/src/webrtc_source_mediapacket.c @@ -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); diff --git a/src/webrtc_source_private.c b/src/webrtc_source_private.c index 387f1594..63d76b0d 100644 --- a/src/webrtc_source_private.c +++ b/src/webrtc_source_private.c @@ -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); -- 2.34.1