but the ssrc is being created, why does the pad not? i get all the msgs the pipeline sends and print them all and i get no error, i already made a test with just a udpsrc ! filesink and the data is comming.<br><br><div class="gmail_quote">
On Mon, May 11, 2009 at 2:06 PM, Wim Taymans <span dir="ltr">&lt;<a href="mailto:wim.taymans@gmail.com">wim.taymans@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Mon, 2009-05-11 at 13:55 -0300, Tiago Katcipis wrote:<br>
&gt; i still didnt the teste, but i found this<br>
&gt;<br>
<br>
<br>
</div>Sometimes (dynamic pads) on elements *always* get notified to you with<br>
the &quot;pad-added&quot; callback. This is a signal on GstElement. You will get<br>
the newly created pads from gstrtpbin with this signal. The other<br>
signals you are trying to connect to are for something else.<br>
<font color="#888888"><br>
Wim<br>
</font><div><div></div><div class="h5"><br>
&gt; <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpssrcdemux.html#GstRtpSsrcDemux-new-ssrc-pad" target="_blank">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpssrcdemux.html#GstRtpSsrcDemux-new-ssrc-pad</a><br>

&gt;<br>
&gt; the GstRtpSsrcDemux sends the signal, i tried to get the signal from<br>
&gt; the bin with:<br>
&gt;<br>
&gt; g_signal_connect (rtp_bin, &quot;new-ssrc-pad&quot;, G_CALLBACK<br>
&gt; (on_new_ssrc_pad), rtp_decoder);<br>
&gt;<br>
&gt; but i didnt got the signal.<br>
&gt;<br>
&gt; My question is, i can get the signal from an element inside the bin<br>
&gt; from the bin or i have to retrieve the element from the bin and then<br>
&gt; connect? and if i have to get the element from the bin (in this case<br>
&gt; the GstRtpSsrcDemux),  how is the cleanest way of doing this?<br>
&gt;<br>
&gt; thanks for all the help.<br>
&gt; Best regards,<br>
&gt; Katcipis<br>
&gt;<br>
&gt; here goes the src:<br>
&gt;<br>
&gt; #include &lt;gst/gst.h&gt;<br>
&gt; #include &lt;glib.h&gt;<br>
&gt;<br>
&gt; #define PORTA_UDP_ENTRADA 5000<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;       g_print(&quot;Tipo da mensagem [%d], Nome da mensagem [%s]\n&quot;,<br>
&gt; GST_MESSAGE_TYPE (msg), GST_MESSAGE_TYPE_NAME(msg));<br>
&gt;       break;<br>
&gt;   }<br>
&gt;<br>
&gt;   return TRUE;<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt; static void<br>
&gt; on_new_ssrc (GstElement* gstrtpbin,<br>
&gt;                    guint session,<br>
&gt;                    guint ssrc,<br>
&gt;                    gpointer data)<br>
&gt; {<br>
&gt;   GstPad* sinkpad;<br>
&gt;   GstPad* srcpad[1];<br>
&gt;   GstElement* decoder = (GstElement *) data;<br>
&gt;   GstIterator* iter;<br>
&gt;   gint done, linked, iter_count;<br>
&gt;<br>
&gt;   g_print (&quot;New session stabilished, linking gstrtpbin session src pad<br>
&gt; to the rtp_decoder\n&quot;);<br>
&gt;<br>
&gt;   sinkpad = gst_element_get_static_pad(decoder, &quot;sink&quot;);<br>
&gt;   // TODO Esta dificil de pegar o pad src do gstrtpbin que eh criado<br>
&gt; ao iniciar uma sessao nova.<br>
&gt;   if(!sinkpad){<br>
&gt;       g_warning(&quot;Error getting rtp_decoder sink pad&quot;);<br>
&gt;       return;<br>
&gt;   }<br>
&gt;   /*<br>
&gt;      unique pad recv_rtp_src_%d_%d_%d on gstrtpbin with the session<br>
&gt; number, SSRC and payload type respectively as the pad name.<br>
&gt;<br>
&gt; <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html" target="_blank">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html</a><br>

&gt;   */<br>
&gt;<br>
&gt;   iter = gst_element_iterate_src_pads(gstrtpbin);<br>
&gt;   if(!iter){<br>
&gt;       g_warning(&quot;Error getting gstrtpbin pads iterator&quot;);<br>
&gt;       return;<br>
&gt;   }<br>
&gt;<br>
&gt;   done = FALSE;<br>
&gt;   linked = FALSE;<br>
&gt;   iter_count = 0;<br>
&gt;<br>
&gt;   while (!done) {<br>
&gt;       switch (gst_iterator_next (iter, (gpointer *) srcpad)) {<br>
&gt;           case GST_ITERATOR_OK:<br>
&gt;               if(gst_pad_link (*srcpad, sinkpad) != GST_PAD_LINK_OK){<br>
&gt;                   g_warning(&quot;Error linking gstrtpbin pad[%s] to<br>
&gt; rtp_decoder pad[%s]&quot;, gst_pad_get_name(*srcpad),<br>
&gt; gst_pad_get_name(sinkpad));<br>
&gt;               }else{<br>
&gt;                   g_warning(&quot;Linked gstrtpbin pad[%s] to rtp_decoder<br>
&gt; pad[%s] with success&quot;, gst_pad_get_name(*srcpad),<br>
&gt; gst_pad_get_name(sinkpad));<br>
&gt;                   linked = TRUE;<br>
&gt;               }<br>
&gt;               iter_count++;<br>
&gt;               gst_object_unref (*srcpad);<br>
&gt;           break;<br>
&gt;           case GST_ITERATOR_RESYNC:<br>
&gt;               gst_iterator_resync (iter);<br>
&gt;           break;<br>
&gt;           case GST_ITERATOR_ERROR:<br>
&gt;               done = TRUE;<br>
&gt;           break;<br>
&gt;           case GST_ITERATOR_DONE:<br>
&gt;               done = TRUE;<br>
&gt;           break;<br>
&gt;       }<br>
&gt;    }<br>
&gt;   if(!linked){<br>
&gt;       g_warning(&quot;failed to found a valid recv_src_pad on gstrtpbin&quot;);<br>
&gt;   }<br>
&gt;   g_debug(&quot;GstRtpBin has [%d] src pads&quot;, iter_count);<br>
&gt;<br>
&gt;   gst_iterator_free (iter);<br>
&gt;   gst_object_unref (sinkpad);<br>
&gt; }<br>
&gt;<br>
&gt; static void<br>
&gt; on_new_ssrc_pad (GstElement *element,<br>
&gt;                  GstPad     *pad,<br>
&gt;                  guint      ssrc,<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 converter sink pad */<br>
&gt;   g_print (&quot;Dynamic ssrc pad created, linking the pad to the<br>
&gt; rtp_decoder\n&quot;);<br>
&gt;<br>
&gt;   sinkpad = gst_element_get_static_pad (decoder, &quot;sink&quot;);<br>
&gt;   if(gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK){<br>
&gt;       gchar* name = gst_pad_get_name(pad);<br>
&gt;       g_warning(&quot;Error linking the pad[%s] to rtp_decoder sinkpad&quot;,<br>
&gt; name);<br>
&gt;       g_free(name);<br>
&gt;   }<br>
&gt;<br>
&gt;   gst_object_unref (sinkpad);<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, *rtp_bin, *rtp_decoder, *sink;<br>
&gt;   GstPad *gstrtp_sink_pad;<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;   /* Create gstreamer elements */<br>
&gt;   pipeline    = gst_pipeline_new (&quot;audio-player&quot;);<br>
&gt;   source      = gst_element_factory_make (&quot;udpsrc&quot;,&quot;udp-source&quot;);<br>
&gt;   rtp_bin     = gst_element_factory_make (&quot;gstrtpbin&quot;, &quot;gst_rtpbin&quot;);<br>
&gt;   rtp_decoder = gst_element_factory_make (&quot;rtpL16depay&quot;,<br>
&gt; &quot;rtp_decoder&quot;);<br>
&gt;   sink        = gst_element_factory_make (&quot;filesink&quot;, &quot;file-sink&quot;);<br>
&gt;<br>
&gt;   if (!pipeline || !source || !sink || !rtp_decoder || !rtp_bin) {<br>
&gt;     g_printerr (&quot;One element could not be created. Exiting.\n&quot;);<br>
&gt;     return -1;<br>
&gt;   }<br>
&gt;<br>
&gt;   gstrtp_sink_pad = gst_element_get_request_pad(rtp_bin,<br>
&gt; &quot;recv_rtp_sink_0&quot;);<br>
&gt;   if (!gstrtp_sink_pad) {<br>
&gt;     g_printerr (&quot;Sink pad could not be created. Exiting.\n&quot;);<br>
&gt;     return -1;<br>
&gt;   }<br>
&gt;<br>
&gt;   /* Set up the pipeline */<br>
&gt;   g_object_set (G_OBJECT (source), &quot;port&quot;, PORTA_UDP_ENTRADA , NULL);<br>
&gt;   g_object_set (G_OBJECT (sink), &quot;location&quot;, &quot;dados_recebidos_rtp&quot; ,<br>
&gt; 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),<br>
&gt;                     source, sink, rtp_bin, rtp_decoder, NULL);<br>
&gt;<br>
&gt;   /* we link the elements together */<br>
&gt;   if(gst_pad_link(gst_element_get_static_pad(source, &quot;src&quot;),<br>
&gt; gstrtp_sink_pad) != GST_PAD_LINK_OK){<br>
&gt;       g_warning(&quot;Error linking source to the gstrtp_sink_pad&quot;);<br>
&gt;       gst_object_unref (GST_OBJECT (pipeline));<br>
&gt;       return 0;<br>
&gt;   }<br>
&gt;<br>
&gt;   /*<br>
&gt;     After the packets are released from the jitterbuffer, they will be<br>
&gt; forwarded to a GstRtpsSrcDemux element.<br>
&gt;     The GstRtpsSrcDemux element will demux the packets based on the<br>
&gt; payload type and will create a unique pad<br>
&gt;     recv_rtp_src_%d_%d_%d on gstrtpbin with the session number, SSRC<br>
&gt; and payload type respectively as the pad name.<br>
&gt;     Because of that we have to dinamicaly link the src pads on<br>
&gt; runtime.<br>
&gt;   */<br>
&gt;   g_signal_connect (rtp_bin, &quot;new-ssrc-pad&quot;, G_CALLBACK<br>
&gt; (on_new_ssrc_pad), rtp_decoder);<br>
&gt;   g_signal_connect (rtp_bin, &quot;on-new-ssrc&quot;,  G_CALLBACK (on_new_ssrc),<br>
&gt; rtp_decoder);<br>
&gt;<br>
&gt;   if(!gst_element_link (rtp_decoder, sink)){<br>
&gt;       g_warning(&quot;Error linking the rtp_decoder to the sink&quot;);<br>
&gt;       gst_object_unref (GST_OBJECT (pipeline));<br>
&gt;       return -1;<br>
&gt;   }<br>
&gt;<br>
&gt;   /* Set the pipeline to &quot;playing&quot; state*/<br>
&gt;   g_print (&quot;listening on port: %d\n&quot;, PORTA_UDP_ENTRADA);<br>
&gt;   gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>
&gt;<br>
&gt;   /* Iterate */<br>
&gt;   g_print (&quot;Running...\n&quot;);<br>
&gt;   g_main_loop_run (loop);<br>
&gt;<br>
&gt;   /* Out of the main loop, clean up nicely */<br>
&gt;   g_print (&quot;Returned, stopping listening on port\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;<br>
&gt;   return 0;<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt; On Sat, May 9, 2009 at 3:40 PM, Aurelien Grimaud &lt;<a href="mailto:gstelzz@yahoo.fr">gstelzz@yahoo.fr</a>&gt;<br>
&gt; wrote:<br>
&gt;         Sorry, I misread your code.<br>
&gt;         the pad-added signal is a signal of elements, documented in<br>
&gt;         the element<br>
&gt;         documentation.<br>
&gt;         Do you receive RTP ?<br>
&gt;         Because the pad wont be created if you do not receive RTP.<br>
&gt;         What does tcpdump tell ?<br>
&gt;<br>
&gt;         Aurelien<br>
&gt;         Tiago Katcipis a écrit :<br>
&gt;<br>
&gt;         &gt; i did it, the pad never is created :-(, but i get no message<br>
&gt;         of<br>
&gt;         &gt; warning or error neither. And on the list of signals of the<br>
&gt;         gstrtpbin<br>
&gt;         &gt; there is no &quot;pad-added&quot; signal, its normal to the signal<br>
&gt;         dont be there?<br>
&gt;         &gt; *<br>
&gt;         &gt; g_signal_connect (rtp_bin, &quot;pad-added&quot;,   G_CALLBACK<br>
&gt;         (on_pad_added),<br>
&gt;         &gt; rtp_decoder);*<br>
&gt;         &gt;<br>
&gt;         &gt; On Sat, May 9, 2009 at 3:55 AM, Aurelien Grimaud<br>
&gt;         &lt;<a href="mailto:gstelzz@yahoo.fr">gstelzz@yahoo.fr</a><br>
&gt;<br>
&gt;<br>
&gt;         &gt; &lt;mailto:<a href="mailto:gstelzz@yahoo.fr">gstelzz@yahoo.fr</a>&gt;&gt; wrote:<br>
&gt;         &gt;<br>
&gt;         &gt;     You should add the pad-added signal on the rtpbin.<br>
&gt;         &gt;     When it triggers, check the pad name to find out which<br>
&gt;         pad it is.<br>
&gt;         &gt;     If pad is a recv_rtp_src_%d_%d_%d, link your decoder and<br>
&gt;         sink in the<br>
&gt;         &gt;     call back.<br>
&gt;         &gt;<br>
&gt;         &gt;     Aurelien<br>
&gt;         &gt;<br>
&gt;         &gt;     Tiago Katcipis a écrit :<br>
&gt;         &gt;     &gt; Im trying to do a rtp stream sending data and another<br>
&gt;         side receiving<br>
&gt;         &gt;     &gt; the data, the part that sends the data is working<br>
&gt;         fine, but the part<br>
&gt;         &gt;     &gt; that receives is giving me a lot of trouble. At<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;<br>
&gt;         <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html" target="_blank">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html</a><br>

&gt;         &gt;     &gt; i have read:<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; &quot;To use GstRtpBin<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;<br>
&gt;         &lt;<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html#GstRtpBin" target="_blank">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html#GstRtpBin</a>&gt;<br>

&gt;         &gt;     &gt; as an RTP receiver, request a recv_rtp_sink_%|d| pad.<br>
&gt;         The session<br>
&gt;         &gt;     &gt; number must be specified in the pad name. Data<br>
&gt;         received on the<br>
&gt;         &gt;     &gt; recv_rtp_sink_%|d| pad will be processed in the<br>
&gt;         gstrtpsession<br>
&gt;         &gt;     manager<br>
&gt;         &gt;     &gt; and after being validated forwarded on GstRtpsSrcDemux<br>
&gt;         element. Each<br>
&gt;         &gt;     &gt; RTP stream is demuxed based on the SSRC and send to a<br>
&gt;         &gt;     &gt; GstRtpJitterBuffer<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;<br>
&gt;         &lt;<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpjitterbuffer.html#GstRtpJitterBuffer" target="_blank">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpjitterbuffer.html#GstRtpJitterBuffer</a>&gt;.<br>

&gt;         &gt;     &gt; After the packets are released from the jitterbuffer,<br>
&gt;         they will be<br>
&gt;         &gt;     &gt; forwarded to a GstRtpsSrcDemux element. The<br>
&gt;         GstRtpsSrcDemux element<br>
&gt;         &gt;     &gt; will demux the packets based on the payload type and<br>
&gt;         will create a<br>
&gt;         &gt;     &gt; unique pad recv_rtp_src_%|d_|%|d_|%|d| on gstrtpbin<br>
&gt;         with the session<br>
&gt;         &gt;     &gt; number, SSRC and payload type respectively as the pad<br>
&gt;         name. &quot;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; on my application i cant get the recv_rtp_src_%|d_|%|<br>
&gt;         d_|%|d,  |i<br>
&gt;         &gt;     &gt; already tried on a lot of ways, my last shot was try<br>
&gt;         to iterate over<br>
&gt;         &gt;     &gt; all the pads on the bin and try to conect, i<br>
&gt;         discovered that the src<br>
&gt;         &gt;     &gt; pad never shows up. No error is given. I can get the<br>
&gt;         on-new-ssrc<br>
&gt;         &gt;     &gt; signal...and other signals as  |on-ssrc-validated...<br>
&gt;         but on all this<br>
&gt;         &gt;     &gt; signals the | recv_rtp_src_%|d_|%|d_|%|d is not<br>
&gt;         created yet, i also<br>
&gt;         &gt;     &gt; tried to get the &quot;on-pad-added&quot; signal but this signal<br>
&gt;         never<br>
&gt;         &gt;     happens|.<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; My problem is, when the recv_rtp_src_%|d_|%|d_|%|d is<br>
&gt;         created|.<br>
&gt;         &gt;     When i<br>
&gt;         &gt;     &gt; iterate over the pads i always get a<br>
&gt;         &gt;     &gt; ** (teste_rtp:9516): DEBUG: GstRtpBin has [0] src pads<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; here goes the source code, is a little messy because<br>
&gt;         im all day<br>
&gt;         &gt;     trying<br>
&gt;         &gt;     &gt; a lot of different ways to do this. And i get no error<br>
&gt;         message.<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; #include &lt;gst/gst.h&gt;<br>
&gt;         &gt;     &gt; #include &lt;glib.h&gt;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; #define PORTA_UDP_ENTRADA 5000<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; static gboolean<br>
&gt;         &gt;     &gt; bus_call (GstBus     *bus,<br>
&gt;         &gt;     &gt;           GstMessage *msg,<br>
&gt;         &gt;     &gt;           gpointer    data)<br>
&gt;         &gt;     &gt; {<br>
&gt;         &gt;     &gt;   GMainLoop *loop = (GMainLoop *) data;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   switch (GST_MESSAGE_TYPE (msg)) {<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;     case GST_MESSAGE_EOS:<br>
&gt;         &gt;     &gt;       g_print (&quot;End of stream\n&quot;);<br>
&gt;         &gt;     &gt;       g_main_loop_quit (loop);<br>
&gt;         &gt;     &gt;       break;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;     case GST_MESSAGE_ERROR: {<br>
&gt;         &gt;     &gt;       gchar  *debug;<br>
&gt;         &gt;     &gt;       GError *error;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;       gst_message_parse_error (msg, &amp;error, &amp;debug);<br>
&gt;         &gt;     &gt;       g_free (debug);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;       g_printerr (&quot;Error: %s\n&quot;, error-&gt;message);<br>
&gt;         &gt;     &gt;       g_error_free (error);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;       g_main_loop_quit (loop);<br>
&gt;         &gt;     &gt;       break;<br>
&gt;         &gt;     &gt;     }<br>
&gt;         &gt;     &gt;     default:<br>
&gt;         &gt;     &gt;       g_print(&quot;Tipo da mensagem [%d], Nome da mensagem<br>
&gt;         [%s]\n&quot;,<br>
&gt;         &gt;     &gt; GST_MESSAGE_TYPE (msg), GST_MESSAGE_TYPE_NAME(msg));<br>
&gt;         &gt;     &gt;       break;<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   return TRUE;<br>
&gt;         &gt;     &gt; }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; static void<br>
&gt;         &gt;     &gt; on_new_ssrc (GstElement* gstrtpbin,<br>
&gt;         &gt;     &gt;                    guint session,<br>
&gt;         &gt;     &gt;                    guint ssrc,<br>
&gt;         &gt;     &gt;                    gpointer data)<br>
&gt;         &gt;     &gt; {<br>
&gt;         &gt;     &gt;   GstPad* sinkpad;<br>
&gt;         &gt;     &gt;   GstPad* srcpad[1];<br>
&gt;         &gt;     &gt;   GstElement* decoder = (GstElement *) data;<br>
&gt;         &gt;     &gt;   GstIterator* iter;<br>
&gt;         &gt;     &gt;   gint done, linked, iter_count;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   g_print (&quot;New session stabilished, linking gstrtpbin<br>
&gt;         session<br>
&gt;         &gt;     src pad<br>
&gt;         &gt;     &gt; to the rtp_decoder\n&quot;);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   sinkpad = gst_element_get_static_pad(decoder,<br>
&gt;         &quot;sink&quot;);<br>
&gt;         &gt;     &gt;   // TODO Esta dificil de pegar o pad src do gstrtpbin<br>
&gt;         que eh criado<br>
&gt;         &gt;     &gt; ao iniciar uma sessao nova.<br>
&gt;         &gt;     &gt;   if(!sinkpad){<br>
&gt;         &gt;     &gt;       g_warning(&quot;Error getting rtp_decoder sink pad&quot;);<br>
&gt;         &gt;     &gt;       return;<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;   /*<br>
&gt;         &gt;     &gt;      unique pad recv_rtp_src_%d_%d_%d on gstrtpbin<br>
&gt;         with the session<br>
&gt;         &gt;     &gt; number, SSRC and payload type respectively as the pad<br>
&gt;         name.<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;<br>
&gt;         <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html" target="_blank">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html</a><br>

&gt;         &gt;     &gt;   */<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   iter = gst_element_iterate_src_pads(gstrtpbin);<br>
&gt;         &gt;     &gt;   if(!iter){<br>
&gt;         &gt;     &gt;       g_warning(&quot;Error getting gstrtpbin pads<br>
&gt;         iterator&quot;);<br>
&gt;         &gt;     &gt;       return;<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   done = FALSE;<br>
&gt;         &gt;     &gt;   linked = FALSE;<br>
&gt;         &gt;     &gt;   iter_count = 0;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   while (!done) {<br>
&gt;         &gt;     &gt;       switch (gst_iterator_next (iter, (gpointer *)<br>
&gt;         srcpad)) {<br>
&gt;         &gt;     &gt;           case GST_ITERATOR_OK:<br>
&gt;         &gt;     &gt;               if(gst_pad_link (*srcpad, sinkpad) !=<br>
&gt;         &gt;     GST_PAD_LINK_OK){<br>
&gt;         &gt;     &gt;                   g_warning(&quot;Error linking gstrtpbin<br>
&gt;         pad[%s] to<br>
&gt;         &gt;     &gt; rtp_decoder pad[%s]&quot;, gst_pad_get_name(*srcpad),<br>
&gt;         &gt;     &gt; gst_pad_get_name(sinkpad));<br>
&gt;         &gt;     &gt;               }else{<br>
&gt;         &gt;     &gt;                   g_warning(&quot;Linked gstrtpbin pad[%s]<br>
&gt;         to rtp_decoder<br>
&gt;         &gt;     &gt; pad[%s] with success&quot;, gst_pad_get_name(*srcpad),<br>
&gt;         &gt;     &gt; gst_pad_get_name(sinkpad));<br>
&gt;         &gt;     &gt;                   linked = TRUE;<br>
&gt;         &gt;     &gt;               }<br>
&gt;         &gt;     &gt;               iter_count++;<br>
&gt;         &gt;     &gt;               gst_object_unref (*srcpad);<br>
&gt;         &gt;     &gt;           break;<br>
&gt;         &gt;     &gt;           case GST_ITERATOR_RESYNC:<br>
&gt;         &gt;     &gt;               gst_iterator_resync (iter);<br>
&gt;         &gt;     &gt;           break;<br>
&gt;         &gt;     &gt;           case GST_ITERATOR_ERROR:<br>
&gt;         &gt;     &gt;               done = TRUE;<br>
&gt;         &gt;     &gt;           break;<br>
&gt;         &gt;     &gt;           case GST_ITERATOR_DONE:<br>
&gt;         &gt;     &gt;               done = TRUE;<br>
&gt;         &gt;     &gt;           break;<br>
&gt;         &gt;     &gt;       }<br>
&gt;         &gt;     &gt;    }<br>
&gt;         &gt;     &gt;   if(!linked){<br>
&gt;         &gt;     &gt;       g_warning(&quot;failed to found a valid recv_src_pad<br>
&gt;         on<br>
&gt;         &gt;     gstrtpbin&quot;);<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;   g_debug(&quot;GstRtpBin has [%d] src pads&quot;, iter_count);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   gst_iterator_free (iter);<br>
&gt;         &gt;     &gt;   gst_object_unref (sinkpad);<br>
&gt;         &gt;     &gt; }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; static void<br>
&gt;         &gt;     &gt; on_pad_added (GstElement *element,<br>
&gt;         &gt;     &gt;               GstPad     *pad,<br>
&gt;         &gt;     &gt;               gpointer    data)<br>
&gt;         &gt;     &gt; {<br>
&gt;         &gt;     &gt;   GstPad *sinkpad;<br>
&gt;         &gt;     &gt;   GstElement *decoder = (GstElement *) data;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* We can now link this pad with the converter sink<br>
&gt;         pad */<br>
&gt;         &gt;     &gt;   g_print (&quot;Dynamic pad created, linking<br>
&gt;         wavparser/converter\n&quot;);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   sinkpad = gst_element_get_static_pad (decoder,<br>
&gt;         &quot;sink&quot;);<br>
&gt;         &gt;     &gt;   if(gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK){<br>
&gt;         &gt;     &gt;       g_warning(&quot;Error linking recv_rtp_src pad to<br>
&gt;         sinkpad&quot;);<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;   gst_object_unref (sinkpad);<br>
&gt;         &gt;     &gt; }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; int<br>
&gt;         &gt;     &gt; main (int   argc,<br>
&gt;         &gt;     &gt;       char *argv[])<br>
&gt;         &gt;     &gt; {<br>
&gt;         &gt;     &gt;   GMainLoop *loop;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   GstElement *pipeline, *source, *rtp_bin,<br>
&gt;         *rtp_decoder, *sink;<br>
&gt;         &gt;     &gt;   GstPad *gstrtp_sink_pad;<br>
&gt;         &gt;     &gt;   GstBus *bus;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* Initialisation */<br>
&gt;         &gt;     &gt;   gst_init (&amp;argc, &amp;argv);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   loop = g_main_loop_new (NULL, FALSE);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* Create gstreamer elements */<br>
&gt;         &gt;     &gt;   pipeline    = gst_pipeline_new (&quot;audio-player&quot;);<br>
&gt;         &gt;     &gt;   source      = gst_element_factory_make<br>
&gt;         (&quot;udpsrc&quot;,&quot;udp-source&quot;);<br>
&gt;         &gt;     &gt;   rtp_bin     = gst_element_factory_make (&quot;gstrtpbin&quot;,<br>
&gt;         &gt;     &quot;gst_rtpbin&quot;);<br>
&gt;         &gt;     &gt;   rtp_decoder = gst_element_factory_make<br>
&gt;         (&quot;rtpL16depay&quot;,<br>
&gt;         &gt;     &quot;rtp_decoder&quot;);<br>
&gt;         &gt;     &gt;   sink        = gst_element_factory_make (&quot;filesink&quot;,<br>
&gt;         &quot;file-sink&quot;);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   if (!pipeline || !source || !sink || !rtp_decoder<br>
&gt;         || !rtp_bin) {<br>
&gt;         &gt;     &gt;     g_printerr (&quot;One element could not be created.<br>
&gt;         Exiting.\n&quot;);<br>
&gt;         &gt;     &gt;     return -1;<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   gstrtp_sink_pad =<br>
&gt;         gst_element_get_request_pad(rtp_bin,<br>
&gt;         &gt;     &gt; &quot;recv_rtp_sink_0&quot;);<br>
&gt;         &gt;     &gt;   if (!gstrtp_sink_pad) {<br>
&gt;         &gt;     &gt;     g_printerr (&quot;Sink pad could not be created.<br>
&gt;         Exiting.\n&quot;);<br>
&gt;         &gt;     &gt;     return -1;<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* Set up the pipeline */<br>
&gt;         &gt;     &gt;   g_object_set (G_OBJECT (source), &quot;port&quot;,<br>
&gt;         PORTA_UDP_ENTRADA ,<br>
&gt;         &gt;     NULL);<br>
&gt;         &gt;     &gt;   g_object_set (G_OBJECT (sink), &quot;location&quot;,<br>
&gt;         &quot;dados_recebidos_rtp&quot; ,<br>
&gt;         &gt;     &gt; NULL);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* we add a message handler */<br>
&gt;         &gt;     &gt;   bus = gst_pipeline_get_bus (GST_PIPELINE<br>
&gt;         (pipeline));<br>
&gt;         &gt;     &gt;   gst_bus_add_watch (bus, bus_call, loop);<br>
&gt;         &gt;     &gt;   gst_object_unref (bus);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* we add all elements into the pipeline */<br>
&gt;         &gt;     &gt;   /* file-source | ogg-demuxer | vorbis-decoder |<br>
&gt;         converter |<br>
&gt;         &gt;     &gt; alsa-output */<br>
&gt;         &gt;     &gt;   gst_bin_add_many (GST_BIN (pipeline),<br>
&gt;         &gt;     &gt;                     source, sink, rtp_bin,<br>
&gt;         rtp_decoder, NULL);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* we link the elements together */<br>
&gt;         &gt;     &gt;   if(gst_pad_link(gst_element_get_static_pad(source,<br>
&gt;         &quot;src&quot;),<br>
&gt;         &gt;     &gt; gstrtp_sink_pad) != GST_PAD_LINK_OK){<br>
&gt;         &gt;     &gt;       g_warning(&quot;Error linking source to the<br>
&gt;         gstrtp_sink_pad&quot;);<br>
&gt;         &gt;     &gt;       gst_object_unref (GST_OBJECT (pipeline));<br>
&gt;         &gt;     &gt;       return 0;<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /*<br>
&gt;         &gt;     &gt;     After the packets are released from the<br>
&gt;         jitterbuffer, they<br>
&gt;         &gt;     will be<br>
&gt;         &gt;     &gt; forwarded to a GstRtpsSrcDemux element.<br>
&gt;         &gt;     &gt;     The GstRtpsSrcDemux element will demux the packets<br>
&gt;         based on the<br>
&gt;         &gt;     &gt; payload type and will create a unique pad<br>
&gt;         &gt;     &gt;     recv_rtp_src_%d_%d_%d on gstrtpbin with the<br>
&gt;         session number, SSRC<br>
&gt;         &gt;     &gt; and payload type respectively as the pad name.<br>
&gt;         &gt;     &gt;     Because of that we have to dinamicaly link the src<br>
&gt;         pads on<br>
&gt;         &gt;     runtime.<br>
&gt;         &gt;     &gt;   */<br>
&gt;         &gt;     &gt;   g_signal_connect (rtp_bin, &quot;pad-added&quot;,   G_CALLBACK<br>
&gt;         &gt;     (on_pad_added),<br>
&gt;         &gt;     &gt; rtp_decoder);<br>
&gt;         &gt;     &gt;   g_signal_connect (rtp_bin, &quot;on-new-ssrc&quot;, G_CALLBACK<br>
&gt;         &gt;     (on_new_ssrc),<br>
&gt;         &gt;     &gt; rtp_decoder);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   if(!gst_element_link (rtp_decoder, sink)){<br>
&gt;         &gt;     &gt;       g_warning(&quot;Error linking the rtp_decoder to the<br>
&gt;         sink&quot;);<br>
&gt;         &gt;     &gt;       gst_object_unref (GST_OBJECT (pipeline));<br>
&gt;         &gt;     &gt;       return -1;<br>
&gt;         &gt;     &gt;   }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* Set the pipeline to &quot;playing&quot; state*/<br>
&gt;         &gt;     &gt;   g_print (&quot;listening on port: %d\n&quot;,<br>
&gt;         PORTA_UDP_ENTRADA);<br>
&gt;         &gt;     &gt;   gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* Iterate */<br>
&gt;         &gt;     &gt;   g_print (&quot;Running...\n&quot;);<br>
&gt;         &gt;     &gt;   g_main_loop_run (loop);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   /* Out of the main loop, clean up nicely */<br>
&gt;         &gt;     &gt;   g_print (&quot;Returned, stopping listening on port\n&quot;);<br>
&gt;         &gt;     &gt;   gst_element_set_state (pipeline, GST_STATE_NULL);<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   g_print (&quot;Deleting pipeline\n&quot;);<br>
&gt;         &gt;     &gt;   gst_object_unref (GST_OBJECT (pipeline));<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;   return 0;<br>
&gt;         &gt;     &gt; }<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;<br>
&gt;         ------------------------------------------------------------------------<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;<br>
&gt;         ------------------------------------------------------------------------------<br>
&gt;         &gt;     &gt; The NEW KODAK i700 Series Scanners deliver under ANY<br>
&gt;         &gt;     circumstances! Your<br>
&gt;         &gt;     &gt; production scanning environment may not be a perfect<br>
&gt;         world - but<br>
&gt;         &gt;     thanks to<br>
&gt;         &gt;     &gt; Kodak, there&#39;s a perfect scanner to get the job done!<br>
&gt;         With the<br>
&gt;         &gt;     NEW KODAK i700<br>
&gt;         &gt;     &gt; Series Scanner you&#39;ll get full speed at 300 dpi even<br>
&gt;         with all image<br>
&gt;         &gt;     &gt; processing features enabled.<br>
&gt;         <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</a><br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;<br>
&gt;         ------------------------------------------------------------------------<br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;     &gt; _______________________________________________<br>
&gt;         &gt;     &gt; gstreamer-devel mailing list<br>
&gt;         &gt;     &gt; <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
&gt;<br>
&gt;         &gt;     &lt;mailto:<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a>&gt;<br>
&gt;         &gt;     &gt;<br>
&gt;         <a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
&gt;         &gt;     &gt;<br>
&gt;         &gt;<br>
&gt;         &gt;<br>
&gt;         &gt;<br>
&gt;         ------------------------------------------------------------------------------<br>
&gt;         &gt;     The NEW KODAK i700 Series Scanners deliver under ANY<br>
&gt;         &gt;     circumstances! Your<br>
&gt;         &gt;     production scanning environment may not be a perfect<br>
&gt;         world - but<br>
&gt;         &gt;     thanks to<br>
&gt;         &gt;     Kodak, there&#39;s a perfect scanner to get the job done!<br>
&gt;         With the NEW<br>
&gt;         &gt;     KODAK i700<br>
&gt;         &gt;     Series Scanner you&#39;ll get full speed at 300 dpi even<br>
&gt;         with all image<br>
&gt;         &gt;     processing features enabled.<br>
&gt;         <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</a><br>
&gt;         &gt;     _______________________________________________<br>
&gt;         &gt;     gstreamer-devel mailing list<br>
&gt;         &gt;     <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
&gt;<br>
&gt;         &gt;     &lt;mailto:<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a>&gt;<br>
&gt;<br>
&gt;         &gt;<br>
&gt;         <a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
&gt;         &gt;<br>
&gt;         &gt;<br>
&gt;         &gt;<br>
&gt;         &gt;<br>
&gt;         &gt; --<br>
&gt;         &gt; &quot;it might be a profitable thing to learn Java, but it has no<br>
&gt;         &gt; intellectual value whatsoever&quot; Alexander Stepanov<br>
&gt;         &gt;<br>
&gt;         ------------------------------------------------------------------------<br>
&gt;         &gt;<br>
&gt;         &gt;<br>
&gt;         ------------------------------------------------------------------------------<br>
&gt;         &gt; The NEW KODAK i700 Series Scanners deliver under ANY<br>
&gt;         circumstances! Your<br>
&gt;         &gt; production scanning environment may not be a perfect world -<br>
&gt;         but thanks to<br>
&gt;         &gt; Kodak, there&#39;s a perfect scanner to get the job done! With<br>
&gt;         the NEW KODAK i700<br>
&gt;         &gt; Series Scanner you&#39;ll get full speed at 300 dpi even with<br>
&gt;         all image<br>
&gt;         &gt; processing features enabled. <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</a><br>
&gt;         &gt;<br>
&gt;         ------------------------------------------------------------------------<br>
&gt;         &gt;<br>
&gt;         &gt; _______________________________________________<br>
&gt;         &gt; gstreamer-devel mailing list<br>
&gt;         &gt; <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
&gt;         &gt; <a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
&gt;         &gt;<br>
&gt;<br>
&gt;<br>
&gt;         ------------------------------------------------------------------------------<br>
&gt;         The NEW KODAK i700 Series Scanners deliver under ANY<br>
&gt;         circumstances! Your<br>
&gt;         production scanning environment may not be a perfect world -<br>
&gt;         but thanks to<br>
&gt;         Kodak, there&#39;s a perfect scanner to get the job done! With the<br>
&gt;         NEW KODAK i700<br>
&gt;         Series Scanner you&#39;ll get full speed at 300 dpi even with all<br>
&gt;         image<br>
&gt;         processing features enabled. <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</a><br>
&gt;         _______________________________________________<br>
&gt;         gstreamer-devel mailing list<br>
&gt;         <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
&gt;         <a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; &quot;it might be a profitable thing to learn Java, but it has no<br>
&gt; intellectual value whatsoever&quot; Alexander Stepanov<br>
&gt; ------------------------------------------------------------------------------<br>
&gt; The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your<br>
&gt; production scanning environment may not be a perfect world - but thanks to<br>
&gt; Kodak, there&#39;s a perfect scanner to get the job done! With the NEW KODAK i700<br>
&gt; Series Scanner you&#39;ll get full speed at 300 dpi even with all image<br>
&gt; processing features enabled. <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</a><br>
&gt; _______________________________________________ gstreamer-devel mailing list <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a> <a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>

<br>
<br>
------------------------------------------------------------------------------<br>
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your<br>
production scanning environment may not be a perfect world - but thanks to<br>
Kodak, there&#39;s a perfect scanner to get the job done! With the NEW KODAK i700<br>
Series Scanner you&#39;ll get full speed at 300 dpi even with all image<br>
processing features enabled. <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</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>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>&quot;it might be a profitable thing to learn Java, but it has no intellectual value whatsoever&quot; Alexander Stepanov<br>