<br><br><div class="gmail_quote">2009/5/11 <span dir="ltr"><<a href="mailto:gstreamer-devel-request@lists.sourceforge.net">gstreamer-devel-request@lists.sourceforge.net</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Send gstreamer-devel mailing list submissions to<br>
<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
<a href="https://lists.sourceforge.net/lists/listinfo/gstreamer-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/gstreamer-devel</a><br>
or, via email, send a message with subject or body 'help' to<br>
<a href="mailto:gstreamer-devel-request@lists.sourceforge.net">gstreamer-devel-request@lists.sourceforge.net</a><br>
<br>
You can reach the person managing the list at<br>
<a href="mailto:gstreamer-devel-owner@lists.sourceforge.net">gstreamer-devel-owner@lists.sourceforge.net</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of gstreamer-devel digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
1. Re: [gst-cvs] gst-plugins-base: theoradec: rearrange code in<br>
preparation for 422 and 444 support. (Michael Smith)<br>
2. Gstreamer contractor needed (Media Bu)<br>
3. Re: rtspsrc on Windows (Michael Smith)<br>
4. Re: Problem using gstrtpbin (Wim Taymans)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Mon, 11 May 2009 10:21:25 -0700<br>
From: Michael Smith <<a href="mailto:msmith@xiph.org">msmith@xiph.org</a>><br>
Subject: Re: [gst-devel] [gst-cvs] gst-plugins-base: theoradec:<br>
rearrange code in preparation for 422 and 444 support.<br>
To: Jan Schmidt <<a href="mailto:thaytan@noraisin.net">thaytan@noraisin.net</a>><br>
Cc: Discussion of the development of GStreamer<br>
<<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a>><br>
Message-ID:<br>
<<a href="mailto:3c1737210905111021ndd6f76el56bd111a453199d5@mail.gmail.com">3c1737210905111021ndd6f76el56bd111a453199d5@mail.gmail.com</a>><br>
Content-Type: text/plain; charset=ISO-8859-1<br>
<br>
On Mon, May 11, 2009 at 9:54 AM, Jan Schmidt <<a href="mailto:thaytan@noraisin.net">thaytan@noraisin.net</a>> wrote:<br>
<br>
> I'm unfreezing in a few hours anyway, so might as well leave them in.<br>
> I'll try and make sure to leave the freeze notice in the channel topic<br>
> next time.<br>
<br>
Ok. Sorry for the screwup.<br>
<br>
><br>
> For the record, the actual rule is that things unfreeze when I push the<br>
> commit that bumps the version number in <a href="http://configure.ac" target="_blank">configure.ac</a> back to<br>
> development.<br>
><br>
> The consensus seems to be that there's nothing wrong with our current<br>
> practice apart from me forgetting to leave the IRC topic marked frozen,<br>
> so that's cool.<br>
<br>
The current practice is ok with me.<br>
<br>
I think it'd be slightly better to branch _at release time_ (but<br>
retain the freeze on trunk before the release). Brown-paper-bag<br>
releases, as well as future security releases if required, would<br>
happen from the branch. No post-release freeze would be required. So<br>
if we were to change anything, that's what I'd suggest.<br>
<br>
Mike<br>
<br>
<br>
<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Mon, 11 May 2009 10:25:19 -0700<br>
From: Media Bu <<a href="mailto:media2wire@hotmail.com">media2wire@hotmail.com</a>><br>
Subject: [gst-devel] Gstreamer contractor needed<br>
To: <<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a>><br>
Message-ID: <BLU143-W352312EBFC4DC86796FB7890630@phx.gbl><br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
<br>
2wire, Inc., the leader in the development of consumer electronics software for the next-generation of media platforms, has an outstanding consulting opportunity as a GStreamer Expert in San Jose, CA.<br>
<br>
We are looking for a consultant with a successful track record and expertise in the following areas:<br>
<br>
GStreamer development for audio & video streaming application<br>
Set-top box development, experience working with AV decoding Soc<br>
DVR, trick-play, time-shifting TV recording<br>
AV standards: MPEG-2 transport, ASF, MP4, WMV, H.264, WMA, AC3<br>
Live TV, tuner, ATSC standard<br>
<br>
Required Core Skills:<br>
<br>
Extensive Gstreamer application and plugin development experience<br>
HTTP/RTP/RTSP/RTCP<br>
Linux platform development<br>
Extensive experience working with open source<br>
Successful delivery of multimedia product<br>
<br>
Please reply with resume and/or background summary of experience/expertise along with expected bill rate.<br>
_________________________________________________________________<br>
Hotmail? has a new way to see what's up with your friends.<br>
<a href="http://windowslive.com/Tutorial/Hotmail/WhatsNew?ocid=TXT_TAGLM_WL_HM_Tutorial_WhatsNew1_052009" target="_blank">http://windowslive.com/Tutorial/Hotmail/WhatsNew?ocid=TXT_TAGLM_WL_HM_Tutorial_WhatsNew1_052009</a><br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Mon, 11 May 2009 10:31:48 -0700<br>
From: Michael Smith <<a href="mailto:msmith@xiph.org">msmith@xiph.org</a>><br>
Subject: Re: [gst-devel] rtspsrc on Windows<br>
To: Discussion of the development of GStreamer<br>
<<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a>><br>
Message-ID:<br>
<<a href="mailto:3c1737210905111031s73d7e36n1e0b71aa2d2d8230@mail.gmail.com">3c1737210905111031s73d7e36n1e0b71aa2d2d8230@mail.gmail.com</a>><br>
Content-Type: text/plain; charset=ISO-8859-1<br>
<br>
2009/5/11 Marl?ne Hildebrand-Ehrhardt <<a href="mailto:marlene.hildebrandehrhardt@gmail.com">marlene.hildebrandehrhardt@gmail.com</a>>:<br>
> Hi,<br>
><br>
> I have a problem : I am trying to launch a rtsp server on Windows with<br>
> gst-launch, but everytime, it crashes after a few minutes. The console sends<br>
> me a warning, indicating that it could not read from source, and then it<br>
> tells me that the server closed the connection and that it got an EOS from<br>
> the element "pipeline0".<br>
<br>
Did you write an rtsp server as a gstreamer element? GStreamer doesn't<br>
come with anything to do RTSP serving that you could run with<br>
gst-launch.<br>
<br>
Please provide details about what you're _actually_ doing.<br>
<br>
Also mention which versions you're using (and which version of windows).<br>
<br>
Mike</blockquote><div><br>Thank you for answering me, Mike.<br>I'm using gst-launch-0.10, version 0.10.22 with Gstreamer 0.10.22. I'm working on Windows XP professionnal, version 2002, SP2.<br>In fact, I'm building a rtsp server with the following command line :<br>
<br>gst-launch-0.10.exe -v rtspsrc location=rtsp://(IP adress of my IP camera)/mpeg4/media.amp ! queue ! decodebin ! queue ! videorate ! capsfilter caps="video/x-raw-yuv" ! theoraenc ! rtptheorapay ! .send_rtp_sink gstrtpsession name=session .send_rtp_src ! udpsink port=5000 host=(IP adress of the client) session.send_rtcp_src ! udpsink port=5001 host=(IP adress of the client)<br>
<br>My aim is to stream the video from an IP camera.<br><br>Don't hesitate to ask to provide more details, if necessary! Plus, I'm french, so excuse-me if I might not immediatly understand what you are asking me.<br>
<br>Again, thank you by advance!<br><br>Marlène<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
<br>
<br>
------------------------------<br>
<br>
Message: 4<br>
Date: Mon, 11 May 2009 19:58:59 +0200<br>
From: Wim Taymans <<a href="mailto:wim.taymans@gmail.com">wim.taymans@gmail.com</a>><br>
Subject: Re: [gst-devel] Problem using gstrtpbin<br>
To: Discussion of the development of GStreamer<br>
<<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a>><br>
Message-ID: <1242064739.4809.166.camel@metal><br>
Content-Type: text/plain; charset="UTF-8"<br>
<br>
On Mon, 2009-05-11 at 14:19 -0300, Tiago Katcipis wrote:<br>
> but the ssrc is being created, why does the pad not? i get all the<br>
> msgs the pipeline sends and print them all and i get no error, i<br>
> already made a test with just a udpsrc ! filesink and the data is<br>
> comming.<br>
<br>
Because those signals are emitted when a source is created in the<br>
session, which happens before the various pt/ssrc demuxers add the pad<br>
to gstrtpbin.<br>
<br>
Wim<br>
<br>
><br>
> On Mon, May 11, 2009 at 2:06 PM, Wim Taymans <<a href="mailto:wim.taymans@gmail.com">wim.taymans@gmail.com</a>><br>
> wrote:<br>
> On Mon, 2009-05-11 at 13:55 -0300, Tiago Katcipis wrote:<br>
> > i still didnt the teste, but i found this<br>
> ><br>
><br>
><br>
><br>
> Sometimes (dynamic pads) on elements *always* get notified to<br>
> you with<br>
> the "pad-added" callback. This is a signal on GstElement. You<br>
> will get<br>
> the newly created pads from gstrtpbin with this signal. The<br>
> other<br>
> signals you are trying to connect to are for something else.<br>
><br>
> Wim<br>
><br>
><br>
> ><br>
> <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>
> ><br>
> > the GstRtpSsrcDemux sends the signal, i tried to get the<br>
> signal from<br>
> > the bin with:<br>
> ><br>
> > g_signal_connect (rtp_bin, "new-ssrc-pad", G_CALLBACK<br>
> > (on_new_ssrc_pad), rtp_decoder);<br>
> ><br>
> > but i didnt got the signal.<br>
> ><br>
> > My question is, i can get the signal from an element inside<br>
> the bin<br>
> > from the bin or i have to retrieve the element from the bin<br>
> and then<br>
> > connect? and if i have to get the element from the bin (in<br>
> this case<br>
> > the GstRtpSsrcDemux), how is the cleanest way of doing<br>
> this?<br>
> ><br>
> > thanks for all the help.<br>
> > Best regards,<br>
> > Katcipis<br>
> ><br>
> > here goes the src:<br>
> ><br>
> > #include <gst/gst.h><br>
> > #include <glib.h><br>
> ><br>
> > #define PORTA_UDP_ENTRADA 5000<br>
> ><br>
> > static gboolean<br>
> > bus_call (GstBus *bus,<br>
> > GstMessage *msg,<br>
> > gpointer data)<br>
> > {<br>
> > GMainLoop *loop = (GMainLoop *) data;<br>
> ><br>
> > switch (GST_MESSAGE_TYPE (msg)) {<br>
> ><br>
> > case GST_MESSAGE_EOS:<br>
> > g_print ("End of stream\n");<br>
> > g_main_loop_quit (loop);<br>
> > break;<br>
> ><br>
> > case GST_MESSAGE_ERROR: {<br>
> > gchar *debug;<br>
> > GError *error;<br>
> ><br>
> > gst_message_parse_error (msg, &error, &debug);<br>
> > g_free (debug);<br>
> ><br>
> > g_printerr ("Error: %s\n", error->message);<br>
> > g_error_free (error);<br>
> ><br>
> > g_main_loop_quit (loop);<br>
> > break;<br>
> > }<br>
> > default:<br>
> > g_print("Tipo da mensagem [%d], Nome da mensagem [%<br>
> s]\n",<br>
> > GST_MESSAGE_TYPE (msg), GST_MESSAGE_TYPE_NAME(msg));<br>
> > break;<br>
> > }<br>
> ><br>
> > return TRUE;<br>
> > }<br>
> ><br>
> ><br>
> > static void<br>
> > on_new_ssrc (GstElement* gstrtpbin,<br>
> > guint session,<br>
> > guint ssrc,<br>
> > gpointer data)<br>
> > {<br>
> > GstPad* sinkpad;<br>
> > GstPad* srcpad[1];<br>
> > GstElement* decoder = (GstElement *) data;<br>
> > GstIterator* iter;<br>
> > gint done, linked, iter_count;<br>
> ><br>
> > g_print ("New session stabilished, linking gstrtpbin<br>
> session src pad<br>
> > to the rtp_decoder\n");<br>
> ><br>
> > sinkpad = gst_element_get_static_pad(decoder, "sink");<br>
> > // TODO Esta dificil de pegar o pad src do gstrtpbin que<br>
> eh criado<br>
> > ao iniciar uma sessao nova.<br>
> > if(!sinkpad){<br>
> > g_warning("Error getting rtp_decoder sink pad");<br>
> > return;<br>
> > }<br>
> > /*<br>
> > unique pad recv_rtp_src_%d_%d_%d on gstrtpbin with the<br>
> session<br>
> > number, SSRC and payload type respectively as the pad name.<br>
> ><br>
> ><br>
> <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>
> > */<br>
> ><br>
> > iter = gst_element_iterate_src_pads(gstrtpbin);<br>
> > if(!iter){<br>
> > g_warning("Error getting gstrtpbin pads iterator");<br>
> > return;<br>
> > }<br>
> ><br>
> > done = FALSE;<br>
> > linked = FALSE;<br>
> > iter_count = 0;<br>
> ><br>
> > while (!done) {<br>
> > switch (gst_iterator_next (iter, (gpointer *) srcpad))<br>
> {<br>
> > case GST_ITERATOR_OK:<br>
> > if(gst_pad_link (*srcpad, sinkpad) !=<br>
> GST_PAD_LINK_OK){<br>
> > g_warning("Error linking gstrtpbin pad[%s]<br>
> to<br>
> > rtp_decoder pad[%s]", gst_pad_get_name(*srcpad),<br>
> > gst_pad_get_name(sinkpad));<br>
> > }else{<br>
> > g_warning("Linked gstrtpbin pad[%s] to<br>
> rtp_decoder<br>
> > pad[%s] with success", gst_pad_get_name(*srcpad),<br>
> > gst_pad_get_name(sinkpad));<br>
> > linked = TRUE;<br>
> > }<br>
> > iter_count++;<br>
> > gst_object_unref (*srcpad);<br>
> > break;<br>
> > case GST_ITERATOR_RESYNC:<br>
> > gst_iterator_resync (iter);<br>
> > break;<br>
> > case GST_ITERATOR_ERROR:<br>
> > done = TRUE;<br>
> > break;<br>
> > case GST_ITERATOR_DONE:<br>
> > done = TRUE;<br>
> > break;<br>
> > }<br>
> > }<br>
> > if(!linked){<br>
> > g_warning("failed to found a valid recv_src_pad on<br>
> gstrtpbin");<br>
> > }<br>
> > g_debug("GstRtpBin has [%d] src pads", iter_count);<br>
> ><br>
> > gst_iterator_free (iter);<br>
> > gst_object_unref (sinkpad);<br>
> > }<br>
> ><br>
> > static void<br>
> > on_new_ssrc_pad (GstElement *element,<br>
> > GstPad *pad,<br>
> > guint ssrc,<br>
> > gpointer data)<br>
> > {<br>
> > GstPad *sinkpad;<br>
> > GstElement *decoder = (GstElement *) data;<br>
> ><br>
> > /* We can now link this pad with the converter sink pad */<br>
> > g_print ("Dynamic ssrc pad created, linking the pad to the<br>
> > rtp_decoder\n");<br>
> ><br>
> > sinkpad = gst_element_get_static_pad (decoder, "sink");<br>
> > if(gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK){<br>
> > gchar* name = gst_pad_get_name(pad);<br>
> > g_warning("Error linking the pad[%s] to rtp_decoder<br>
> sinkpad",<br>
> > name);<br>
> > g_free(name);<br>
> > }<br>
> ><br>
> > gst_object_unref (sinkpad);<br>
> > }<br>
> ><br>
> > int<br>
> > main (int argc,<br>
> > char *argv[])<br>
> > {<br>
> > GMainLoop *loop;<br>
> ><br>
> > GstElement *pipeline, *source, *rtp_bin, *rtp_decoder,<br>
> *sink;<br>
> > GstPad *gstrtp_sink_pad;<br>
> > GstBus *bus;<br>
> ><br>
> > /* Initialisation */<br>
> > gst_init (&argc, &argv);<br>
> ><br>
> > loop = g_main_loop_new (NULL, FALSE);<br>
> ><br>
> > /* Create gstreamer elements */<br>
> > pipeline = gst_pipeline_new ("audio-player");<br>
> > source = gst_element_factory_make<br>
> ("udpsrc","udp-source");<br>
> > rtp_bin = gst_element_factory_make ("gstrtpbin",<br>
> "gst_rtpbin");<br>
> > rtp_decoder = gst_element_factory_make ("rtpL16depay",<br>
> > "rtp_decoder");<br>
> > sink = gst_element_factory_make ("filesink",<br>
> "file-sink");<br>
> ><br>
> > if (!pipeline || !source || !sink || !rtp_decoder || !<br>
> rtp_bin) {<br>
> > g_printerr ("One element could not be created.<br>
> Exiting.\n");<br>
> > return -1;<br>
> > }<br>
> ><br>
> > gstrtp_sink_pad = gst_element_get_request_pad(rtp_bin,<br>
> > "recv_rtp_sink_0");<br>
> > if (!gstrtp_sink_pad) {<br>
> > g_printerr ("Sink pad could not be created.<br>
> Exiting.\n");<br>
> > return -1;<br>
> > }<br>
> ><br>
> > /* Set up the pipeline */<br>
> > g_object_set (G_OBJECT (source), "port",<br>
> PORTA_UDP_ENTRADA , NULL);<br>
> > g_object_set (G_OBJECT (sink), "location",<br>
> "dados_recebidos_rtp" ,<br>
> > NULL);<br>
> ><br>
> > /* we add a message handler */<br>
> > bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));<br>
> > gst_bus_add_watch (bus, bus_call, loop);<br>
> > gst_object_unref (bus);<br>
> ><br>
> > /* we add all elements into the pipeline */<br>
> > /* file-source | ogg-demuxer | vorbis-decoder | converter<br>
> |<br>
> > alsa-output */<br>
> > gst_bin_add_many (GST_BIN (pipeline),<br>
> > source, sink, rtp_bin, rtp_decoder,<br>
> NULL);<br>
> ><br>
> > /* we link the elements together */<br>
> > if(gst_pad_link(gst_element_get_static_pad(source, "src"),<br>
> > gstrtp_sink_pad) != GST_PAD_LINK_OK){<br>
> > g_warning("Error linking source to the<br>
> gstrtp_sink_pad");<br>
> > gst_object_unref (GST_OBJECT (pipeline));<br>
> > return 0;<br>
> > }<br>
> ><br>
> > /*<br>
> > After the packets are released from the jitterbuffer,<br>
> they will be<br>
> > forwarded to a GstRtpsSrcDemux element.<br>
> > The GstRtpsSrcDemux element will demux the packets based<br>
> on the<br>
> > payload type and will create a unique pad<br>
> > recv_rtp_src_%d_%d_%d on gstrtpbin with the session<br>
> number, SSRC<br>
> > and payload type respectively as the pad name.<br>
> > Because of that we have to dinamicaly link the src pads<br>
> on<br>
> > runtime.<br>
> > */<br>
> > g_signal_connect (rtp_bin, "new-ssrc-pad", G_CALLBACK<br>
> > (on_new_ssrc_pad), rtp_decoder);<br>
> > g_signal_connect (rtp_bin, "on-new-ssrc", G_CALLBACK<br>
> (on_new_ssrc),<br>
> > rtp_decoder);<br>
> ><br>
> > if(!gst_element_link (rtp_decoder, sink)){<br>
> > g_warning("Error linking the rtp_decoder to the<br>
> sink");<br>
> > gst_object_unref (GST_OBJECT (pipeline));<br>
> > return -1;<br>
> > }<br>
> ><br>
> > /* Set the pipeline to "playing" state*/<br>
> > g_print ("listening on port: %d\n", PORTA_UDP_ENTRADA);<br>
> > gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>
> ><br>
> > /* Iterate */<br>
> > g_print ("Running...\n");<br>
> > g_main_loop_run (loop);<br>
> ><br>
> > /* Out of the main loop, clean up nicely */<br>
> > g_print ("Returned, stopping listening on port\n");<br>
> > gst_element_set_state (pipeline, GST_STATE_NULL);<br>
> ><br>
> > g_print ("Deleting pipeline\n");<br>
> > gst_object_unref (GST_OBJECT (pipeline));<br>
> ><br>
> > return 0;<br>
> > }<br>
> ><br>
> ><br>
> > On Sat, May 9, 2009 at 3:40 PM, Aurelien Grimaud<br>
> <<a href="mailto:gstelzz@yahoo.fr">gstelzz@yahoo.fr</a>><br>
> > wrote:<br>
> > Sorry, I misread your code.<br>
> > the pad-added signal is a signal of elements,<br>
> documented in<br>
> > the element<br>
> > documentation.<br>
> > Do you receive RTP ?<br>
> > Because the pad wont be created if you do not<br>
> receive RTP.<br>
> > What does tcpdump tell ?<br>
> ><br>
> > Aurelien<br>
> > Tiago Katcipis a ?crit :<br>
> ><br>
> > > i did it, the pad never is created :-(, but i get<br>
> no message<br>
> > of<br>
> > > warning or error neither. And on the list of<br>
> signals of the<br>
> > gstrtpbin<br>
> > > there is no "pad-added" signal, its normal to the<br>
> signal<br>
> > dont be there?<br>
> > > *<br>
> > > g_signal_connect (rtp_bin, "pad-added",<br>
> G_CALLBACK<br>
> > (on_pad_added),<br>
> > > rtp_decoder);*<br>
> > ><br>
> > > On Sat, May 9, 2009 at 3:55 AM, Aurelien Grimaud<br>
> > <<a href="mailto:gstelzz@yahoo.fr">gstelzz@yahoo.fr</a><br>
> ><br>
> ><br>
> > > <mailto:<a href="mailto:gstelzz@yahoo.fr">gstelzz@yahoo.fr</a>>> wrote:<br>
> > ><br>
> > > You should add the pad-added signal on the<br>
> rtpbin.<br>
> > > When it triggers, check the pad name to find<br>
> out which<br>
> > pad it is.<br>
> > > If pad is a recv_rtp_src_%d_%d_%d, link your<br>
> decoder and<br>
> > sink in the<br>
> > > call back.<br>
> > ><br>
> > > Aurelien<br>
> > ><br>
> > > Tiago Katcipis a ?crit :<br>
> > > > Im trying to do a rtp stream sending data<br>
> and another<br>
> > side receiving<br>
> > > > the data, the part that sends the data is<br>
> working<br>
> > fine, but the part<br>
> > > > that receives is giving me a lot of trouble.<br>
> At<br>
> > > ><br>
> > ><br>
> ><br>
> <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>
> > > > i have read:<br>
> > > ><br>
> > > > "To use GstRtpBin<br>
> > > ><br>
> > ><br>
> ><br>
> <<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>><br>
> > > > as an RTP receiver, request a recv_rtp_sink_<br>
> %|d| pad.<br>
> > The session<br>
> > > > number must be specified in the pad name.<br>
> Data<br>
> > received on the<br>
> > > > recv_rtp_sink_%|d| pad will be processed in<br>
> the<br>
> > gstrtpsession<br>
> > > manager<br>
> > > > and after being validated forwarded on<br>
> GstRtpsSrcDemux<br>
> > element. Each<br>
> > > > RTP stream is demuxed based on the SSRC and<br>
> send to a<br>
> > > > GstRtpJitterBuffer<br>
> > > ><br>
> > ><br>
> ><br>
> <<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>>.<br>
> > > > After the packets are released from the<br>
> jitterbuffer,<br>
> > they will be<br>
> > > > forwarded to a GstRtpsSrcDemux element. The<br>
> > GstRtpsSrcDemux element<br>
> > > > will demux the packets based on the payload<br>
> type and<br>
> > will create a<br>
> > > > unique pad recv_rtp_src_%|d_|%|d_|%|d| on<br>
> gstrtpbin<br>
> > with the session<br>
> > > > number, SSRC and payload type respectively<br>
> as the pad<br>
> > name. "<br>
> > > ><br>
> > > > on my application i cant get the<br>
> recv_rtp_src_%|d_|%|<br>
> > d_|%|d, |i<br>
> > > > already tried on a lot of ways, my last shot<br>
> was try<br>
> > to iterate over<br>
> > > > all the pads on the bin and try to conect, i<br>
> > discovered that the src<br>
> > > > pad never shows up. No error is given. I can<br>
> get the<br>
> > on-new-ssrc<br>
> > > > signal...and other signals as |<br>
> on-ssrc-validated...<br>
> > but on all this<br>
> > > > signals the | recv_rtp_src_%|d_|%|d_|%|d is<br>
> not<br>
> > created yet, i also<br>
> > > > tried to get the "on-pad-added" signal but<br>
> this signal<br>
> > never<br>
> > > happens|.<br>
> > > ><br>
> > > > My problem is, when the recv_rtp_src_%|d_|%|<br>
> d_|%|d is<br>
> > created|.<br>
> > > When i<br>
> > > > iterate over the pads i always get a<br>
> > > > ** (teste_rtp:9516): DEBUG: GstRtpBin has<br>
> [0] src pads<br>
> > > ><br>
> > > > here goes the source code, is a little messy<br>
> because<br>
> > im all day<br>
> > > trying<br>
> > > > a lot of different ways to do this. And i<br>
> get no error<br>
> > message.<br>
> > > ><br>
> > > > #include <gst/gst.h><br>
> > > > #include <glib.h><br>
> > > ><br>
> > > > #define PORTA_UDP_ENTRADA 5000<br>
> > > ><br>
> > > > static gboolean<br>
> > > > bus_call (GstBus *bus,<br>
> > > > GstMessage *msg,<br>
> > > > gpointer data)<br>
> > > > {<br>
> > > > GMainLoop *loop = (GMainLoop *) data;<br>
> > > ><br>
> > > > switch (GST_MESSAGE_TYPE (msg)) {<br>
> > > ><br>
> > > > case GST_MESSAGE_EOS:<br>
> > > > g_print ("End of stream\n");<br>
> > > > g_main_loop_quit (loop);<br>
> > > > break;<br>
> > > ><br>
> > > > case GST_MESSAGE_ERROR: {<br>
> > > > gchar *debug;<br>
> > > > GError *error;<br>
> > > ><br>
> > > > gst_message_parse_error (msg, &error,<br>
> &debug);<br>
> > > > g_free (debug);<br>
> > > ><br>
> > > > g_printerr ("Error: %s\n",<br>
> error->message);<br>
> > > > g_error_free (error);<br>
> > > ><br>
> > > > g_main_loop_quit (loop);<br>
> > > > break;<br>
> > > > }<br>
> > > > default:<br>
> > > > g_print("Tipo da mensagem [%d], Nome<br>
> da mensagem<br>
> > [%s]\n",<br>
> > > > GST_MESSAGE_TYPE (msg),<br>
> GST_MESSAGE_TYPE_NAME(msg));<br>
> > > > break;<br>
> > > > }<br>
> > > ><br>
> > > > return TRUE;<br>
> > > > }<br>
> > > ><br>
> > > ><br>
> > > > static void<br>
> > > > on_new_ssrc (GstElement* gstrtpbin,<br>
> > > > guint session,<br>
> > > > guint ssrc,<br>
> > > > gpointer data)<br>
> > > > {<br>
> > > > GstPad* sinkpad;<br>
> > > > GstPad* srcpad[1];<br>
> > > > GstElement* decoder = (GstElement *) data;<br>
> > > > GstIterator* iter;<br>
> > > > gint done, linked, iter_count;<br>
> > > ><br>
> > > > g_print ("New session stabilished, linking<br>
> gstrtpbin<br>
> > session<br>
> > > src pad<br>
> > > > to the rtp_decoder\n");<br>
> > > ><br>
> > > > sinkpad =<br>
> gst_element_get_static_pad(decoder,<br>
> > "sink");<br>
> > > > // TODO Esta dificil de pegar o pad src do<br>
> gstrtpbin<br>
> > que eh criado<br>
> > > > ao iniciar uma sessao nova.<br>
> > > > if(!sinkpad){<br>
> > > > g_warning("Error getting rtp_decoder<br>
> sink pad");<br>
> > > > return;<br>
> > > > }<br>
> > > > /*<br>
> > > > unique pad recv_rtp_src_%d_%d_%d on<br>
> gstrtpbin<br>
> > with the session<br>
> > > > number, SSRC and payload type respectively<br>
> as the pad<br>
> > name.<br>
> > > ><br>
> > > ><br>
> > ><br>
> ><br>
> <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>
> > > > */<br>
> > > ><br>
> > > > iter =<br>
> gst_element_iterate_src_pads(gstrtpbin);<br>
> > > > if(!iter){<br>
> > > > g_warning("Error getting gstrtpbin<br>
> pads<br>
> > iterator");<br>
> > > > return;<br>
> > > > }<br>
> > > ><br>
> > > > done = FALSE;<br>
> > > > linked = FALSE;<br>
> > > > iter_count = 0;<br>
> > > ><br>
> > > > while (!done) {<br>
> > > > switch (gst_iterator_next (iter,<br>
> (gpointer *)<br>
> > srcpad)) {<br>
> > > > case GST_ITERATOR_OK:<br>
> > > > if(gst_pad_link (*srcpad,<br>
> sinkpad) !=<br>
> > > GST_PAD_LINK_OK){<br>
> > > > g_warning("Error linking<br>
> gstrtpbin<br>
> > pad[%s] to<br>
> > > > rtp_decoder pad[%s]",<br>
> gst_pad_get_name(*srcpad),<br>
> > > > gst_pad_get_name(sinkpad));<br>
> > > > }else{<br>
> > > > g_warning("Linked<br>
> gstrtpbin pad[%s]<br>
> > to rtp_decoder<br>
> > > > pad[%s] with success",<br>
> gst_pad_get_name(*srcpad),<br>
> > > > gst_pad_get_name(sinkpad));<br>
> > > > linked = TRUE;<br>
> > > > }<br>
> > > > iter_count++;<br>
> > > > gst_object_unref (*srcpad);<br>
> > > > break;<br>
> > > > case GST_ITERATOR_RESYNC:<br>
> > > > gst_iterator_resync (iter);<br>
> > > > break;<br>
> > > > case GST_ITERATOR_ERROR:<br>
> > > > done = TRUE;<br>
> > > > break;<br>
> > > > case GST_ITERATOR_DONE:<br>
> > > > done = TRUE;<br>
> > > > break;<br>
> > > > }<br>
> > > > }<br>
> > > > if(!linked){<br>
> > > > g_warning("failed to found a valid<br>
> recv_src_pad<br>
> > on<br>
> > > gstrtpbin");<br>
> > > > }<br>
> > > > g_debug("GstRtpBin has [%d] src pads",<br>
> iter_count);<br>
> > > ><br>
> > > > gst_iterator_free (iter);<br>
> > > > gst_object_unref (sinkpad);<br>
> > > > }<br>
> > > ><br>
> > > > static void<br>
> > > > on_pad_added (GstElement *element,<br>
> > > > GstPad *pad,<br>
> > > > gpointer data)<br>
> > > > {<br>
> > > > GstPad *sinkpad;<br>
> > > > GstElement *decoder = (GstElement *) data;<br>
> > > ><br>
> > > > /* We can now link this pad with the<br>
> converter sink<br>
> > pad */<br>
> > > > g_print ("Dynamic pad created, linking<br>
> > wavparser/converter\n");<br>
> > > ><br>
> > > > sinkpad = gst_element_get_static_pad<br>
> (decoder,<br>
> > "sink");<br>
> > > > if(gst_pad_link (pad, sinkpad) !=<br>
> GST_PAD_LINK_OK){<br>
> > > > g_warning("Error linking recv_rtp_src<br>
> pad to<br>
> > sinkpad");<br>
> > > > }<br>
> > > > gst_object_unref (sinkpad);<br>
> > > > }<br>
> > > ><br>
> > > > int<br>
> > > > main (int argc,<br>
> > > > char *argv[])<br>
> > > > {<br>
> > > > GMainLoop *loop;<br>
> > > ><br>
> > > > GstElement *pipeline, *source, *rtp_bin,<br>
> > *rtp_decoder, *sink;<br>
> > > > GstPad *gstrtp_sink_pad;<br>
> > > > GstBus *bus;<br>
> > > ><br>
> > > > /* Initialisation */<br>
> > > > gst_init (&argc, &argv);<br>
> > > ><br>
> > > > loop = g_main_loop_new (NULL, FALSE);<br>
> > > ><br>
> > > > /* Create gstreamer elements */<br>
> > > > pipeline = gst_pipeline_new<br>
> ("audio-player");<br>
> > > > source = gst_element_factory_make<br>
> > ("udpsrc","udp-source");<br>
> > > > rtp_bin = gst_element_factory_make<br>
> ("gstrtpbin",<br>
> > > "gst_rtpbin");<br>
> > > > rtp_decoder = gst_element_factory_make<br>
> > ("rtpL16depay",<br>
> > > "rtp_decoder");<br>
> > > > sink = gst_element_factory_make<br>
> ("filesink",<br>
> > "file-sink");<br>
> > > ><br>
> > > > if (!pipeline || !source || !sink || !<br>
> rtp_decoder<br>
> > || !rtp_bin) {<br>
> > > > g_printerr ("One element could not be<br>
> created.<br>
> > Exiting.\n");<br>
> > > > return -1;<br>
> > > > }<br>
> > > ><br>
> > > > gstrtp_sink_pad =<br>
> > gst_element_get_request_pad(rtp_bin,<br>
> > > > "recv_rtp_sink_0");<br>
> > > > if (!gstrtp_sink_pad) {<br>
> > > > g_printerr ("Sink pad could not be<br>
> created.<br>
> > Exiting.\n");<br>
> > > > return -1;<br>
> > > > }<br>
> > > ><br>
> > > > /* Set up the pipeline */<br>
> > > > g_object_set (G_OBJECT (source), "port",<br>
> > PORTA_UDP_ENTRADA ,<br>
> > > NULL);<br>
> > > > g_object_set (G_OBJECT (sink), "location",<br>
> > "dados_recebidos_rtp" ,<br>
> > > > NULL);<br>
> > > ><br>
> > > > /* we add a message handler */<br>
> > > > bus = gst_pipeline_get_bus (GST_PIPELINE<br>
> > (pipeline));<br>
> > > > gst_bus_add_watch (bus, bus_call, loop);<br>
> > > > gst_object_unref (bus);<br>
> > > ><br>
> > > > /* we add all elements into the pipeline<br>
> */<br>
> > > > /* file-source | ogg-demuxer |<br>
> vorbis-decoder |<br>
> > converter |<br>
> > > > alsa-output */<br>
> > > > gst_bin_add_many (GST_BIN (pipeline),<br>
> > > > source, sink, rtp_bin,<br>
> > rtp_decoder, NULL);<br>
> > > ><br>
> > > > /* we link the elements together */<br>
> > > ><br>
> if(gst_pad_link(gst_element_get_static_pad(source,<br>
> > "src"),<br>
> > > > gstrtp_sink_pad) != GST_PAD_LINK_OK){<br>
> > > > g_warning("Error linking source to the<br>
> > gstrtp_sink_pad");<br>
> > > > gst_object_unref (GST_OBJECT<br>
> (pipeline));<br>
> > > > return 0;<br>
> > > > }<br>
> > > ><br>
> > > > /*<br>
> > > > After the packets are released from the<br>
> > jitterbuffer, they<br>
> > > will be<br>
> > > > forwarded to a GstRtpsSrcDemux element.<br>
> > > > The GstRtpsSrcDemux element will demux<br>
> the packets<br>
> > based on the<br>
> > > > payload type and will create a unique pad<br>
> > > > recv_rtp_src_%d_%d_%d on gstrtpbin with<br>
> the<br>
> > session number, SSRC<br>
> > > > and payload type respectively as the pad<br>
> name.<br>
> > > > Because of that we have to dinamicaly<br>
> link the src<br>
> > pads on<br>
> > > runtime.<br>
> > > > */<br>
> > > > g_signal_connect (rtp_bin, "pad-added",<br>
> G_CALLBACK<br>
> > > (on_pad_added),<br>
> > > > rtp_decoder);<br>
> > > > g_signal_connect (rtp_bin, "on-new-ssrc",<br>
> G_CALLBACK<br>
> > > (on_new_ssrc),<br>
> > > > rtp_decoder);<br>
> > > ><br>
> > > > if(!gst_element_link (rtp_decoder, sink)){<br>
> > > > g_warning("Error linking the<br>
> rtp_decoder to the<br>
> > sink");<br>
> > > > gst_object_unref (GST_OBJECT<br>
> (pipeline));<br>
> > > > return -1;<br>
> > > > }<br>
> > > ><br>
> > > > /* Set the pipeline to "playing" state*/<br>
> > > > g_print ("listening on port: %d\n",<br>
> > PORTA_UDP_ENTRADA);<br>
> > > > gst_element_set_state (pipeline,<br>
> GST_STATE_PLAYING);<br>
> > > ><br>
> > > > /* Iterate */<br>
> > > > g_print ("Running...\n");<br>
> > > > g_main_loop_run (loop);<br>
> > > ><br>
> > > > /* Out of the main loop, clean up nicely<br>
> */<br>
> > > > g_print ("Returned, stopping listening on<br>
> port\n");<br>
> > > > gst_element_set_state (pipeline,<br>
> GST_STATE_NULL);<br>
> > > ><br>
> > > > g_print ("Deleting pipeline\n");<br>
> > > > gst_object_unref (GST_OBJECT (pipeline));<br>
> > > ><br>
> > > > return 0;<br>
> > > > }<br>
> > > ><br>
> > > ><br>
> > ><br>
> ><br>
> ------------------------------------------------------------------------<br>
> > > ><br>
> > > ><br>
> > ><br>
> ><br>
> ------------------------------------------------------------------------------<br>
> > > > The NEW KODAK i700 Series Scanners deliver<br>
> under ANY<br>
> > > circumstances! Your<br>
> > > > production scanning environment may not be a<br>
> perfect<br>
> > world - but<br>
> > > thanks to<br>
> > > > Kodak, there's a perfect scanner to get the<br>
> job done!<br>
> > With the<br>
> > > NEW KODAK i700<br>
> > > > Series Scanner you'll get full speed at 300<br>
> dpi even<br>
> > with all image<br>
> > > > processing features enabled.<br>
> > <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</a><br>
> > > ><br>
> > ><br>
> ><br>
> ------------------------------------------------------------------------<br>
> > > ><br>
> > > ><br>
> _______________________________________________<br>
> > > > gstreamer-devel mailing list<br>
> > > > <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
> ><br>
> > > <mailto:<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a>><br>
> > > ><br>
> ><br>
> <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>
> > ><br>
> ><br>
> ------------------------------------------------------------------------------<br>
> > > The NEW KODAK i700 Series Scanners deliver<br>
> under ANY<br>
> > > circumstances! Your<br>
> > > production scanning environment may not be a<br>
> perfect<br>
> > world - but<br>
> > > thanks to<br>
> > > Kodak, there's a perfect scanner to get the<br>
> job done!<br>
> > With the NEW<br>
> > > KODAK i700<br>
> > > Series Scanner you'll get full speed at 300<br>
> dpi even<br>
> > with all image<br>
> > > processing features enabled.<br>
> > <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</a><br>
> > ><br>
> _______________________________________________<br>
> > > gstreamer-devel mailing list<br>
> > > <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
> ><br>
> > > <mailto:<a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a>><br>
> ><br>
> > ><br>
> ><br>
> <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>
> > ><br>
> > > --<br>
> > > "it might be a profitable thing to learn Java, but<br>
> it has no<br>
> > > intellectual value whatsoever" Alexander Stepanov<br>
> > ><br>
> ><br>
> ------------------------------------------------------------------------<br>
> > ><br>
> > ><br>
> ><br>
> ------------------------------------------------------------------------------<br>
> > > The NEW KODAK i700 Series Scanners deliver under<br>
> ANY<br>
> > circumstances! Your<br>
> > > production scanning environment may not be a<br>
> perfect world -<br>
> > but thanks to<br>
> > > Kodak, there's a perfect scanner to get the job<br>
> done! With<br>
> > the NEW KODAK i700<br>
> > > Series Scanner you'll get full speed at 300 dpi<br>
> even with<br>
> > all image<br>
> > > processing features enabled.<br>
> <a href="http://p.sf.net/sfu/kodak-com" target="_blank">http://p.sf.net/sfu/kodak-com</a><br>
> > ><br>
> ><br>
> ------------------------------------------------------------------------<br>
> > ><br>
> > > _______________________________________________<br>
> > > gstreamer-devel mailing list<br>
> > > <a href="mailto:gstreamer-devel@lists.sourceforge.net">gstreamer-devel@lists.sourceforge.net</a><br>
> > ><br>
> <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>
> ><br>
> ------------------------------------------------------------------------------<br>
> > The NEW KODAK i700 Series Scanners deliver under ANY<br>
> > circumstances! Your<br>
> > production scanning environment may not be a perfect<br>
> world -<br>
> > but thanks to<br>
> > Kodak, there's a perfect scanner to get the job<br>
> done! With the<br>
> > NEW KODAK i700<br>
> > Series Scanner you'll get full speed at 300 dpi even<br>
> with all<br>
> > image<br>
> > processing features enabled.<br>
> <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>
> ><br>
> <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>
> ><br>
> > --<br>
> > "it might be a profitable thing to learn Java, but it has no<br>
> > intellectual value whatsoever" Alexander Stepanov<br>
> ><br>
> ------------------------------------------------------------------------------<br>
> > The NEW KODAK i700 Series Scanners deliver under ANY<br>
> circumstances! Your<br>
> > production scanning environment may not be a perfect world -<br>
> but thanks to<br>
> > Kodak, there's a perfect scanner to get the job done! With<br>
> the NEW KODAK i700<br>
> > Series Scanner you'll get full speed at 300 dpi even with<br>
> 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>
><br>
><br>
> ------------------------------------------------------------------------------<br>
> The NEW KODAK i700 Series Scanners deliver under ANY<br>
> circumstances! Your<br>
> production scanning environment may not be a perfect world -<br>
> but thanks to<br>
> Kodak, there's a perfect scanner to get the job done! With the<br>
> NEW KODAK i700<br>
> Series Scanner you'll get full speed at 300 dpi even with all<br>
> 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>
><br>
><br>
><br>
><br>
> --<br>
> "it might be a profitable thing to learn Java, but it has no<br>
> intellectual value whatsoever" Alexander Stepanov<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's a perfect scanner to get the job done! With the NEW KODAK i700<br>
> Series Scanner you'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>
> _______________________________________________ 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>
<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's a perfect scanner to get the job done! With the NEW KODAK i700<br>
Series Scanner you'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>
------------------------------<br>
<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>
<br>
<br>
End of gstreamer-devel Digest, Vol 36, Issue 42<br>
***********************************************<br>
</blockquote></div><br>