Thank you! Is working now!!!<br><br><div class="gmail_quote">On Wed, Oct 28, 2009 at 6:54 AM, Stefan Kost <span dir="ltr">&lt;<a href="mailto:ensonic@hora-obscura.de">ensonic@hora-obscura.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
hi,<br>
<br>
This is wrong<br>
<div class="im">gst_element_link_many (source, demuxer, decoder, sink,  NULL);<br>
</div>do<br>
<div class="im">gst_element_link(source, demuxer);<br>
</div>gst_element_link(decoder, sink);<br>
you will link demuxer to decoder in the on_pad_added() callback.<br>
<br>
Stefan<br>
<div class="im"><br>
<br>
&gt;<br>
&gt; On Wed, Oct 28, 2009 at 12:12 AM, Gabriel Duarte &lt;<a href="mailto:confusosk8@gmail.com">confusosk8@gmail.com</a><br>
</div><div><div></div><div class="h5">&gt; &lt;mailto:<a href="mailto:confusosk8@gmail.com">confusosk8@gmail.com</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;     sorry, I sent the wrong code, this is the right:<br>
&gt;<br>
&gt;      #include &lt;gst/gst.h&gt;<br>
&gt;     #include &lt;glib.h&gt;<br>
&gt;<br>
&gt;<br>
&gt;     static gboolean<br>
&gt;     cb_print_position (GstElement *pipeline)<br>
&gt;     {<br>
&gt;       GstFormat fmt = GST_FORMAT_TIME;<br>
&gt;       gint64 pos, len;<br>
&gt;<br>
&gt;       if (gst_element_query_position (pipeline, &amp;fmt, &amp;pos)<br>
&gt;         &amp;&amp; gst_element_query_duration (pipeline, &amp;fmt, &amp;len)) {<br>
&gt;         g_print (&quot;Time: %&quot; GST_TIME_FORMAT &quot; / %&quot; GST_TIME_FORMAT &quot;\r&quot;,<br>
&gt;         GST_TIME_ARGS (pos), GST_TIME_ARGS (len));<br>
&gt;       }<br>
&gt;<br>
&gt;       /* call me again */<br>
&gt;       return TRUE;<br>
&gt;     }<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;     static gboolean<br>
&gt;     bus_call (GstBus     *bus,<br>
&gt;               GstMessage *msg,<br>
&gt;               gpointer    data)<br>
&gt;     {<br>
&gt;       GMainLoop *loop = (GMainLoop *) data;<br>
&gt;<br>
&gt;       switch (GST_MESSAGE_TYPE (msg)) {<br>
&gt;<br>
&gt;         case GST_MESSAGE_EOS:<br>
&gt;           g_print (&quot;End of stream\n&quot;);<br>
&gt;           g_main_loop_quit (loop);<br>
&gt;           break;<br>
&gt;<br>
&gt;         case GST_MESSAGE_ERROR: {<br>
&gt;           gchar  *debug;<br>
&gt;           GError *error;<br>
&gt;<br>
&gt;           gst_message_parse_error (msg, &amp;error, &amp;debug);<br>
&gt;           g_free (debug);<br>
&gt;<br>
&gt;           g_printerr (&quot;Error: %s\n&quot;, error-&gt;message);<br>
&gt;           g_error_free (error);<br>
&gt;<br>
&gt;           g_main_loop_quit (loop);<br>
&gt;           break;<br>
&gt;         }<br>
&gt;         default:<br>
&gt;           break;<br>
&gt;       }<br>
&gt;<br>
&gt;       return TRUE;<br>
&gt;     }<br>
&gt;<br>
&gt;<br>
&gt;     static void<br>
&gt;     on_pad_added (GstElement *element,<br>
&gt;                   GstPad     *pad,<br>
&gt;                   gpointer    data)<br>
&gt;     {<br>
&gt;       GstPad *sinkpad;<br>
&gt;       GstElement *decoder = (GstElement *) data;<br>
&gt;<br>
&gt;       /* We can now link this pad with the vorbis-decoder sink pad */<br>
&gt;       g_print (&quot;Dynamic pad created, linking demuxer/decoder\n&quot;);<br>
&gt;<br>
&gt;       sinkpad = gst_element_get_static_pad (decoder, &quot;sink&quot;);<br>
&gt;<br>
&gt;       gst_pad_link (pad, sinkpad);<br>
&gt;<br>
&gt;       gst_object_unref (sinkpad);<br>
&gt;     }<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;     int<br>
&gt;     main (int   argc,<br>
&gt;           char *argv[])<br>
&gt;     {<br>
&gt;       GMainLoop *loop;<br>
&gt;<br>
&gt;       GstElement *pipeline, *source, *demuxer, *decoder, *sink;<br>
&gt;       GstBus *bus;<br>
&gt;<br>
&gt;       /* Initialisation */<br>
&gt;       gst_init (&amp;argc, &amp;argv);<br>
&gt;<br>
&gt;       loop = g_main_loop_new (NULL, FALSE);<br>
&gt;<br>
&gt;<br>
&gt;       /* Check input arguments */<br>
&gt;     /*  if (argc != 2) {<br>
&gt;         g_printerr (&quot;Usage: %s &lt;Ogg/Vorbis filename&gt;\n&quot;, argv[0]);<br>
&gt;         return -1;<br>
&gt;       }*/<br>
&gt;<br>
&gt;     /*gst-launch-0.10 dv1394src num-buffers=8192 ! dvdemux ! dvdec !<br>
&gt;     xvimagesink  sync=false*/<br>
&gt;       /* Create gstreamer elements */<br>
&gt;       pipeline = gst_pipeline_new (&quot;DV_FIREWIRE&quot;);<br>
&gt;       source   = gst_element_factory_make (&quot;dv1394src&quot;,<br>
&gt;     &quot;dv1394src&quot;);<br>
&gt;       demuxer  = gst_element_factory_make (&quot;dvdemux&quot;,      &quot;dvdemux&quot;);<br>
&gt;       decoder  = gst_element_factory_make (&quot;dvdec&quot;,     &quot;dvdec&quot;);<br>
&gt;       sink     = gst_element_factory_make (&quot;ximagesink&quot;, &quot;ximagesink&quot;);<br>
&gt;<br>
&gt;       if (!pipeline || !source || !demuxer || !decoder || !sink) {<br>
&gt;         g_printerr (&quot;One element could not be created. Exiting.\n&quot;);<br>
&gt;         return -1;<br>
&gt;       }<br>
&gt;<br>
&gt;       /* Set up the pipeline */<br>
&gt;<br>
&gt;       /* we set the input filename to the source element */<br>
&gt;       /*g_object_set (G_OBJECT (sink), &quot;sync&quot;, FALSE, NULL);*/<br>
&gt;<br>
&gt;       /* we add a message handler */<br>
&gt;       bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));<br>
&gt;       gst_bus_add_watch (bus, bus_call, loop);<br>
&gt;       gst_object_unref (bus);<br>
&gt;<br>
&gt;       /* we add all elements into the pipeline */<br>
&gt;       /* file-source | ogg-demuxer | vorbis-decoder | converter |<br>
&gt;     alsa-output */<br>
&gt;       gst_bin_add_many (GST_BIN (pipeline), source, demuxer, decoder,<br>
&gt;     sink, NULL);<br>
&gt;<br>
&gt;       /* we link the elements together */<br>
&gt;       /* file-source -&gt; ogg-demuxer ~&gt; vorbis-decoder -&gt; converter -&gt;<br>
&gt;     alsa-output */<br>
&gt;       /*  gst_element_link (source, demuxer);*/<br>
&gt;       gst_element_link_many (source, demuxer, decoder, sink,  NULL);<br>
&gt;       g_signal_connect (demuxer, &quot;pad-added&quot;, G_CALLBACK<br>
&gt;     (on_pad_added), decoder);<br>
&gt;<br>
&gt;       /* note that the demuxer will be linked to the decoder dynamically.<br>
&gt;          The reason is that Ogg may contain various streams (for example<br>
&gt;          audio and video). The source pad(s) will be created at run time,<br>
&gt;          by the demuxer when it detects the amount and nature of streams.<br>
&gt;          Therefore we connect a callback function which will be executed<br>
&gt;          when the &quot;pad-added&quot; is emitted.*/<br>
&gt;<br>
&gt;<br>
&gt;       /* Set the pipeline to &quot;playing&quot; state*/<br>
&gt;       g_print (&quot;Now playing: %s\n&quot;, argv[1]);<br>
&gt;       gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>
&gt;<br>
&gt;<br>
&gt;       /* Iterate */<br>
&gt;       g_print (&quot;Running...\n&quot;);<br>
&gt;       g_timeout_add (200, (GSourceFunc) cb_print_position, pipeline);<br>
&gt;       g_main_loop_run (loop);<br>
&gt;<br>
&gt;<br>
&gt;       /* Out of the main loop, clean up nicely */<br>
&gt;       g_print (&quot;Returned, stopping playback\n&quot;);<br>
&gt;       gst_element_set_state (pipeline, GST_STATE_NULL);<br>
&gt;<br>
&gt;       g_print (&quot;Deleting pipeline\n&quot;);<br>
&gt;       gst_object_unref (GST_OBJECT (pipeline));<br>
&gt;      printf(&quot;THE END\n&quot;);<br>
&gt;       return 0;<br>
&gt;     }<br>
&gt;<br>
&gt;<br>
&gt;     On Tue, Oct 27, 2009 at 8:24 PM, Gabriel Duarte<br>
</div></div><div><div></div><div class="h5">&gt;     &lt;<a href="mailto:confusosk8@gmail.com">confusosk8@gmail.com</a> &lt;mailto:<a href="mailto:confusosk8@gmail.com">confusosk8@gmail.com</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;         hello all, I&#39;m trying to convert this pipeline to C, but I&#39;m<br>
&gt;         having problems....<br>
&gt;<br>
&gt;<br>
&gt;         gst-launch-0.10 dv1394src num-buffers=8192 ! dvdemux ! dvdec !<br>
&gt;         xvimagesink  sync=false<br>
&gt;<br>
&gt;<br>
&gt;         I&#39;ve wrote this code:<br>
&gt;<br>
&gt;<br>
&gt;         #include &lt;string.h&gt; /* for memset () */<br>
&gt;         #include &lt;gst/gst.h&gt;<br>
&gt;<br>
&gt;         static void<br>
&gt;         cb_handoff (GstElement *fakesrc,<br>
&gt;                   GstBuffer  *buffer,<br>
&gt;                   GstPad     *pad,<br>
&gt;                   gpointer    user_data)<br>
&gt;         {<br>
&gt;           static gboolean white = FALSE;<br>
&gt;<br>
&gt;           /* this makes the image black/white */<br>
&gt;           memset (GST_BUFFER_DATA (buffer), white ? 0xff : 0x0,<br>
&gt;                 GST_BUFFER_SIZE (buffer));<br>
&gt;           white = !white;<br>
&gt;         }<br>
&gt;<br>
&gt;         gint<br>
&gt;         main (gint   argc,<br>
&gt;               gchar *argv[])<br>
&gt;         {<br>
&gt;           GstElement *pipeline, *fakesrc, *flt, *conv, *videosink;<br>
&gt;           GMainLoop *loop;<br>
&gt;<br>
&gt;           /* init GStreamer */<br>
&gt;           gst_init (&amp;argc, &amp;argv);<br>
&gt;           loop = g_main_loop_new (NULL, FALSE);<br>
&gt;<br>
&gt;           /* setup pipeline */<br>
&gt;           pipeline = gst_pipeline_new (&quot;pipeline&quot;);<br>
&gt;           fakesrc = gst_element_factory_make (&quot;fakesrc&quot;, &quot;source&quot;);<br>
&gt;           flt = gst_element_factory_make (&quot;capsfilter&quot;, &quot;flt&quot;);<br>
&gt;           conv = gst_element_factory_make (&quot;ffmpegcolorspace&quot;, &quot;conv&quot;);<br>
&gt;           videosink = gst_element_factory_make (&quot;xvimagesink&quot;, &quot;videosink&quot;);<br>
&gt;<br>
&gt;           /* setup */<br>
&gt;           g_object_set (G_OBJECT (flt), &quot;caps&quot;,<br>
&gt;                       gst_caps_new_simple (&quot;video/x-raw-rgb&quot;,<br>
&gt;                                            &quot;width&quot;, G_TYPE_INT, 384,<br>
&gt;                                            &quot;height&quot;, G_TYPE_INT, 288,<br>
&gt;                                            &quot;framerate&quot;, GST_TYPE_FRACTION, 1, 1,<br>
&gt;                                            &quot;bpp&quot;, G_TYPE_INT, 16,<br>
&gt;                                            &quot;depth&quot;, G_TYPE_INT, 16,<br>
&gt;                                            &quot;endianness&quot;, G_TYPE_INT, G_BYTE_ORDER,<br>
&gt;                                            NULL), NULL);<br>
&gt;           gst_bin_add_many (GST_BIN (pipeline), fakesrc, flt, conv, videosink, NULL);<br>
&gt;           gst_element_link_many (fakesrc, flt, conv, videosink, NULL);<br>
&gt;<br>
&gt;           /* setup fake source */<br>
&gt;           g_object_set (G_OBJECT (fakesrc),<br>
&gt;                       &quot;signal-handoffs&quot;, TRUE,<br>
&gt;                       &quot;sizemax&quot;, 384 * 288 * 2,<br>
&gt;                       &quot;sizetype&quot;, 2, NULL);<br>
&gt;           g_signal_connect (fakesrc, &quot;handoff&quot;, G_CALLBACK (cb_handoff), NULL);<br>
&gt;<br>
&gt;           /* play */<br>
&gt;           gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>
&gt;           g_main_loop_run (loop);<br>
&gt;<br>
&gt;           /* clean up */<br>
&gt;           gst_element_set_state (pipeline, GST_STATE_NULL);<br>
&gt;           gst_object_unref (GST_OBJECT (pipeline));<br>
&gt;<br>
&gt;           return 0;<br>
&gt;         }<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;         Any ideas???<br>
&gt;<br>
&gt;         Best regards :D<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;         --<br>
&gt;         Gabriel Duarte<br>
&gt;         Linux User #471185<br>
&gt;         Rio de Janeiro - RJ<br>
&gt;         <a href="http://kinuxlinux.org/gabriel_duarte" target="_blank">http://kinuxlinux.org/gabriel_duarte</a><br>
&gt;<br>
&gt;         Phones:<br>
&gt;         (55) (21) 9463-7760 /*Mobile*/<br>
&gt;         (55) (21) 2464-9302 /*Home*/<br>
&gt;         (55) (21) 2529-5080 /*Work*/<br>
&gt;<br>
&gt;<br>
&gt;         -----BEGIN GEEK CODE BLOCK-----<br>
&gt;         Version: 3.12<br>
&gt;         GCS d- s: a--- C++ UL+++ P L++++ E- W+ N++ o++ K++ w---<br>
&gt;         O- M- V- PS++ PE++ Y PGP- t++ 5-- X+++ R tv++ b++ DI+ D++<br>
&gt;         G++ e+ h* r+ y++++<br>
&gt;         ------END GEEK CODE BLOCK------<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;     --<br>
&gt;     Gabriel Duarte<br>
&gt;     Linux User #471185<br>
&gt;     Rio de Janeiro - RJ<br>
&gt;     <a href="http://kinuxlinux.org/gabriel_duarte" target="_blank">http://kinuxlinux.org/gabriel_duarte</a><br>
&gt;<br>
&gt;     Phones:<br>
&gt;     (55) (21) 9463-7760 /*Mobile*/<br>
&gt;     (55) (21) 2464-9302 /*Home*/<br>
&gt;     (55) (21) 2529-5080 /*Work*/<br>
&gt;<br>
&gt;<br>
<br>
<br>
</div></div>------------------------------------------------------------------------------<br>
Come build with us! The BlackBerry(R) Developer Conference in SF, CA<br>
is the only developer event you need to attend this year. Jumpstart your<br>
developing skills, take BlackBerry mobile applications to market and stay<br>
ahead of the curve. Join us from November 9 - 12, 2009. Register now!<br>
<a href="http://p.sf.net/sfu/devconference" target="_blank">http://p.sf.net/sfu/devconference</a><br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
<a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Gabriel Duarte<br>Linux User #471185<br>Rio de Janeiro - RJ<br><a href="http://kinuxlinux.org/gabriel_duarte">http://kinuxlinux.org/gabriel_duarte</a><br><br>Phones:<br>(55) (21) 9463-7760 /*Mobile*/<br>
(55) (21) 2464-9302 /*Home*/<br>(55) (21) 2529-5080 /*Work*/<br><br><br>-----BEGIN GEEK CODE BLOCK-----<br>Version: 3.12<br>GCS d- s: a--- C++ UL+++ P L++++ E- W+ N++ o++ K++ w--- <br>O- M- V- PS++ PE++ Y PGP- t++ 5-- X+++ R tv++ b++ DI+ D++ <br>
G++ e+ h* r+ y++++ <br>------END GEEK CODE BLOCK------<br>