#define INI_CATEGORY_SOURCE_SCREEN "source screen"
#define INI_CATEGORY_SOURCE_FILE "source file"
#define INI_CATEGORY_RENDERING_SINK "rendering sink"
+#define INI_CATEGORY_RESOURCE_ACQUISITION "resource acquisition"
#define INI_CATEGORY_VPXENC_PARAMS "vpxenc params"
/* items for general */
#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 resource acquisition */
+#define INI_ITEM_RESOURCE_CAMERA "camera"
+#define INI_ITEM_RESOURCE_VIDEO_ENCODER "video encoder"
+#define INI_ITEM_RESOURCE_VIDEO_DECODER "video decoder"
+#define INI_ITEM_RESOURCE_VIDEO_OVERLAY "video overlay"
+
+#define DEFAULT_RESOURCE_CAMERA_REQUIRED false
+#define DEFAULT_RESOURCE_VIDEO_ENCODER_REQUIRED false
+#define DEFAULT_RESOURCE_VIDEO_DECODER_REQUIRED false
+#define DEFAULT_RESOURCE_VIDEO_OVERLAY_REQUIRED false
/* items for vpxenc parameters */
#define INI_ITEM_VPXENC_THREADS "threads"
__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);
+
+ LOG_INFO("[%s]", INI_CATEGORY_RESOURCE_ACQUISITION);
+ __dump_item(INI_ITEM_RESOURCE_CAMERA, INI_ITEM_TYPE_BOOL, &ini->resource_acquisition.camera);
+ __dump_item(INI_ITEM_RESOURCE_VIDEO_ENCODER, INI_ITEM_TYPE_BOOL, &ini->resource_acquisition.video_encoder);
+ __dump_item(INI_ITEM_RESOURCE_VIDEO_DECODER, INI_ITEM_TYPE_BOOL, &ini->resource_acquisition.video_decoder);
+ __dump_item(INI_ITEM_RESOURCE_VIDEO_OVERLAY, INI_ITEM_TYPE_BOOL, &ini->resource_acquisition.video_overlay);
LOG_INFO("[%s]", INI_CATEGORY_VPXENC_PARAMS);
__dump_item(INI_ITEM_VPXENC_THREADS, INI_ITEM_TYPE_INT, &ini->vpxenc_params.threads);
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,
- INI_ITEM_VIDEO_OVERLAY_RESOURCE_REQUIRED, DEFAULT_VIDEO_OVERLAY_RESOURCE_REQUIRED);
+
+ ini->resource_acquisition.camera = __ini_get_boolean(ini->dict, INI_CATEGORY_RESOURCE_ACQUISITION,
+ INI_ITEM_RESOURCE_CAMERA, DEFAULT_RESOURCE_CAMERA_REQUIRED);
+ ini->resource_acquisition.video_encoder = __ini_get_boolean(ini->dict, INI_CATEGORY_RESOURCE_ACQUISITION,
+ INI_ITEM_RESOURCE_VIDEO_ENCODER, DEFAULT_RESOURCE_VIDEO_ENCODER_REQUIRED);
+ ini->resource_acquisition.video_decoder = __ini_get_boolean(ini->dict, INI_CATEGORY_RESOURCE_ACQUISITION,
+ INI_ITEM_RESOURCE_VIDEO_DECODER, DEFAULT_RESOURCE_VIDEO_DECODER_REQUIRED);
+ ini->resource_acquisition.video_overlay = __ini_get_boolean(ini->dict, INI_CATEGORY_RESOURCE_ACQUISITION,
+ INI_ITEM_RESOURCE_VIDEO_OVERLAY, DEFAULT_RESOURCE_VIDEO_OVERLAY_REQUIRED);
if (__is_vpx(ini->media_source.v_codec))
__apply_vpxenc_params_setting(ini, &ini->vpxenc_params, INI_CATEGORY_VPXENC_PARAMS);
return WEBRTC_ERROR_NONE;
}
-static bool __is_valid_resource_type(mm_resource_manager_res_type_e type)
-{
- if (type < MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_DECODER || type >= RESOURCE_TYPE_MAX) {
- LOG_ERROR("Type[%d] is a invalid resource type", type);
- return false;
- }
- return true;
-}
-
int _acquire_resource_for_type(webrtc_s *webrtc, mm_resource_manager_res_type_e type)
{
int ret = MM_RESOURCE_MANAGER_ERROR_NONE;
RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
- RET_VAL_IF(webrtc->resource.mgr == NULL, WEBRTC_ERROR_INVALID_PARAMETER,
- "resource manager is NULL");
- RET_VAL_IF(!__is_valid_resource_type(type), WEBRTC_ERROR_INVALID_PARAMETER,
- "type is wrong");
+ RET_VAL_IF(webrtc->resource.mgr == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "resource manager is NULL");
+ RET_VAL_IF(type >= RESOURCE_TYPE_MAX, WEBRTC_ERROR_INVALID_PARAMETER, "invalid type(%d)", type);
if (webrtc->resource.res[type] != NULL) {
LOG_ERROR("type[%d] resource was already acquired", type);
return WEBRTC_ERROR_INVALID_OPERATION;
}
#ifndef TIZEN_TV
- 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 (sink->display->type == WEBRTC_DISPLAY_TYPE_OVERLAY && webrtc->ini.resource_acquisition.video_overlay) {
if ((ret =_acquire_resource_for_type(webrtc, MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_OVERLAY)))
return ret;
}
return GST_AUTOPLUG_SELECT_SKIP;
#ifndef TIZEN_TV
} else {
- webrtc->resource.need_to_acquire[MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_DECODER] = true;
- if (_acquire_resource_for_type(webrtc, MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_DECODER) != WEBRTC_ERROR_NONE)
- return GST_AUTOPLUG_SELECT_SKIP;
+ if (webrtc->ini.resource_acquisition.video_decoder) {
+ if (_acquire_resource_for_type(webrtc, MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_DECODER) != WEBRTC_ERROR_NONE)
+ return GST_AUTOPLUG_SELECT_SKIP;
+ }
#endif
}
}
if (encoder) {
#ifndef TIZEN_TV
- webrtc->resource.need_to_acquire[MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_ENCODER] = true;
+ if (webrtc->ini.resource_acquisition.video_encoder)
+ webrtc->resource.need_to_acquire[MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_ENCODER] = true;
#endif
LOG_WARNING("hw encoder element [%s]", GST_ELEMENT_NAME(encoder));
return encoder;
source->media_types = MEDIA_TYPE_VIDEO;
source->zerocopy_enabled = __is_hw_encoder_used(webrtc, source->type, source->media_types);
#ifndef TIZEN_TV
- webrtc->resource.need_to_acquire[MM_RESOURCE_MANAGER_RES_TYPE_CAMERA] = true;
+ if (webrtc->ini.resource_acquisition.camera)
+ webrtc->resource.need_to_acquire[MM_RESOURCE_MANAGER_RES_TYPE_CAMERA] = true;
#endif
if (!(camerasrc = _create_element(__get_source_element(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_CAMERA), ELEMENT_NAME_VIDEO_SRC)))
return WEBRTC_ERROR_INVALID_OPERATION;