All pastes #825697 Raw Edit

Anonymous

public text v1 · immutable
#825697 ·published 2007-12-20 19:19 UTC
rendered paste body
#include <gst/gst.h>


GstElement *pipeline, *source, *parser, *decoder, *conv, *sink, *tee, *encoder, *fsink, *scale;

static void
new_pad (GstElement *element,
	 GstPad     *pad,
	 gpointer    data)
{
  GstPad *sinkpad;
  gchar* name;

  name = gst_pad_get_name(pad);  

  if(!strncmp(name, "video", 5))
  {
     sinkpad = gst_element_get_pad (decoder, "sink");
     gst_pad_link (pad, sinkpad);
     gst_object_unref (sinkpad);
     g_print("video pad linked\n");
  }
}

int
main (int   argc,
      char *argv[])
{
  GMainLoop *loop;

  gst_init (&argc, &argv);
  
  loop = g_main_loop_new (NULL, FALSE);

  pipeline = gst_pipeline_new ("player");
  source = gst_element_factory_make ("filesrc", "file-source");
  parser = gst_element_factory_make ("mpegdemux", "mpegdemuxer");
  decoder = gst_element_factory_make ("mpeg2dec", "decoder");
  conv = gst_element_factory_make ("ffmpegcolorspace", "converter");
  scale = gst_element_factory_make ("videoscale", "vscale");
  sink = gst_element_factory_make ("xvimagesink", "output");

  g_object_set (G_OBJECT (source), "location", argv[1], NULL);

  gst_bin_add_many (GST_BIN (pipeline),
		    source, parser, decoder, conv, scale, sink, NULL);

  if(!gst_element_link (source, parser))
       g_print("source->parser failed\n");
  if(!gst_element_link (decoder, conv))
       g_print("decoder->conv failed\n");
  if(!gst_element_link(conv, scale))
       g_print("conv->scale failed\n");

  caps1 = gst_caps_new_simple("video/x-raw-rgb",
			       "width", G_TYPE_INT, 176,
                               "height", G_TYPE_INT, 144, NULL);
  if(!gst_element_link_filtered(scale, sink, caps1))
       g_print("scale->sink failed\n");

  g_signal_connect (parser, "pad-added", G_CALLBACK (new_pad), NULL);

  gst_element_set_state (pipeline, GST_STATE_PLAYING);
  g_main_loop_run (loop);

  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (GST_OBJECT (pipeline));

  return 0;
}