<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">  gst_element_link(src,parse);</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">  gst_element_link(dec,sink);</span><div>
<span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Try to replace by :</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">  gst_element_link_many(src, parse, dec, NULL);</span></div>
<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">The callback pad_added is never called because this element isn't linked to the parser.</span></div>
<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Also, use the environment variable GST_DEBUG to get more debug informations. </span><font face="arial, sans-serif"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-checklist-debug.html">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-checklist-debug.html</a></font></div>
<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Another good way to debug, is to generate dot file of the pipeline. See : </span><font face="arial, sans-serif"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE:CAPS">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE:CAPS</a></font></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Feb 5, 2014 at 12:46 PM, aft <span dir="ltr"><<a href="mailto:aftnix@gmail.com" target="_blank">aftnix@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I'm trying to implement the following pipeline in 'C':<br>
<br>
    arif@dev:~/GS_samples/cmd_GS$gst-launch-0.10 filesrc<br>
location="../sample_media/M1F1-Alaw-AFsp.wav" ! wavparse ! alawdec !<br>
autoaudiosink<br>
<br>
<br>
Here is the implementation which i have written<br>
<br>
    #include <gst/gst.h><br>
<br>
    void on_pad_added(GstElement *src_element, GstPad *src_pad, gpointer data);<br>
    static gboolean bus_cb(GstBus *bus, GstMessage *message, gpointer data);<br>
<br>
    static GMainLoop *loop;<br>
<br>
    int main(int argc, char **argv) {<br>
<br>
    GstElement *pipeline;<br>
    GstElement *src;<br>
    GstElement *dec;<br>
    GstElement *parse;<br>
    GstElement *sink;<br>
    GstBus *bus;<br>
<br>
    gst_init(&argc, &argv);<br>
<br>
    loop = g_main_loop_new (NULL, FALSE);<br>
<br>
    pipeline = gst_pipeline_new("wav_player");<br>
<br>
    src = gst_element_factory_make("filesrc","src");<br>
    sink = gst_element_factory_make("autoaudiosink","sink");<br>
    parse = gst_element_factory_make("wavparse","parse");<br>
    dec = gst_element_factory_make("alawdec", "dec");<br>
<br>
    gst_bin_add_many (GST_BIN(pipeline), src,parse,dec,sink, NULL);<br>
    g_object_set( G_OBJECT (src) , "location",argv[1], NULL);<br>
<br>
    gst_element_link(src,parse);<br>
    gst_element_link(dec,sink);<br>
    g_signal_connect (dec, "pad-added", G_CALLBACK (on_pad_added), dec);<br>
<br>
    bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));<br>
    gst_bus_add_watch (bus, bus_cb, NULL);<br>
    gst_object_unref(bus);<br>
    gst_element_set_state(pipeline, GST_STATE_PLAYING);<br>
    g_main_loop_run(loop);<br>
    return 0;<br>
<br>
    }<br>
<br>
    void on_pad_added (GstElement *src_element, GstPad *src_pad, gpointer data)<br>
    {<br>
    g_print ("linking dynamic pad ...\n");<br>
<br>
    GstElement *sink_element = (GstElement *) data;<br>
    GstPad *sink_pad = gst_element_get_static_pad(sink_element, "sink");<br>
    gst_pad_link (src_pad, sink_pad);<br>
    gst_object_unref(sink_pad);<br>
<br>
    }<br>
<br>
    static gboolean bus_cb(GstBus *bus, GstMessage *message, gpointer    data)<br>
    {<br>
      g_print ("Got %s message\n", GST_MESSAGE_TYPE_NAME (message));<br>
<br>
      switch (GST_MESSAGE_TYPE (message)) {<br>
        case GST_MESSAGE_ERROR: {<br>
          GError *err;<br>
          gchar *debug;<br>
<br>
          gst_message_parse_error (message, &err, &debug);<br>
          g_print ("Error: %s\n", err->message);<br>
          g_error_free (err);<br>
          g_free (debug);<br>
<br>
          g_main_loop_quit (loop);<br>
          break;<br>
        }<br>
        case GST_MESSAGE_EOS:<br>
          /* end-of-stream */<br>
          g_main_loop_quit (loop);<br>
          break;<br>
        default:<br>
          /* unhandled message */<br>
          break;<br>
      }<br>
<br>
      /* we want to be notified again the next time there is a message<br>
       * on the bus, so returning TRUE (FALSE means we want to stop watching<br>
       * for messages on the bus and our callback should not be called again)<br>
       */<br>
      return TRUE;<br>
    }<br>
<br>
<br>
But this does not work :<br>
<br>
    arif@dev:~/GS_samples/cmd_GS$./a.out ../sample_media/M1F1-Alaw-AFsp.wav<br>
    Got state-changed message<br>
    Got state-changed message<br>
    Got stream-status message<br>
    Got tag message<br>
    Got error message<br>
    Error: Internal data flow error.<br>
<span class="HOEnZb"><font color="#888888">--<br>
-Cheers<br>
-Arif<br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</font></span></blockquote></div><br></div>