return WEBRTC_ERROR_INVALID_OPERATION;
}
-void _remove_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *source, bool is_audio)
+void _remove_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *source)
{
- GstBin *bin;
- GstElement *queue;
- GstElement *payloader;
- GstElement *capsfilter;
- GstElement *fakesink;
- GList *element_list = NULL;
- int av_idx = GET_AV_IDX(is_audio);
+ GstBin *bin = NULL;
+ GstIterator *iter = NULL;
+ GstIteratorResult result;
+ GValue value = { 0 };
+ GstElement *elem = NULL;
RET_IF(source == NULL, "pad is NULL");
- RET_IF(source->webrtc == NULL, "webrtc is NULL");
RET_IF(source->filesrc_pipeline == NULL, "filesrc_pipeline is NULL");
bin = GST_BIN(source->filesrc_pipeline);
- if ((queue = gst_bin_get_by_name(bin, _get_element_name(av_idx, ELEMENT_QUEUE))))
- APPEND_ELEMENT(element_list, queue);
- else
- LOG_ERROR("queue is NULL");
+ iter = gst_bin_iterate_elements(bin);
+
+ do {
+ switch ((result = gst_iterator_next (iter, &value))) {
+ case GST_ITERATOR_OK:
+ elem = (GstElement *) g_value_get_object(&value);
+ if (!g_strrstr(GST_ELEMENT_NAME(elem), ELEMENT_NAME_FILE_SRC) && !g_strrstr(GST_ELEMENT_NAME(elem), "decodebin"))
+ gst_bin_remove(bin, elem);
+ g_value_unset (&value);
+ break;
- if ((payloader = gst_bin_get_by_name(bin, _get_element_name(av_idx, ELEMENT_PAYLOADER))))
- APPEND_ELEMENT(element_list, payloader);
- else
- LOG_ERROR("payloader is NULL");
+ case GST_ITERATOR_RESYNC:
+ gst_iterator_resync(iter);
+ break;
- if ((capsfilter = gst_bin_get_by_name(bin, _get_element_name(av_idx, ELEMENT_CAPSFILTER))))
- APPEND_ELEMENT(element_list, capsfilter);
- else
- LOG_ERROR("capsfilter is NULL");
+ case GST_ITERATOR_ERROR:
+ LOG_ERROR("error in iterating elements");
+ break;
- if ((fakesink = gst_bin_get_by_name(bin, _get_element_name(av_idx, ELEMENT_FAKESINK))))
- APPEND_ELEMENT(element_list, fakesink);
- else
- LOG_ERROR("fakesink is NULL");
+ case GST_ITERATOR_DONE:
+ break;
- _remove_elements_from_bin(bin, element_list);
+ default:
+ break;
+ }
+ } while (result == GST_ITERATOR_OK || result == GST_ITERATOR_RESYNC);
- SAFE_G_LIST_FREE(element_list);
+ gst_iterator_free(iter);
}
static gboolean __filesrc_pipeline_bus_watch_cb(GstBus *bus, GstMessage *message, gpointer user_data)