void EntradaVideo::crea(int k, GstElement *pipeline, const char* type, QSize resolucio, int framerate) { //Elements de font d'entrada QString ssource("_source_%1"), ssink("_sink_%1"); creacomuns(k,"video"); creatransformadors(k); source = gst_element_factory_make(type, (char*)ssource.prepend("video").arg(k).toStdString().c_str()); sink = gst_element_factory_make("xvimagesink", (char*)ssink.prepend("video").arg(k).toStdString().c_str()); //Comprovem que s'han pogut crear tots els elements d'entrada if(!source || !sink){ g_printerr ("Un dels elements de l'entrada de vĂdeo no s'ha pogut crear. Sortint.\n"); } //Afegim tots els elements al bin corresponent gst_bin_add_many (GST_BIN (bin), source, tee, queue, color_conv, scale, sink, queue_mix, scale_mix, NULL); //Afegim els bin al pipeline gst_bin_add (GST_BIN (pipeline), bin); //Linkem els elements caps = gst_caps_new_simple ("video/x-raw-yuv", "width", G_TYPE_INT, resolucio.width(), "height", G_TYPE_INT, resolucio.height(), "framerate", GST_TYPE_FRACTION,framerate, 1, NULL); link_elements_with_filter (source,tee,caps); gst_element_link_many (tee, queue, scale, sink, NULL); }
int init_audio(CustomData *data, guint decknumber, int autoconnect) { data->duration = GST_CLOCK_TIME_NONE; /* Create the elements */ data->pipeline = gst_pipeline_new("test"); data->uridecodebin = create_gst_element ("uridecodebin", "uri_decodebin"); data->audioconvert = create_gst_element ("audioconvert", "audio_convert"); data->audioresample = create_gst_element ("audioresample", "audio_resample"); data->jackaudiosink = create_gst_element ("jackaudiosink", "jack_audiosink"); if (!data->pipeline || !data->uridecodebin || !data->audioresample || !data->jackaudiosink) { g_printerr ("Not all elements could be created.\n"); return 1; } gst_bin_add_many (GST_BIN (data->pipeline), data->uridecodebin, data->audioconvert, data->audioresample, data->jackaudiosink, NULL); { /* settings that control interaction with jackd */ gchar *name; name = g_strdup_printf("player-%u", decknumber); g_object_set (data->jackaudiosink, "client-name", name, NULL); g_free (name); /* connect : Specify how the output ports will be connected Enum "GstJackConnect" Default: 1, "auto" (0): none - Don't automatically connect ports to physical ports (1): auto - Automatically connect ports to physical ports (2): auto-forced - Automatically connect ports to as many physical ports as possible */ g_object_set (data->jackaudiosink, "connect", autoconnect, NULL); } if (TRUE != gst_element_link_many (data->audioresample, data->jackaudiosink, NULL)) { g_printerr ("Problems linking bins\n"); exit (1); } /* Force the pipe to stereo */ if (TRUE != link_elements_with_filter (data->audioconvert, data->audioresample)) { exit (1); } /* Connect to the pad-added signal */ g_signal_connect (data->uridecodebin, "pad-added", G_CALLBACK (pad_added_handler), data); return 0; }