webrtc_ini: Add new item to check for requirement of video overlay resource 90/259590/6
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 10 Jun 2021 05:17:36 +0000 (14:17 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 10 Jun 2021 08:11:41 +0000 (17:11 +0900)
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 <sc11.lee@samsung.com>
include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_ini.c
src/webrtc_resource.c
src/webrtc_sink.c

index 676f503c4896edbe297f5f88e54e2ce622bf5b68..878abcbab5b4f6112d15d634160f8dd665669883 100644 (file)
@@ -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 {
index 7103e23920b8843f848cce1f9cf86507d753d444..32f7c85be8db9670d582aa3456b88c9a93da7f50 100644 (file)
@@ -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
index 62550bcda9922d2c3a0e345bab40eed1b04d4cfe..ebc7ec8bfcba1304a74159da2fd41cf082ad5fc9 100644 (file)
 #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);
index e21fd9f895e8257065c73f54bdfe23a6f6941d7f..2218039ac2264ff1dc9614d2d7e7ceb4ade482fc 100644 (file)
@@ -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;
index 8a5d23022ea683f4c5288f67b7bf5de9c6f7d18b..c2e10ebbe92d3c5723616ca9d6fe96d5aa6d96f5 100644 (file)
@@ -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 ||