Example #1
0
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);
}
Example #2
0
void AudioPGM::crea(int k, GstElement *pipeline){

    QString smixer("audiomixer_%1"), ssink("pgm_sink_%1");

    creacomuns(k,"audiomixer");
    mixer =    gst_element_factory_make("adder" ,       (char*)smixer.arg(k).toStdString().c_str());
    volum =    gst_element_factory_make("volume",       "volum_pgm");
    level =    gst_element_factory_make("level",        "level_pgm");
    sink =     gst_element_factory_make("autoaudiosink",(char*)ssink.arg(k).toStdString().c_str());

    //Comprovem que s'han pogut crear tots els elements
    if (!mixer || !volum || !level || !sink) {
       g_printerr ("Un dels elements d'AudioPGM no s'ha pogut crear. Sortint.\n");
    }

    GstCaps *caps;
    caps = gst_caps_new_simple ("audio/x-raw-int","rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 2, NULL);
    g_object_set(G_OBJECT(mixer),"caps",caps, NULL);
    g_object_set (G_OBJECT (level), "interval",100000000,"message", TRUE, NULL);

    //Afegim tots els elements al bin_pgm corresponent
    gst_bin_add_many (GST_BIN (bin), mixer, tee, queue, queue_mix, volum, level, sink, NULL);

    //Afegim el bin_pgm al pipeline
    gst_bin_add (GST_BIN (pipeline),bin);

    //Linkem els elements
    gst_element_link_many(mixer, tee, queue, volum, level, sink, NULL);
    gst_element_link(tee, queue_mix);
}
Example #3
0
void VideoPGM::crea(int k, GstElement *pipeline){

    QString smixer("videomixer_%1"), ssink("pgm_sink_%1");

    creacomuns(k,"videomixer");
    mixer =         gst_element_factory_make("videomixer" , (char*)smixer.arg(k).toStdString().c_str());
    color_conv =    gst_element_factory_make("ffmpegcolorspace","color_converer_pgm");
    textoverlay =   gst_element_factory_make("textoverlay", "textoverlay");
    sink =          gst_element_factory_make("xvimagesink", (char*)ssink.arg(k).toStdString().c_str());

    //Comprovem que s'han pogut crear tots els elements
    if (!mixer || !color_conv || !textoverlay || !sink) {
       g_printerr ("Un dels elements de videoPGM no s'ha pogut crear. Sortint.\n");
    }

    g_object_set(G_OBJECT(textoverlay),"silent",true, NULL);

    //Afegim tots els elements al bin_pgm corresponent
    gst_bin_add_many (GST_BIN (bin), mixer, color_conv, textoverlay, tee, queue, queue_mix, sink, NULL);

    //Afegim el bin_pgm al pipeline
    gst_bin_add (GST_BIN (pipeline),bin);

    //Linkem els elements
    gst_element_link_many(mixer, color_conv, textoverlay, tee, queue, sink, NULL);
    gst_element_link(tee, queue_mix);
}
Example #4
0
void uncompress(std::istream &in, std::ostream &out) {
  while (in) {
    int32_t uncompress_size = rawReadInt(in);
    if (uncompress_size == 0) {
      // empty block
      rawReadInt(in);
      continue;
    } else if (uncompress_size < 0) {
      // end of file
      break;
    }

    int32_t compress_size = rawReadInt(in);
    StreamSource ssrc(in, compress_size);
    StreamSink ssink(out);
    snappy::Uncompress(&ssrc, &ssink);
  }
}
Example #5
0
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);
}