<p>Thanks <b>Alan Carvalho de Assis</b>,<br>
Your example did a lot of help to build a gstreamer pipeline. I wanted to create the following pipeline.: </p>
<b>GstLaunch1.4.5Test.exe -v rtspsrc location=rtsp://192.168.1.16:8554/test ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! d3dvideosink sync=false</b><br>
I have created this by seeing your example. I have opened it's output in Qt window. My code is as below in case someone need it. Thanks,


<pre>
#include <glib.h>
#include <gst/gst.h>
#include <gst/video/videooverlay.h>
#include <QApplication>
#include <QTimer>
#include <QWidget>
#include <stdio.h>
static void on_pad_added (GstElement *element, GstPad *pad, gpointer data);
static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data);
int main(int argc, char *argv[])
{
  

  if (!g_thread_supported ())
    g_thread_init (NULL);

  /* Initialize GStreamer */

  gst_init (&argc, &argv);
  QApplication app(argc, argv);
  app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit ()));

  /* Creating Elements */

  //GstElement *pipeLine = gst_pipeline_new ("xvoverlay");
  QWidget window;
  window.resize(1024,768);
  WId xwinid=window.winId();
  
  GMainLoop *loop;

  GstElement *pipeLine, *rtspSrc, *rtpJitterBuffer, *rtpH264Depay, *avDecH264, *videoSink;

  rtspSrc =  gst_element_factory_make("rtspsrc", NULL);

  rtpJitterBuffer =  gst_element_factory_make("rtpjitterbuffer", NULL);

  rtpH264Depay =  gst_element_factory_make("rtph264depay", NULL);

  avDecH264 = gst_element_factory_make("avdec_h264", NULL);

  videoSink =  gst_element_factory_make("d3dvideosink", NULL);

  loop = g_main_loop_new (NULL, FALSE); 

  if (!rtspSrc || !rtpJitterBuffer || !rtpH264Depay || !avDecH264 || !videoSink) 
  {
        g_printerr ("Not all elements could be created.\n");
        return -1;
  }
  

  /* Set element properties */

   g_object_set( rtspSrc, "location", "rtsp://192.168.1.16:8554/test" , NULL);
   g_object_set( videoSink, "sync", false, NULL);
  
   /*Initializing Pipeline*/

   pipeLine = gst_pipeline_new ("TestPipeLine");

   if (!pipeLine) 
   {
           g_printerr ("Pipeline could not be created.");
   }

   /* we add a message handler */ 
  GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipeLine)); 
  gst_bus_add_watch (bus, bus_call, loop); 
  gst_object_unref (bus); 


   /*Adding Components to the pipeline */

   gst_bin_add_many (GST_BIN(pipeLine),
                        rtspSrc,
                                                rtpJitterBuffer,
                        rtpH264Depay,
                        avDecH264,
                        videoSink,
                        NULL);
   if (gst_element_link (rtpJitterBuffer, rtpH264Depay) != TRUE) 
   {
        g_printerr ("rtpJitterBuffer and rtpH264Depay could not be linked.\n");
        gst_object_unref (pipeLine);
        return -1;
   }
   
   if (gst_element_link (rtpH264Depay, avDecH264) != TRUE) 
   {
        g_printerr ("rtpH264Depay and avDecH264 could not be linked.\n");
        gst_object_unref (pipeLine);
        return -1;
   }
   if (gst_element_link (avDecH264, videoSink) != TRUE) 
   {
        g_printerr ("avDecH264 and videoSink could not be linked.\n");
        gst_object_unref (pipeLine);
        return -1;
   }

   g_signal_connect (rtspSrc, "pad-added", G_CALLBACK (on_pad_added), rtpJitterBuffer);
   
  // else
        //   g_printerr("Pipeline created");
   gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY(videoSink), guintptr(xwinid));
   window.show();
   /* Set the pipeline to "playing" state*/ 
  g_print ("Now playing: %s\n", argv[1]); 
 
  gst_element_set_state (pipeLine, GST_STATE_PLAYING); 
        
  app.exec(); //Qt app execution
  
  
  /* Iterate */ 
  //g_print ("Running...\n"); 
  g_main_loop_run (loop); 
  

  /* Out of the main loop, clean up nicely */ 
  g_print ("Returned, stopping playback\n"); 
  gst_element_set_state (pipeLine, GST_STATE_NULL); 
  
  g_print ("Deleting pipeline\n"); 
  gst_object_unref (GST_OBJECT (pipeLine)); 

  return 0; 

}

static void on_pad_added (GstElement *element, GstPad *pad, gpointer data) 

  GstPad *sinkpad; 
  GstElement *decoder = (GstElement *) data; 

  /* We can now link this pad with the vorbis-decoder sink pad */ 
  g_print ("Dynamic pad created, linking demuxer/decoder\n"); 

  sinkpad = gst_element_get_static_pad (decoder, "sink"); 

  gst_pad_link (pad, sinkpad); 

  gst_object_unref (sinkpad); 


static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data) 

  GMainLoop *loop = (GMainLoop *) data; 

  switch (GST_MESSAGE_TYPE (msg)) { 

    case GST_MESSAGE_EOS: 
      g_print ("End of stream\n"); 
      g_main_loop_quit (loop); 
      break; 

    case GST_MESSAGE_ERROR: { 
      gchar  *debug; 
      GError *error; 

      gst_message_parse_error (msg, &error, &debug); 
      g_free (debug); 

      g_printerr ("Error: %s\n", error->message); 
      g_error_free (error); 

      g_main_loop_quit (loop); 
      break; 
    } 
    default: 
      break; 
  } 

  return TRUE; 
} </pre>

        
        
        
<br/><hr align="left" width="300" />
View this message in context: <a href="http://gstreamer-devel.966125.n4.nabble.com/Converting-a-gst-launch-pipeline-to-C-code-tp973812p4672271.html">Re: Converting a gst-launch pipeline to C code</a><br/>
Sent from the <a href="http://gstreamer-devel.966125.n4.nabble.com/">GStreamer-devel mailing list archive</a> at Nabble.com.<br/>