rtpbin: separate out the two fec decoder locations
authorMatthew Waters <matthew@centricular.com>
Tue, 9 Nov 2021 04:10:06 +0000 (15:10 +1100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 10 Nov 2021 10:38:26 +0000 (10:38 +0000)
commit71dd47516c21e73df70c236fad89234d62a3a3be
tree4d82f020b5d3d9c626b77237e09cc1082fb20572
parentbd91286a3b0b787d72e78f3996d7e3dd5327df01
rtpbin: separate out the two fec decoder locations

The pipeline flow for receiving looks like this:

rtpsession ! rtpssrcdemux ! session_fec_decoder ! rtpjitterbuffer ! \
  rtpptdemux ! stream_fec_decoder ! ...

There are two places where a fec decoder could be placed.
1. As requested from the 'request-fec-decoder' signal: after rtpptdemux
   for each ssrc/pt produced
2. after rtpssrcdemux but before rtpjitterbuffer: added for the
   rtpst2022-1-fecenc/dec elements,

However, there was some cross-contamination of the elements involved and
the request-fec-decoder signal was also being used to request the fec
decoder for the session_fec_decoder which would then be cached and
re-used for subsequent fec decoder requests.  This would cause the same
element to be attempted to be linked to multiple elements in different
places in the pipeline.  This would fail and cause all kinds of havoc
usually resulting in a not-linked error being returned upstream and an
error message being posted by the source.

Fix by not using the request-fec-decoder signal for requesting the
session_fec_decoder and instead solely rely on the added properties for
that case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1300>
subprojects/gst-plugins-good/gst/rtpmanager/gstrtpbin.c