return WEBRTC_ERROR_NONE;
}
+static int __complete_rest_of_mediapacketsrc(webrtc_gst_slot_s *source, GstPad **src_pad, GstElement *appsrc, GList *element_list)
+{
+ int ret;
+ GstElement *capsfilter;
+
+ RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
+ RET_VAL_IF(src_pad == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "src_pad is NULL");
+ RET_VAL_IF(appsrc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "appsrc is NULL");
+ RET_VAL_IF(element_list == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "element_list is NULL");
+ RET_VAL_IF(source->bin == NULL, WEBRTC_ERROR_INVALID_OPERATION, "bin is NULL");
+
+ if (!__add_elements_to_bin(source->bin, element_list))
+ return WEBRTC_ERROR_INVALID_OPERATION;
+
+ PREPEND_ELEMENT(element_list, appsrc);
+ if (!__link_elements(element_list)) {
+ ret = WEBRTC_ERROR_INVALID_OPERATION;
+ goto error;
+ }
+
+ if (!(capsfilter = gst_bin_get_by_name(source->bin, ELEMENT_NAME_RTP_CAPSFILTER))) {
+ ret = WEBRTC_ERROR_INVALID_OPERATION;
+ goto error;
+ }
+
+ if ((ret = _set_ghost_pad_target(*src_pad, capsfilter, true)) != WEBRTC_ERROR_NONE)
+ goto error;
+
+ return ret;
+
+error:
+ __remove_elements_from_bin(source->bin, element_list);
+ return ret;
+}
+
static int __complete_mediapacketsrc_from_raw_format(webrtc_s *webrtc, webrtc_gst_slot_s *source)
{
- int ret = WEBRTC_ERROR_NONE;
+ int ret;
GstPad **src_pad;
GstElement *appsrc;
- GstElement *capsfilter;
GList *element_list = NULL;
- GList *element_list2 = NULL;
GstCaps *sink_caps;
RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
goto exit;
}
PRINT_CAPS(sink_caps, "appsrc");
-
g_object_set(G_OBJECT(appsrc), "caps", sink_caps, NULL);
gst_caps_unref(sink_caps);
- if (!__add_elements_to_bin(source->bin, element_list)) {
- SAFE_G_LIST_FREE(element_list);
- return WEBRTC_ERROR_INVALID_OPERATION;
- }
-
- element_list2 = g_list_copy(element_list);
- PREPEND_ELEMENT(element_list2, appsrc); /* element_list2 has appsrc */
- if (!__link_elements(element_list2)) {
- ret = WEBRTC_ERROR_INVALID_OPERATION;
- goto exit_with_remove_from_bin;
- }
-
- if (!(capsfilter = gst_bin_get_by_name(source->bin, ELEMENT_NAME_RTP_CAPSFILTER))) {
- ret = WEBRTC_ERROR_INVALID_OPERATION;
- goto exit_with_remove_from_bin;
- }
-
- SAFE_G_LIST_FREE(element_list);
- SAFE_G_LIST_FREE(element_list2);
-
- return _set_ghost_pad_target(*src_pad, capsfilter, true);
+ if ((ret = __complete_rest_of_mediapacketsrc(source, src_pad, appsrc, element_list)) != WEBRTC_ERROR_NONE)
+ goto exit;
-exit_with_remove_from_bin:
- __remove_elements_from_bin(source->bin, element_list);
SAFE_G_LIST_FREE(element_list);
- SAFE_G_LIST_FREE(element_list2);
return ret;
+
exit:
SAFE_G_LIST_FREE_FULL(element_list, gst_object_unref);
return ret;
//LCOV_EXCL_START
static int __complete_mediapacketsrc_from_encoded_format(webrtc_s *webrtc, webrtc_gst_slot_s *source)
{
- int ret = WEBRTC_ERROR_NONE;
+ int ret;
GstPad **src_pad;
GstElement *appsrc;
- GstElement *capsfilter;
GList *element_list = NULL;
- GList *element_list2 = NULL;
GstCaps *sink_caps;
RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
goto exit;
}
PRINT_CAPS(sink_caps, "appsrc");
-
g_object_set(G_OBJECT(appsrc), "caps", sink_caps, NULL);
gst_caps_unref(sink_caps);
- if (!__add_elements_to_bin(source->bin, element_list)) {
- SAFE_G_LIST_FREE(element_list);
- return WEBRTC_ERROR_INVALID_OPERATION;
- }
-
- element_list2 = g_list_copy(element_list);
- PREPEND_ELEMENT(element_list2, appsrc); /* element_list2 has appsrc */
- if (!__link_elements(element_list2)) {
- ret = WEBRTC_ERROR_INVALID_OPERATION;
- goto exit_with_remove_from_bin;
- }
-
- if (!(capsfilter = gst_bin_get_by_name(source->bin, ELEMENT_NAME_RTP_CAPSFILTER))) {
- ret = WEBRTC_ERROR_INVALID_OPERATION;
- goto exit_with_remove_from_bin;
- }
-
- SAFE_G_LIST_FREE(element_list);
- SAFE_G_LIST_FREE(element_list2);
-
- return _set_ghost_pad_target(*src_pad, capsfilter, true);
+ if ((ret = __complete_rest_of_mediapacketsrc(source, src_pad, appsrc, element_list)) != WEBRTC_ERROR_NONE)
+ goto exit;
-exit_with_remove_from_bin:
- __remove_elements_from_bin(source->bin, element_list);
SAFE_G_LIST_FREE(element_list);
- SAFE_G_LIST_FREE(element_list2);
return ret;
+
exit:
SAFE_G_LIST_FREE_FULL(element_list, gst_object_unref);
return ret;