Exemplo n.º 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);
}
Exemplo n.º 2
0
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;
}