GNOME Bugzilla – Bug 593035
gdp doesn't preserve fields of the buffers put into the caps' streamheader
Last modified: 2009-08-28 08:32:51 UTC
Using string representation to "serialize" caps info for passing between gdppay and gdpdepay elements strips the buffers put in the caps' streamheader of any fields, preserving just the content. For example, the "multi-process" pipeline: gst-launch-0.10 -v videotestsrc is-live=true ! theoraenc name=encoder ! gdppay ! tcpserversink port=13524 recover-policy=1 & (sleep 1; gst-launch-0.10 -v tcpclientsrc port=13524 ! gdpdepay ! identity name=noop silent=1 ! gdppay ! tcpserversink port=13526 recover-policy=1 ) & ( sleep 2; gst-launch-0.10 -v tcpclientsrc port=13526 ! gdpdepay ! muxer. oggmux name=muxer max-delay=500000000 max-page-delay=500000000 ! fakesink ) will have no buffers arriving on the final fakesink. The header buffers received and deserialized from caps in the second process will have incorrect OFFSET and OFFSET_END fields (set to -1 instead of the original 0) - that in turn will make oggmux in the third process to queue output page buffers indefinitely (due to possibly another oggmux fragility / bug).
note1: if you run a simplified version with only 2 process (no identity process), then oggmux produces buffers as expected. It's only when more than 2 process are involved. Also, any number of (gdppay ! gdpdepay)* works fine without tcp{sink,src} ex: gst-launch-0.10 -v videotestsrc ! theoraenc ! gdppay ! gdpdepay ! gdppay ! gdpdepay ! gdppay ! gdpdepay ! gdppay ! gdpdepay ! oggmux ! fakesin I am now suspecting more multifd.
Created attachment 141868 [details] [review] that is the fix :)
commit 605f3c2942779259f49b13733473521497d0a2bb Author: Marc-André Lureau <mlureau@flumotion.com> Date: Thu Aug 27 18:59:49 2009 +0200 Bug 593035 - set IN_CAPS for streamheader buffer