- GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink;
- GstBus *bus;
+ if (!pipeline || !(*source) || !demuxer || !decoder || !conv || !sink) {
+ g_printerr("One element could not be created. Exiting.\n");
+ return NULL;
+ }
+
+ GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE (pipeline));
+ struct bus_call_param* data = malloc(sizeof(struct bus_call_param));
+ if(!data) {
+ g_printerr("Memory error\n");
+ return NULL;
+ }
+ data->loop = loop;
+ data->sval = sval;
+ data->cond = cond;
+ data->mutex = mutex;
+ gst_bus_add_watch(bus, bus_call, data);
+ gst_object_unref(bus);
+
+ gst_bin_add_many(GST_BIN(pipeline), *source, demuxer, decoder, conv, sink, NULL);
+
+ gst_element_link(*source, demuxer);
+ gst_element_link_many(decoder, conv, sink, NULL);
+ g_signal_connect(demuxer, "pad-added", G_CALLBACK(on_pad_added), decoder);