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;
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);
}
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,