Hi!
I'm a newbie for gstreamer and working on a sink that I wish it would provide buffer for source. I think it would be a pull-based sink. The GStreamer I used is gstreamer-0.10.25, gst-plugin-base-0.10.25, and gst-plaugin-good-0.10.17. I implemented this sink based on base-sink, and added the virtual function: buffer_alloc() (gst_my_sink_buffer_alloc) and render() (gst_my_sink_render). After trying: GST_DEBUG=basesink:7,mysink:7 gst-launch fakesrc can-activate-pull=1 ! mysink I found gstbasesink.c had set DEFAULT_CAN_ACTIVATE_PULL to FALSE, so I set it to TRUE, and get the follow log. It seems pull mode is enabled, but gst_my_sink_buffer_alloc and gst_my_sink_render are not called. Does I make something wrong, or which sink can I use as reference? Besides fakesrc, is there any pull-source for me to do test with gst-launch? Thanks, France Hsu gst_my_sink_change_state: null to ready | gst_my_sink_start | gst_my_sink_change_state: ready to pause | gst_base_sink_pad_activate | gst_base_sink_negotiate_pull | gst_base_sink_pad_activate_pull | gst_base_sink_loop | gst_my_sink_change_state: pause to playing | [ gst_base_sink_loop: pulling 0, 4096 ]* ------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
On Thu, 2010-02-04 at 11:49 +0800, Hsu France wrote:
Hi, > I'm a newbie for gstreamer and working on a sink that I wish it would > provide buffer for source. I think it would be a pull-based sink. > (...) > I implemented this sink based on base-sink, and added the virtual > function: buffer_alloc() (gst_my_sink_buffer_alloc) and render() > (gst_my_sink_render). What kind of sink is this? There's no need for the sink to operate in pull mode to be able to provide buffers to upstream. It should be sufficient to implement a buffer alloc function. Take for example: $ GST_DEBUG=*src:5,*sink:5 videotestsrc num-buffers=2 ! ximagesink This will operate in push mode, but videotestsrc will call gst_pad_alloc_buffer() to get a buffer from ximagesink and then fill that with data and push it back to ximagesink. Pull mode for sinks is something that's not really used much in practice and is rarely useful. Maybe you could provide some more details of what you're trying to do? Cheers -Tim ------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
In reply to this post by Hsu France
Hi! Tim,
Thanks for your reply. I would misunderstand the meaning of "pull-mode sink". You mean, pull-mode and buffer allocated by sink are two different things, right? In the fact, my sink is for a HW device, so I want the source to use the HW buffer (allocated in sink) for data flow, not to allocate by source itself. I wish to use udpsrc for the pipeline, and found it is based on GstPushSrc. (Therefore, I thought I should implement a pull-based sink, and find a pull-based source) $ gst-launch udpsrc udp://IP:PORT ! mysink However, my buffer_alloc function is not called. France Hsu
------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
In reply to this post by Hsu France
Dears,
I found the reason why my buffer_alloc() is not called. So I answer this question by myself and for your reference if some body needs it. At first, I used the udpsrc as my source, but udpsrc malloc the buffer itself, and doesn't use gst_pad_alloc_buffer(). gst_pad_alloc_buffer() will invoke the sink's buffer_alloc() function. It is independent of pull-mode or push-mode. The source, videotestsrc, is an example to use gst_pad_alloc_buffer(). France Hsu
------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |