From: Sangchul Lee Date: Wed, 16 Jun 2021 01:10:16 +0000 (+0900) Subject: webrtc_ini: Add new item to get audio/video sink element X-Git-Tag: submit/tizen/20210729.023123~52 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f7dc2f1b21fb46f5f2eaba0820dbf303d4a62dac;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_ini: Add new item to get audio/video sink element Sink pipeline applies this change. e.g.) [rendering sink] audio sink element = pulsesrc video sink element = tizenwlsink [Version] 0.2.11 [Issue Type] Improvement Change-Id: I58d549c56cb7a9323ff77aa732966a1a9e815e04 Signed-off-by: Sangchul Lee --- diff --git a/include/webrtc_private.h b/include/webrtc_private.h index 878abcba..2f9a72ca 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -282,7 +282,9 @@ typedef struct _ini_item_media_source_s { const char *a_hw_encoder_element; } ini_item_media_source_s; -typedef struct _ini_item_rendering_sink_s { +typedef struct _ini_item_rendering_sink_s { + const char *a_sink_element; + const char *v_sink_element; gchar **a_hw_decoder_elements; gchar **v_hw_decoder_elements; bool v_overlay_resource_required; diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 32f7c85b..cec6135e 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.2.10 +Version: 0.2.11 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_ini.c b/src/webrtc_ini.c index ebc7ec8b..a070db42 100644 --- a/src/webrtc_ini.c +++ b/src/webrtc_ini.c @@ -74,10 +74,14 @@ #define DEFAULT_AUDIO_CODEC "opus" /* items for rendering sink */ +#define INI_ITEM_AUDIO_SINK_ELEMENT "audio sink element" +#define INI_ITEM_VIDEO_SINK_ELEMENT "video sink element" #define INI_ITEM_AUDIO_HW_DECODER_ELEMENTS "audio hw decoder elements" #define INI_ITEM_VIDEO_HW_DECODER_ELEMENTS "video hw decoder elements" #define INI_ITEM_VIDEO_OVERLAY_RESOURCE_REQUIRED "video overlay resource required" +#define DEFAULT_VIDEO_SINK_ELEMENT "tizenwlsink" +#define DEFAULT_AUDIO_SINK_ELEMENT "pulsesink" #define DEFAULT_VIDEO_OVERLAY_RESOURCE_REQUIRED false /* items for vpxenc parameters */ @@ -215,6 +219,8 @@ static void __dump_ini(webrtc_ini_s *ini) } LOG_INFO("[%s]", INI_CATEGORY_RENDERING_SINK); + __dump_item(INI_ITEM_AUDIO_SINK_ELEMENT, INI_ITEM_TYPE_STRING, (void *)ini->rendering_sink.a_sink_element); + __dump_item(INI_ITEM_VIDEO_SINK_ELEMENT, INI_ITEM_TYPE_STRING, (void *)ini->rendering_sink.v_sink_element); __dump_item(INI_ITEM_AUDIO_HW_DECODER_ELEMENTS, INI_ITEM_TYPE_STRINGS, ini->rendering_sink.a_hw_decoder_elements); __dump_item(INI_ITEM_VIDEO_HW_DECODER_ELEMENTS, INI_ITEM_TYPE_STRINGS, ini->rendering_sink.v_hw_decoder_elements); __dump_item(INI_ITEM_VIDEO_OVERLAY_RESOURCE_REQUIRED, INI_ITEM_TYPE_BOOL, &ini->rendering_sink.v_overlay_resource_required); @@ -438,6 +444,8 @@ int _load_ini(webrtc_s *webrtc) } } + ini->rendering_sink.a_sink_element = __ini_get_string(ini->dict, INI_CATEGORY_RENDERING_SINK, INI_ITEM_AUDIO_SINK_ELEMENT, DEFAULT_AUDIO_SINK_ELEMENT); + ini->rendering_sink.v_sink_element = __ini_get_string(ini->dict, INI_CATEGORY_RENDERING_SINK, INI_ITEM_VIDEO_SINK_ELEMENT, DEFAULT_VIDEO_SINK_ELEMENT); __ini_read_list(ini->dict, INI_CATEGORY_RENDERING_SINK, INI_ITEM_AUDIO_HW_DECODER_ELEMENTS, &ini->rendering_sink.a_hw_decoder_elements); __ini_read_list(ini->dict, INI_CATEGORY_RENDERING_SINK, INI_ITEM_VIDEO_HW_DECODER_ELEMENTS, &ini->rendering_sink.v_hw_decoder_elements); ini->rendering_sink.v_overlay_resource_required = __ini_get_boolean(ini->dict, INI_CATEGORY_RENDERING_SINK, diff --git a/src/webrtc_sink.c b/src/webrtc_sink.c index c2e10ebb..07295dee 100644 --- a/src/webrtc_sink.c +++ b/src/webrtc_sink.c @@ -25,8 +25,6 @@ #define DEFAULT_ELEMENT_VIDEOCONVERT "videoconvert" #define DEFAULT_ELEMENT_AUDIOCONVERT "audioconvert" #define DEFAULT_ELEMENT_AUDIORESAMPLE "audioresample" -#define DEFAULT_ELEMENT_VIDEOSINK "tizenwlsink" -#define DEFAULT_ELEMENT_AUDIOSINK "pulsesink" #define DEFAULT_ELEMENT_FAKESINK "fakesink" bool _is_owner_of_track_build_context(webrtc_s *webrtc, unsigned int track_id) @@ -83,24 +81,24 @@ static webrtc_gst_slot_s* __find_sink_slot(webrtc_s *webrtc, const gchar *key) return g_hash_table_lookup(webrtc->gst.sink_slots, key); } -static const char *__get_videosink_factory_name(webrtc_display_s *display, const char *default_name, bool *display_is_set) +static const char *__get_videosink_factory_name(webrtc_display_s *display, webrtc_ini_s *ini, bool *display_is_set) { - const char *factory_name = DEFAULT_ELEMENT_VIDEOSINK; + const char *factory_name = NULL; - RET_VAL_IF(display == NULL, default_name, "display is NULL"); - RET_VAL_IF(default_name == NULL, DEFAULT_ELEMENT_VIDEOSINK, "default_name is NULL"); - RET_VAL_IF(display_is_set == NULL, default_name, "display_is_set is NULL"); + RET_VAL_IF(display == NULL, NULL, "display is NULL"); + RET_VAL_IF(ini == NULL, NULL, "ini is NULL"); + RET_VAL_IF(display_is_set == NULL, NULL, "display_is_set is NULL"); if (display->object == NULL) { *display_is_set = false; - LOG_INFO("display object is not set, use [%s]", default_name); - return default_name; + LOG_INFO("display object is not set, use [%s]", ini->rendering_sink.v_sink_element); + return ini->rendering_sink.v_sink_element; } *display_is_set = true; if (display->type == WEBRTC_DISPLAY_TYPE_OVERLAY) - factory_name = DEFAULT_ELEMENT_VIDEOSINK; + factory_name = ini->rendering_sink.v_sink_element; else if (display->type == WEBRTC_DISPLAY_TYPE_EVAS) factory_name = DEFAULT_ELEMENT_FAKESINK; else @@ -130,7 +128,9 @@ static int __build_videosink(webrtc_s *webrtc, GstElement *decodebin, GstPad *sr sink->media_types |= MEDIA_TYPE_VIDEO; - videosink_factory_name = __get_videosink_factory_name(sink->display, DEFAULT_ELEMENT_VIDEOSINK, &display_is_set); + if (!(videosink_factory_name = __get_videosink_factory_name(sink->display, &webrtc->ini, &display_is_set))) + return WEBRTC_ERROR_INVALID_OPERATION; + if (!(videosink = _create_element(videosink_factory_name, NULL))) { LOG_ERROR("failed to create videosink[%s]", videosink_factory_name); return WEBRTC_ERROR_INVALID_OPERATION; @@ -205,8 +205,7 @@ static int __build_audiosink(webrtc_s *webrtc, GstElement *decodebin, GstPad *sr return WEBRTC_ERROR_INVALID_OPERATION; } - /* FIXME: get factory name from ini */ - if (!(audiosink = _create_element(DEFAULT_ELEMENT_AUDIOSINK, NULL))) { + if (!(audiosink = _create_element(webrtc->ini.rendering_sink.a_sink_element, NULL))) { LOG_ERROR("failed to create audiosink"); return WEBRTC_ERROR_INVALID_OPERATION; }