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); }
bool TrainingsTageBuch::open(QStringList &errors) { // get a session token, then get the settings for the account printd("TrainingStageBuch::open\n"); // GET ACCOUNT SETTINGS QString username = getSetting(GC_TTBUSER).toString(); QString password = getSetting(GC_TTBPASS).toString(); #if QT_VERSION > 0x050000 QUrlQuery urlquery; #else QUrl urlquery( TTB_URL + "/settings/list" ); #endif urlquery.addQueryItem( "view", "xml" ); urlquery.addQueryItem( "user", username ); urlquery.addQueryItem( "pass", password ); #if QT_VERSION > 0x050000 QUrl url (TTB_URL + "/settings/list"); url.setQuery(urlquery.query()); QNetworkRequest request = QNetworkRequest(url); #else QNetworkRequest request = QNetworkRequest(urlquery); #endif request.setRawHeader( "Accept-Encoding", "identity" ); request.setRawHeader( "Accept", "application/xml" ); request.setRawHeader( "Accept-Charset", "utf-8" ); // block waiting for response... QEventLoop loop; reply = nam->get(request); connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); TTBSettingsParser handler; QXmlInputSource source(reply); QXmlSimpleReader reader; reader.setContentHandler(&handler); if(! reader.parse(source) ){ errors << (tr("failed to parse Settings response: ")+handler.errorString()); return false; } if( handler.error.length() > 0 ){ errors << (tr("failed to get settings: ") +handler.error); return false; } sessionId = handler.session; proMember = handler.pro; // if we got a session id, no need to go further. if(sessionId.length() > 0) return true; // GET SESSION TOKEN #if QT_VERSION > 0x050000 urlquery = QUrlQuery(); #else urlquery = QUrl(TTB_URL + "/login/sso"); #endif urlquery.addQueryItem( "view", "xml" ); urlquery.addQueryItem( "user", username ); urlquery.addQueryItem( "pass", password ); #if QT_VERSION > 0x050000 url = QUrl(TTB_URL + "/login/sso"); url.setQuery(urlquery.query()); request = QNetworkRequest(url); #else request = QNetworkRequest(urlquery); #endif request.setRawHeader( "Accept-Encoding", "identity" ); request.setRawHeader( "Accept", "application/xml" ); request.setRawHeader( "Accept-Charset", "utf-8" ); // block waiting for response reply = nam->get(request); connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); TTBSessionParser shandler; QXmlInputSource ssource(reply); reader.setContentHandler(&shandler); if(! reader.parse(ssource)) { errors << (tr("failed to parse Session response: ")+shandler.errorString()); return false; } if(handler.error.length() > 0){ errors << (tr("failed to get new session: ") +shandler.error ); return false; } sessionId = shandler.session; if(sessionId.length() == 0){ errors << (tr("got empty session")); return false; } // SUCCESS return true; }
void EntradaFitxer::crea(int k, GstElement *pipeline, QString nom_fitxer) { //Elements de font d'entrada de fitxer QString sbin("bin_font%1"), ssource("source_%1"), sdec("decoder%1"), svolumen_m("volumen_mix%1"), squeue("audio_queue%1"); QString saconv("audio_conv_%1"), sabin("bin_audio_%1"), sconv("video_conv_%1"), ssink("video_sink_%1"); //Creem entrada de fitxer i el decodebin, els afegim al pipeline i els linkem. bin_font = gst_bin_new ((char*)sbin.arg(k).toStdString().c_str()); source = gst_element_factory_make ("filesrc", (char*)ssource.arg(k).toStdString().c_str()); dec = gst_element_factory_make ("decodebin2", (char*)sdec.arg(k).toStdString().c_str()); //Comprovem que s'han pogut crear tots els elements d'entrada if(!bin_font || !source || !dec){ g_printerr ("Un dels elements de l'entrada de fitxer no s'ha pogut crear. Sortint.\n"); } g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad_audio), this); g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad_video), this); gst_bin_add_many (GST_BIN (bin_font), source, dec, NULL); gst_element_link (source, dec); //Creem l'entrada d'àudio a.bin = gst_bin_new ((char*)sabin.arg(k).toStdString().c_str()); conv_audio = gst_element_factory_make("audioconvert", (char*)saconv.arg(k).toStdString().c_str()); audiopad = gst_element_get_static_pad (conv_audio, "sink"); a.queue_mix= gst_element_factory_make("queue2", (char*)squeue.arg(k).toStdString().c_str()); a.volume_mix = gst_element_factory_make("volume", (char*)svolumen_m.arg(k).toStdString().c_str()); //Comprovem que s'han pogut crear tots els elements d'entrada if(!a.bin || !conv_audio || !audiopad || !a.queue_mix || !a.volume_mix){ g_printerr ("Un dels elements de l'entrada de fitxer d'àudio no s'ha pogut crear. Sortint.\n"); } gst_bin_add_many (GST_BIN (a.bin), conv_audio, a.queue_mix, a.volume_mix, NULL); gst_element_link_many (conv_audio, a.queue_mix, a.volume_mix, NULL); gst_element_add_pad (a.bin, gst_ghost_pad_new ("sink", audiopad)); gst_object_unref (audiopad); gst_bin_add (GST_BIN (bin_font), a.bin); //Creem l'entrada de vídeo v.creacomuns(k,"video_fitxer"); v.creatransformadors(k); conv_video = gst_element_factory_make ("ffmpegcolorspace", (char*)sconv.arg(k).toStdString().c_str()); videopad = gst_element_get_static_pad (conv_video, "sink"); v.sink = gst_element_factory_make ("xvimagesink", (char*)ssink.arg(k).toStdString().c_str()); //Comprovem que s'han pogut crear tots els elements d'entrada if( !videopad || !conv_video || !v.sink){ g_printerr ("Un dels elements de l'entrada de fitxer de vídeo no s'ha pogut crear. Sortint.\n"); } gst_bin_add_many (GST_BIN (v.bin), conv_video, v.tee, v.queue, v.scale, v.sink, v.queue_mix, v.color_conv, v.scale_mix, NULL); gst_element_link_many (conv_video, v.tee, v.queue, v.scale, v.sink, NULL); gst_element_add_pad (v.bin, gst_ghost_pad_new ("sink", videopad)); gst_object_unref (videopad); gst_bin_add (GST_BIN (bin_font), v.bin); //Seleccionem el fitxer d'entrada const char *c_nom_fitxer = nom_fitxer.toStdString().c_str(); g_object_set (G_OBJECT (source), "location", c_nom_fitxer, NULL); gst_element_set_state(v.sink, GST_STATE_READY); //Afegim el bin_video_pgm al pipeline gst_bin_add (GST_BIN (pipeline),bin_font); }