[gst-devel] info about dynamic request pads
Luca Ognibene
luca.ognibene at gmail.com
Mon Jan 19 11:10:45 CET 2009
Hi, i would like to create a bin that works this way:
* a single sink pad
* src%d are request pad
* inside the bin i have the sink pad linked to a tee
* every time i request a pad i want my bin to create a "queue !
identity" bin and attach it to the internal tee
* every time i release a pad i want my bin to stop the "queue !
identity" bin and release the internal tee pad
Everything work if the bin is in the NULL state but i have
segfaults/hangs if the bin is in PLAYING state. I've tried to read
part-block and other
docs but i'm not able to fix this problem..
I've implemented the bin this way:
* in _init the internal tee is created
* test app call bin.get_request_pad('src0')
* in _request_new_pad:
* get element state
* request a pad from internal tee
* block this pad if state is PLAYING
* add the "queue ! identity" bin
* create the ghost pad and set target to bin.src
* link tee request pad to bin.sink
* call sync_state_with_parent on the bin (is this ok? right now
bin.src is not linked and the bin is in playing state)
* unblock tee request pad
* test app block received ghost pad
* add queue ! fakesink
* link them to ghost pad
* call sync_state_with_parent on queue and fakesink
* unblock ghost pad
Problems:
* sometime (really often) program hangs on blocking ghost pad
* sometime (not very often) i have segfaults while queue is trying to
fixate caps
A strange thing is that if i change my bin to add "identity !
identity" instead of "queue ! identity" everything works fine.. but i
don't know why! And i need the queue there :)
This is a svg graph of my pipeline after having received the ghost
pad: http://people.freedesktop.org/~skaboy/test76-3.dot.svg
I'm using gstreamer 0.10.21 (core).
ciao
Luca
More information about the gstreamer-devel
mailing list