From: Sangchul Lee Date: Thu, 10 Jun 2021 05:17:36 +0000 (+0900) Subject: webrtc_ini: Add new item to check for requirement of video overlay resource X-Git-Tag: submit/tizen/20210729.023123~53 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6f14f95f06f90f6a7e6677aea2109f985ed177b7;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_ini: Add new item to check for requirement of video overlay resource If the video sink element for video overlay requires a resource acquisition, 'video overlay resource required' item should be set to 'yes' in the configuration file. e.g.) [rendering sink] video overlay resource required = yes Some logs in __dump_ini() is revised. Coding style is a little changed in _acquire_resource_if_needed(). It is changed that creating video sink element before acquiring a resource. [Version] 0.2.10 [Issue Type] Improvement Change-Id: I5ae7948a155c1c1b02f129610ee00a491cab0c96 Signed-off-by: Sangchul Lee --- diff --git a/include/webrtc_private.h b/include/webrtc_private.h index 676f503c..878abcba 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -285,6 +285,7 @@ typedef struct _ini_item_media_source_s { typedef struct _ini_item_rendering_sink_s { gchar **a_hw_decoder_elements; gchar **v_hw_decoder_elements; + bool v_overlay_resource_required; } ini_item_rendering_sink_s; typedef struct _ini_item_vpxenc_params_s { diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 7103e239..32f7c85b 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.9 +Version: 0.2.10 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_ini.c b/src/webrtc_ini.c index 62550bcd..ebc7ec8b 100644 --- a/src/webrtc_ini.c +++ b/src/webrtc_ini.c @@ -74,8 +74,11 @@ #define DEFAULT_AUDIO_CODEC "opus" /* items for rendering sink */ -#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_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_OVERLAY_RESOURCE_REQUIRED false /* items for vpxenc parameters */ #define INI_ITEM_VPXENC_THREADS "threads" @@ -211,20 +214,20 @@ static void __dump_ini(webrtc_ini_s *ini) } } - if (__is_vpx(ini->media_source.v_codec)) { - LOG_INFO("[%s]", INI_CATEGORY_VPXENC_PARAMS); - __dump_item(INI_ITEM_VPXENC_THREADS, INI_ITEM_TYPE_INT, &ini->vpxenc_params.threads); - __dump_item(INI_ITEM_VPXENC_END_USAGE, INI_ITEM_TYPE_INT, &ini->vpxenc_params.end_usage); - __dump_item(INI_ITEM_VPXENC_CPU_USED, INI_ITEM_TYPE_INT, &ini->vpxenc_params.cpu_used); - __dump_item(INI_ITEM_VPXENC_TARGET_BITRATE, INI_ITEM_TYPE_INT, &ini->vpxenc_params.target_bitrate); - __dump_item(INI_ITEM_VPXENC_KEYFRAME_MAX_DIST, INI_ITEM_TYPE_INT, &ini->vpxenc_params.keyframe_max_dist); - __dump_item(INI_ITEM_VPXENC_MIN_QUANTIZER, INI_ITEM_TYPE_INT, &ini->vpxenc_params.min_quantizer); - __dump_item(INI_ITEM_VPXENC_MAX_QUANTIZER, INI_ITEM_TYPE_INT, &ini->vpxenc_params.max_quantizer); - __dump_item(INI_ITEM_VPXENC_UNDERSHOOT, INI_ITEM_TYPE_INT, &ini->vpxenc_params.undershoot); - } - + LOG_INFO("[%s]", INI_CATEGORY_RENDERING_SINK); __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); + + LOG_INFO("[%s]", INI_CATEGORY_VPXENC_PARAMS); + __dump_item(INI_ITEM_VPXENC_THREADS, INI_ITEM_TYPE_INT, &ini->vpxenc_params.threads); + __dump_item(INI_ITEM_VPXENC_END_USAGE, INI_ITEM_TYPE_INT, &ini->vpxenc_params.end_usage); + __dump_item(INI_ITEM_VPXENC_CPU_USED, INI_ITEM_TYPE_INT, &ini->vpxenc_params.cpu_used); + __dump_item(INI_ITEM_VPXENC_TARGET_BITRATE, INI_ITEM_TYPE_INT, &ini->vpxenc_params.target_bitrate); + __dump_item(INI_ITEM_VPXENC_KEYFRAME_MAX_DIST, INI_ITEM_TYPE_INT, &ini->vpxenc_params.keyframe_max_dist); + __dump_item(INI_ITEM_VPXENC_MIN_QUANTIZER, INI_ITEM_TYPE_INT, &ini->vpxenc_params.min_quantizer); + __dump_item(INI_ITEM_VPXENC_MAX_QUANTIZER, INI_ITEM_TYPE_INT, &ini->vpxenc_params.max_quantizer); + __dump_item(INI_ITEM_VPXENC_UNDERSHOOT, INI_ITEM_TYPE_INT, &ini->vpxenc_params.undershoot); } static const char* __get_delimiter(const char *ini_path) @@ -437,6 +440,8 @@ int _load_ini(webrtc_s *webrtc) __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, + INI_ITEM_VIDEO_OVERLAY_RESOURCE_REQUIRED, DEFAULT_VIDEO_OVERLAY_RESOURCE_REQUIRED); if (__is_vpx(ini->media_source.v_codec)) __apply_vpxenc_params_setting(ini, &ini->vpxenc_params, INI_CATEGORY_VPXENC_PARAMS); diff --git a/src/webrtc_resource.c b/src/webrtc_resource.c index e21fd9f8..2218039a 100644 --- a/src/webrtc_resource.c +++ b/src/webrtc_resource.c @@ -25,12 +25,11 @@ int _acquire_resource_if_needed(webrtc_s *webrtc) RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL"); for (i = 0; i < RESOURCE_TYPE_MAX; i++) { - if (webrtc->resource.need_to_acquire[i] == true) { - ret = _acquire_resource_for_type(webrtc, i); - if (ret != WEBRTC_ERROR_NONE) - return ret; - webrtc->resource.need_to_acquire[i] = false; - } + if (!webrtc->resource.need_to_acquire[i]) + continue; + if ((ret = _acquire_resource_for_type(webrtc, i)) != WEBRTC_ERROR_NONE) + return ret; + webrtc->resource.need_to_acquire[i] = false; } return ret; diff --git a/src/webrtc_sink.c b/src/webrtc_sink.c index 8a5d2302..c2e10ebb 100644 --- a/src/webrtc_sink.c +++ b/src/webrtc_sink.c @@ -131,17 +131,17 @@ 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 = _create_element(videosink_factory_name, NULL))) { + LOG_ERROR("failed to create videosink[%s]", videosink_factory_name); + return WEBRTC_ERROR_INVALID_OPERATION; + } #ifdef TIZEN_FEATURE_RES_MGR - if (!g_strcmp0(videosink_factory_name, DEFAULT_ELEMENT_VIDEOSINK)) { + if (sink->display->type == WEBRTC_DISPLAY_TYPE_OVERLAY && webrtc->ini.rendering_sink.v_overlay_resource_required) { webrtc->resource.need_to_acquire[MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_OVERLAY] = true; if ((ret =_acquire_resource_for_type(webrtc, MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_OVERLAY))) return ret; } #endif - if (!(videosink = _create_element(videosink_factory_name, NULL))) { - LOG_ERROR("failed to create videosink[%s]", videosink_factory_name); - return WEBRTC_ERROR_INVALID_OPERATION; - } if (display_is_set) { if (sink->display->type == WEBRTC_DISPLAY_TYPE_OVERLAY ||