mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
webrtc receivebin: Drop serialized queries before receive queue
If they're not dropped, they can be blocked in the queue even if it is leaky in the case where there is a buffer being pushed downstream. Since in webrtc, it's unlikely that there will be a special allocator to receive RTP packets, there is almost no downside to just ignoring the queries. Also drop queries if they get caught in the pad probe after the queue. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2363>
This commit is contained in:
parent
543fcb93a4
commit
e548916d85
1 changed files with 18 additions and 1 deletions
|
@ -96,7 +96,7 @@ pad_block (GstPad * pad, GstPadProbeInfo * info, TransportReceiveBin * receive)
|
|||
* them. Sticky events would be forwarded again later once we unblock
|
||||
* and we don't want to forward them here already because that might
|
||||
* cause a spurious GST_FLOW_FLUSHING */
|
||||
if (GST_IS_EVENT (info->data))
|
||||
if (GST_IS_EVENT (info->data) || GST_IS_QUERY (info->data))
|
||||
return GST_PAD_PROBE_DROP;
|
||||
|
||||
/* But block on any actual data-flow so we don't accidentally send that
|
||||
|
@ -294,6 +294,18 @@ rtp_queue_overrun (GstElement * queue, TransportReceiveBin * receive)
|
|||
GST_WARNING_OBJECT (receive, "Internal receive queue overrun. Dropping data");
|
||||
}
|
||||
|
||||
static GstPadProbeReturn
|
||||
drop_serialized_queries (GstPad * pad, GstPadProbeInfo * info,
|
||||
TransportReceiveBin * receive)
|
||||
{
|
||||
GstQuery *query = GST_PAD_PROBE_INFO_QUERY (info);
|
||||
|
||||
if (GST_QUERY_IS_SERIALIZED (query))
|
||||
return GST_PAD_PROBE_DROP;
|
||||
else
|
||||
return GST_PAD_PROBE_PASS;
|
||||
}
|
||||
|
||||
static void
|
||||
transport_receive_bin_constructed (GObject * object)
|
||||
{
|
||||
|
@ -321,6 +333,11 @@ transport_receive_bin_constructed (GObject * object)
|
|||
g_signal_connect (receive->queue, "overrun", G_CALLBACK (rtp_queue_overrun),
|
||||
receive);
|
||||
|
||||
pad = gst_element_get_static_pad (receive->queue, "sink");
|
||||
gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM,
|
||||
(GstPadProbeCallback) drop_serialized_queries, receive, NULL);
|
||||
gst_object_unref (pad);
|
||||
|
||||
gst_bin_add (GST_BIN (receive), GST_ELEMENT (receive->queue));
|
||||
gst_bin_add (GST_BIN (receive), GST_ELEMENT (capsfilter));
|
||||
if (!gst_element_link_pads (capsfilter, "src", receive->queue, "sink"))
|
||||
|
|
Loading…
Reference in a new issue