webrtc_source: Revise source pipeline to support to get data with encoded format... 89/259489/5
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 9 Jun 2021 02:32:30 +0000 (11:32 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 18 Jun 2021 05:33:20 +0000 (14:33 +0900)
[Version] 0.2.16
[Issue Type] Improvement

Change-Id: Ib8c122a29e7b0f40e75c27a370308bd395a98b3e
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-webrtc.spec
src/webrtc_source.c

index 359e22cab257bd094f591bb4014ac7280fccf741..370e0f165f05afa7d173fa00e8ce93db61bf9cfa 100644 (file)
@@ -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
index 1e7cb7aa57141ee70f3fd900cd49f0490d26972e..5fab90fb36e0d9991649398b82100730d31f6566 100644 (file)
@@ -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,