From: backto.kim Date: Mon, 20 Dec 2021 02:37:57 +0000 (+0900) Subject: Separate the code to get encoder X-Git-Tag: submit/tizen/20211222.143709~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1dd74dcff6536f3751f63ed1197ba2f087ecbcb4;p=platform%2Fcore%2Fapi%2Fwebrtc.git Separate the code to get encoder [Version] 0.3.24 [Issue Type] Refactoring Change-Id: Iee321f4b3126c0d1545421d95594076b395ccd4a --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 765344d3..5b784140 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.3.23 +Version: 0.3.24 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index f6ad90ed..5998cc23 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -853,6 +853,47 @@ static void __remove_probe_from_pad_for_render(webrtc_gst_slot_s *source, unsign } } +static GstElement * __prepare_encoder(webrtc_s *webrtc, webrtc_gst_slot_s *source, bool is_audio) +{ + GstElement *encoder = NULL; + element_info_s elem_info; + const gchar *encoder_klass_name = NULL; + gchar *encoder_name = NULL; + + RET_VAL_IF(webrtc == NULL, NULL, "webrtc is NULL"); + RET_VAL_IF(source == NULL, NULL, "source is NULL"); + + encoder_klass_name = is_audio ? GST_KLASS_NAME_ENCODER_AUDIO : GST_KLASS_NAME_ENCODER_VIDEO; + + if (source->zerocopy_enabled) + encoder = __get_hw_encoder_element(webrtc, source); + else + CREATE_ELEMENT_FROM_REGISTRY(elem_info, encoder_klass_name, + __make_default_raw_caps(source, &webrtc->ini), + __make_default_encoded_caps(source, &webrtc->ini, NULL), + webrtc->ini.general.gst_excluded_elements, + encoder); + + RET_VAL_IF(encoder == NULL, NULL, "encoder is NULL"); + + encoder_name = gst_element_get_name(encoder); + if (g_strrstr(encoder_name, "vp8enc") || g_strrstr(encoder_name, "vp9enc")) { + g_object_set(G_OBJECT(encoder), + "threads", webrtc->ini.vpxenc_params.threads, + "end-usage", webrtc->ini.vpxenc_params.end_usage, + "cpu-used", webrtc->ini.vpxenc_params.cpu_used, + "target-bitrate", webrtc->ini.vpxenc_params.target_bitrate, + "keyframe-max-dist", webrtc->ini.vpxenc_params.keyframe_max_dist, + "max-quantizer", webrtc->ini.vpxenc_params.max_quantizer, + "min-quantizer", webrtc->ini.vpxenc_params.min_quantizer, + "undershoot", webrtc->ini.vpxenc_params.undershoot, + NULL); + } + g_free(encoder_name); + + return encoder; +} + static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source, bool need_capsfilter, GList **element_list, bool is_audio) { GstElement *encoder = NULL; @@ -862,9 +903,7 @@ static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source GstElement *videocrop; GstCaps *sink_caps; element_info_s elem_info; - const gchar *encoder_klass_name; gchar *media_type = NULL; - gchar *encoder_name = NULL; int payload_id; int idx; @@ -872,8 +911,6 @@ static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL"); RET_VAL_IF(element_list == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "element_list is NULL"); - encoder_klass_name = is_audio ? GST_KLASS_NAME_ENCODER_AUDIO : GST_KLASS_NAME_ENCODER_VIDEO; - idx = GET_AV_IDX(is_audio); if (need_capsfilter) { @@ -910,35 +947,13 @@ static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source APPEND_ELEMENT(*element_list, videocrop); } - if (source->zerocopy_enabled) - encoder = __get_hw_encoder_element(webrtc, source); - else - CREATE_ELEMENT_FROM_REGISTRY(elem_info, encoder_klass_name, - __make_default_raw_caps(source, &webrtc->ini), - __make_default_encoded_caps(source, &webrtc->ini, NULL), - webrtc->ini.general.gst_excluded_elements, - encoder); + encoder = __prepare_encoder(webrtc, source, is_audio); if (encoder == NULL) { __remove_probe_from_pad_for_render(source, idx); return WEBRTC_ERROR_INVALID_OPERATION; } APPEND_ELEMENT(*element_list, encoder); - encoder_name = gst_element_get_name(encoder); - if (g_strrstr(encoder_name, "vp8enc") || g_strrstr(encoder_name, "vp9enc")) { - g_object_set(G_OBJECT(encoder), - "threads", webrtc->ini.vpxenc_params.threads, - "end-usage", webrtc->ini.vpxenc_params.end_usage, - "cpu-used", webrtc->ini.vpxenc_params.cpu_used, - "target-bitrate", webrtc->ini.vpxenc_params.target_bitrate, - "keyframe-max-dist", webrtc->ini.vpxenc_params.keyframe_max_dist, - "max-quantizer", webrtc->ini.vpxenc_params.max_quantizer, - "min-quantizer", webrtc->ini.vpxenc_params.min_quantizer, - "undershoot", webrtc->ini.vpxenc_params.undershoot, - NULL); - } - g_free(encoder_name); - source->av[idx].render.need_decoding = false; skip_encoder: