+ 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* datab = malloc(sizeof(struct bus_call_param));
+ if(!datab) {
+ g_printerr("Memory error\n");
+ return NULL;
+ }
+ datab->loop = loop;
+ datab->sval = sval;
+ datab->cond = cond;
+ datab->mutex = mutex;
+ gst_bus_add_watch(bus, bus_call, datab);
+ 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);
+
+ struct play_file_param* datap = malloc(sizeof(struct play_file_param));
+ if(datap) {
+ datap->pipeline = pipeline;
+ datap->source = source;
+ datap->sval = sval;
+ datap->cond = cond;
+ datap->mutex = mutex;
+ datap->queue = queue;
+ datap->media_d = media_d;
+ g_thread_create(player, datap, 0, NULL);
+ } else {
+ g_printerr("Memory Error\n");
+ return NULL;