From: Sangchul Lee Date: Wed, 9 Jun 2021 02:32:30 +0000 (+0900) Subject: webrtc_source: Revise source pipeline to support to get data with encoded format... X-Git-Tag: submit/tizen/20210729.023123~46 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bf0a5dfb5cacf82a505b17ece0685c8ab81bfeb1;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source: Revise source pipeline to support to get data with encoded format directly [Version] 0.2.16 [Issue Type] Improvement Change-Id: Ib8c122a29e7b0f40e75c27a370308bd395a98b3e Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 359e22ca..370e0f16 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.15 +Version: 0.2.16 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index 1e7cb7aa..5fab90fb 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -645,10 +645,24 @@ static GstElement *__get_hw_encoder_element(webrtc_s *webrtc, webrtc_gst_slot_s return NULL; } +static bool __is_encoded_format_supported(webrtc_media_source_type_e type, webrtc_ini_s *ini) +{ + ini_item_media_source_s *ini_source; + + RET_VAL_IF(ini == NULL, NULL, "ini is NULL"); + + ini_source = _ini_get_source_by_type(ini, type); + if (ini_source == NULL) + ini_source = &ini->media_source; + + LOG_DEBUG("type[%d], v_encoded_fmt_support[%d]", type, ini_source->v_encoded_fmt_support); + return ini_source->v_encoded_fmt_support; +} + static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source, bool need_capsfilter, GList **element_list) { GstElement *capsfilter = NULL; - GstElement *encoder; + GstElement *encoder = NULL; GstElement *payloader; GstElement *queue; GstElement *capsfilter2; @@ -667,6 +681,16 @@ static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source LOG_ERROR("failed to create capsfilter"); return WEBRTC_ERROR_INVALID_OPERATION; } + + if (__is_encoded_format_supported(source->type, &webrtc->ini)) { + if ((sink_caps = __make_default_encoded_caps(source, &webrtc->ini, NULL))) { + PRINT_CAPS(sink_caps, "capsfilter"); + g_object_set(G_OBJECT(capsfilter), "caps", sink_caps, NULL); + gst_caps_unref(sink_caps); + } + goto skip_encoder; + } + if ((sink_caps = __make_default_raw_caps(source, &webrtc->ini))) { PRINT_CAPS(sink_caps, "capsfilter"); g_object_set(G_OBJECT(capsfilter), "caps", sink_caps, NULL); @@ -706,6 +730,7 @@ static int __create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source } g_free(encoder_name); +skip_encoder: CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_PAYLOADER_RTP, __make_default_encoded_caps(source, &webrtc->ini, &media_type), NULL,