[gst-devel] gstreamer thread problem?
t.i.m at zen.co.uk
Wed Jun 14 11:58:01 CEST 2006
On Wed, 2006-06-14 at 09:32 +0000, woo john wrote:
> My question is :
> 1 whether a source element can work at pull mode or push mode ?
That depends on the element (some only support one type, some support
both types, and some support pull-mode only under certain circumstances,
like with certain URIs).
> 2 if it is at pull mode, is there a thread assigned for it?
> if it is at push mode, is there a thread assigned for it?
Yes, there is always at least one streaming thread, the difference is
just which element is driving the pipeline. Example:
cdiocddasrc ! audioconvert ! audioresample ! autoaudiosink
cdiocddasrc only works push-based. The source will create a thread and
push out data as fast as it can, the audio sink will then block
according to the timestamps etc.
cdiocddasrc ! audioconvert ! audioresample ! queue ! autoaudiosink
The source will create a thread and push out data as fast as it can. The
queue will block when it hits one of the configured max limits. The
queue will start a thread of its own when its source pad is linked and
push out data towards the sink. So here you have two streaming threads
filesrc ! wavparse ! ... ! autoaudiosink
filesrc can operate both pull and push-based. Wavparse will check if
upstream supports pull mode and use that if possible. So in this case
wavparse creates a thread and reads data from filesrc via
gst_pad_pull_range() as fast as it can and pushes buffers out as fast as
it can (and the sink will block to sync against the clock according to
the timestamps on the buffers).
> 3 As i know,I can insert a queue between a source element and the
> downstream elements. In this case,what mode does the source element work?
> pull or push?
If you insert a queue, you force the right/downstream side of the queue
to be push-based. What happens to the left/upstream side of the queue
depends on the elements, if there is only a source upstream then the
source will operate in push-mode, e.g.:
filesrc ! queue ! wavparse ! ... ! autoaudiosink
will force wavparse to work in streaming mode rather than pull-based
like in the example above.
Hope this helps.
More information about the gstreamer-devel