mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 08:46:40 +00:00
rtpbasepayload: Always prefer downstream's ssrc suggestion if any
Otherwise ssrc changes via rtpsession's (deprecated!) internal-ssrc property are not possible anymore. rtpsession was now patched to only suggest an ssrc if it makes sense to do so. In 2.0 we should get rid of all the properties that are also negotiated via caps, the code and behaviour is too confusing otherwise. https://bugzilla.gnome.org/show_bug.cgi?id=749581
This commit is contained in:
parent
bf5d3bf868
commit
3113e341ea
1 changed files with 24 additions and 42 deletions
|
@ -808,7 +808,7 @@ gst_rtp_base_payload_negotiate (GstRTPBasePayload * payload)
|
|||
GstCaps *temp;
|
||||
GstStructure *s, *d;
|
||||
const GValue *value;
|
||||
gboolean have_pt = FALSE, have_ssrc = FALSE;
|
||||
gboolean have_pt = FALSE;
|
||||
gboolean have_ts_offset = FALSE;
|
||||
gboolean have_seqnum_offset = FALSE;
|
||||
guint max_ptime, ptime;
|
||||
|
@ -824,11 +824,19 @@ gst_rtp_base_payload_negotiate (GstRTPBasePayload * payload)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* We prefer the pt, ssrc, timestamp-offset, seqnum-offset from the
|
||||
/* We prefer the pt, timestamp-offset, seqnum-offset from the
|
||||
* property (if set), or any previously configured value over what
|
||||
* downstream prefers. Only if downstream can't accept that, or the
|
||||
* properties were not set, we fall back to choosing downstream's
|
||||
* preferred value
|
||||
*
|
||||
* For ssrc we prefer any value downstream suggests, otherwise
|
||||
* the property value or as a last resort a random value.
|
||||
* This difference for ssrc is implemented for retaining backwards
|
||||
* compatibility with changing rtpsession's internal-ssrc property.
|
||||
*
|
||||
* FIXME 2.0: All these properties should go away and be negotiated
|
||||
* via caps only!
|
||||
*/
|
||||
|
||||
/* try to use the previously set pt, or the one from the property */
|
||||
|
@ -883,32 +891,7 @@ gst_rtp_base_payload_negotiate (GstRTPBasePayload * payload)
|
|||
s = NULL;
|
||||
}
|
||||
|
||||
/* try to select the previously used ssrc, or the one from the property */
|
||||
if (!payload->priv->ssrc_random
|
||||
|| gst_pad_has_current_caps (payload->srcpad)) {
|
||||
GstCaps *probe_caps = gst_caps_copy (templ);
|
||||
GstCaps *intersection;
|
||||
|
||||
gst_caps_set_simple (probe_caps, "ssrc", G_TYPE_UINT,
|
||||
payload->current_ssrc, NULL);
|
||||
intersection = gst_caps_intersect (probe_caps, temp);
|
||||
|
||||
if (!gst_caps_is_empty (intersection)) {
|
||||
GST_LOG_OBJECT (payload, "Using selected ssrc %08x",
|
||||
payload->current_ssrc);
|
||||
gst_caps_unref (temp);
|
||||
temp = intersection;
|
||||
have_ssrc = TRUE;
|
||||
} else {
|
||||
GST_WARNING_OBJECT (payload, "Can't use selected ssrc %08x",
|
||||
payload->current_ssrc);
|
||||
gst_caps_unref (intersection);
|
||||
}
|
||||
gst_caps_unref (probe_caps);
|
||||
}
|
||||
|
||||
/* If we got no ssrc above, select one now */
|
||||
if (!have_ssrc) {
|
||||
/* get first structure */
|
||||
s = gst_caps_get_structure (temp, 0);
|
||||
|
||||
|
@ -925,7 +908,6 @@ gst_rtp_base_payload_negotiate (GstRTPBasePayload * payload)
|
|||
payload->current_ssrc);
|
||||
}
|
||||
s = NULL;
|
||||
}
|
||||
|
||||
/* try to select the previously used timestamp-offset, or the one from the property */
|
||||
if (!payload->priv->ts_offset_random
|
||||
|
|
Loading…
Reference in a new issue