mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-07-04 21:55:55 +00:00
webrtc receivebin: Only set queue to leaky when the pad is blocked
When the pad is no longer blocked, remove the leakyness to make sure everything gets into the jitterbuffer. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2363>
This commit is contained in:
parent
a07e52528c
commit
543fcb93a4
|
@ -136,6 +136,8 @@ transport_receive_bin_set_receive_state (TransportReceiveBin * receive,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state == RECEIVE_STATE_PASS) {
|
if (state == RECEIVE_STATE_PASS) {
|
||||||
|
g_object_set (receive->queue, "leaky", 0, NULL);
|
||||||
|
|
||||||
if (receive->rtp_block)
|
if (receive->rtp_block)
|
||||||
_free_pad_block (receive->rtp_block);
|
_free_pad_block (receive->rtp_block);
|
||||||
receive->rtp_block = NULL;
|
receive->rtp_block = NULL;
|
||||||
|
@ -145,6 +147,7 @@ transport_receive_bin_set_receive_state (TransportReceiveBin * receive,
|
||||||
receive->rtcp_block = NULL;
|
receive->rtcp_block = NULL;
|
||||||
} else {
|
} else {
|
||||||
g_assert (state == RECEIVE_STATE_BLOCK);
|
g_assert (state == RECEIVE_STATE_BLOCK);
|
||||||
|
g_object_set (receive->queue, "leaky", 2, NULL);
|
||||||
if (receive->rtp_block == NULL) {
|
if (receive->rtp_block == NULL) {
|
||||||
GstWebRTCDTLSTransport *transport;
|
GstWebRTCDTLSTransport *transport;
|
||||||
GstElement *dtlssrtpdec;
|
GstElement *dtlssrtpdec;
|
||||||
|
@ -297,7 +300,7 @@ transport_receive_bin_constructed (GObject * object)
|
||||||
TransportReceiveBin *receive = TRANSPORT_RECEIVE_BIN (object);
|
TransportReceiveBin *receive = TRANSPORT_RECEIVE_BIN (object);
|
||||||
GstWebRTCDTLSTransport *transport;
|
GstWebRTCDTLSTransport *transport;
|
||||||
GstPad *ghost, *pad;
|
GstPad *ghost, *pad;
|
||||||
GstElement *capsfilter, *queue;
|
GstElement *capsfilter;
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
|
|
||||||
g_return_if_fail (receive->stream);
|
g_return_if_fail (receive->stream);
|
||||||
|
@ -311,18 +314,20 @@ transport_receive_bin_constructed (GObject * object)
|
||||||
g_object_set (capsfilter, "caps", caps, NULL);
|
g_object_set (capsfilter, "caps", caps, NULL);
|
||||||
gst_caps_unref (caps);
|
gst_caps_unref (caps);
|
||||||
|
|
||||||
queue = gst_element_factory_make ("queue", NULL);
|
receive->queue = gst_element_factory_make ("queue", NULL);
|
||||||
/* FIXME: make this configurable? */
|
/* FIXME: make this configurable? */
|
||||||
g_object_set (queue, "leaky", 2, "max-size-time", (guint64) 0,
|
g_object_set (receive->queue, "leaky", 2, "max-size-time", (guint64) 0,
|
||||||
"max-size-buffers", 0, "max-size-bytes", 5 * 1024 * 1024, NULL);
|
"max-size-buffers", 0, "max-size-bytes", 5 * 1024 * 1024, NULL);
|
||||||
g_signal_connect (queue, "overrun", G_CALLBACK (rtp_queue_overrun), receive);
|
g_signal_connect (receive->queue, "overrun", G_CALLBACK (rtp_queue_overrun),
|
||||||
|
receive);
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (receive), GST_ELEMENT (queue));
|
gst_bin_add (GST_BIN (receive), GST_ELEMENT (receive->queue));
|
||||||
gst_bin_add (GST_BIN (receive), GST_ELEMENT (capsfilter));
|
gst_bin_add (GST_BIN (receive), GST_ELEMENT (capsfilter));
|
||||||
if (!gst_element_link_pads (capsfilter, "src", queue, "sink"))
|
if (!gst_element_link_pads (capsfilter, "src", receive->queue, "sink"))
|
||||||
g_warn_if_reached ();
|
g_warn_if_reached ();
|
||||||
|
|
||||||
if (!gst_element_link_pads (queue, "src", transport->dtlssrtpdec, "sink"))
|
if (!gst_element_link_pads (receive->queue, "src", transport->dtlssrtpdec,
|
||||||
|
"sink"))
|
||||||
g_warn_if_reached ();
|
g_warn_if_reached ();
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (receive), GST_ELEMENT (transport->transport->src));
|
gst_bin_add (GST_BIN (receive), GST_ELEMENT (transport->transport->src));
|
||||||
|
|
|
@ -52,6 +52,7 @@ struct _TransportReceiveBin
|
||||||
struct pad_block *rtcp_block;
|
struct pad_block *rtcp_block;
|
||||||
GMutex pad_block_lock;
|
GMutex pad_block_lock;
|
||||||
ReceiveState receive_state;
|
ReceiveState receive_state;
|
||||||
|
GstElement *queue;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _TransportReceiveBinClass
|
struct _TransportReceiveBinClass
|
||||||
|
|
Loading…
Reference in a new issue