mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-30 12:10:37 +00:00
8b96d8ee8d
The key is to make sure the jitterbuffer is set to NULL *before* the ptdemux. The race that existed would basically happen when ptdemux had reached READY, and the jitterbuffer would then push a buffer, triggering a new pad with a new payloadtype being added and ghosted to the rtpbin itself. However, the srcpad of the ptdemux would now be inactive, and all the sticky-event pushed on it would be swallowed, not allowing any to reach the ghost-pad. Then the buffer in-flight would come to the ghostpad, and we would assert that a buffer arrived before the necessary events. By simply re-ordering the state-changes, we ensure that there will be no buffer racing into the ptdemux while its state is being changed, and the problem disappears completely. Notice also that there is not point in disconnecting the signals on the ptdemux before this point, since we need the push-thread to settle down before we can do this in a non-racy way. |
||
---|---|---|
.. | ||
gstrtpbin.c | ||
gstrtpbin.h | ||
gstrtpdtmfmux.c | ||
gstrtpdtmfmux.h | ||
gstrtpfunnel.c | ||
gstrtpfunnel.h | ||
gstrtpjitterbuffer.c | ||
gstrtpjitterbuffer.h | ||
gstrtpmanager.c | ||
gstrtpmux.c | ||
gstrtpmux.h | ||
gstrtpptdemux.c | ||
gstrtpptdemux.h | ||
gstrtprtxqueue.c | ||
gstrtprtxqueue.h | ||
gstrtprtxreceive.c | ||
gstrtprtxreceive.h | ||
gstrtprtxsend.c | ||
gstrtprtxsend.h | ||
gstrtpsession.c | ||
gstrtpsession.h | ||
gstrtpssrcdemux.c | ||
gstrtpssrcdemux.h | ||
meson.build | ||
rtpjitterbuffer.c | ||
rtpjitterbuffer.h | ||
rtpsession.c | ||
rtpsession.h | ||
rtpsource.c | ||
rtpsource.h | ||
rtpstats.c | ||
rtpstats.h | ||
rtptimerqueue.c | ||
rtptimerqueue.h |