Commit d4a8ec2f authored by Nicolas Dufresne's avatar Nicolas Dufresne

rtppayload: Fix VP8/VP9/OPUS dual encoding name handling

All these were copy pasted and would lead to assertion when chained with
rtpmux. This commit rewrite the negotiation with downstream. This also
drop the fallback to ancient names if the pad is unlinked. This was
completly arbitrary decision that made no sense.

https://bugzilla.gnome.org/show_bug.cgi?id=796809
parent 354e5d65
......@@ -103,21 +103,28 @@ gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
gboolean res;
GstCaps *src_caps;
GstStructure *s;
char *encoding_name;
const char *encoding_name = "OPUS";
gint channels, rate;
const char *sprop_stereo = NULL;
char *sprop_maxcapturerate = NULL;
src_caps = gst_pad_get_allowed_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload));
if (src_caps) {
src_caps = gst_caps_make_writable (src_caps);
src_caps = gst_caps_truncate (src_caps);
GstStructure *s;
const GValue *value;
s = gst_caps_get_structure (src_caps, 0);
gst_structure_fixate_field_string (s, "encoding-name", "OPUS");
encoding_name = g_strdup (gst_structure_get_string (s, "encoding-name"));
gst_caps_unref (src_caps);
} else {
encoding_name = g_strdup ("X-GST-OPUS-DRAFT-SPITTKA-00");
if (gst_structure_has_field (s, "encoding-name")) {
GValue default_value = G_VALUE_INIT;
g_value_init (&default_value, G_TYPE_STRING);
g_value_set_static_string (&default_value, encoding_name);
value = gst_structure_get_value (s, "encoding-name");
if (!gst_value_can_intersect (&default_value, value))
encoding_name = "X-GST-OPUS-DRAFT-SPITTKA-00";
}
}
s = gst_caps_get_structure (caps, 0);
......@@ -139,7 +146,6 @@ gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
gst_rtp_base_payload_set_options (payload, "audio", FALSE,
encoding_name, 48000);
g_free (encoding_name);
if (sprop_maxcapturerate && sprop_stereo) {
res =
......
......@@ -512,24 +512,30 @@ static gboolean
gst_rtp_vp8_pay_set_caps (GstRTPBasePayload * payload, GstCaps * caps)
{
GstCaps *src_caps;
GstStructure *s;
char *encoding_name;
const char *encoding_name = "VP8";
src_caps = gst_pad_get_allowed_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload));
if (src_caps) {
src_caps = gst_caps_make_writable (src_caps);
src_caps = gst_caps_truncate (src_caps);
GstStructure *s;
const GValue *value;
s = gst_caps_get_structure (src_caps, 0);
gst_structure_fixate_field_string (s, "encoding-name", "VP8");
encoding_name = g_strdup (gst_structure_get_string (s, "encoding-name"));
gst_caps_unref (src_caps);
} else {
encoding_name = g_strdup ("VP8-DRAFT-IETF-01");
if (gst_structure_has_field (s, "encoding-name")) {
GValue default_value = G_VALUE_INIT;
g_value_init (&default_value, G_TYPE_STRING);
g_value_set_static_string (&default_value, encoding_name);
value = gst_structure_get_value (s, "encoding-name");
if (!gst_value_can_intersect (&default_value, value))
encoding_name = "VP8-DRAFT-IETF-01";
}
}
gst_rtp_base_payload_set_options (payload, "video", TRUE,
encoding_name, 90000);
g_free (encoding_name);
return gst_rtp_base_payload_set_outcaps (payload, NULL);
}
......
......@@ -527,24 +527,30 @@ static gboolean
gst_rtp_vp9_pay_set_caps (GstRTPBasePayload * payload, GstCaps * caps)
{
GstCaps *src_caps;
GstStructure *s;
char *encoding_name;
const char *encoding_name = "VP9";
src_caps = gst_pad_get_allowed_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload));
if (src_caps) {
src_caps = gst_caps_make_writable (src_caps);
src_caps = gst_caps_truncate (src_caps);
GstStructure *s;
const GValue *value;
s = gst_caps_get_structure (src_caps, 0);
gst_structure_fixate_field_string (s, "encoding-name", "VP9");
encoding_name = g_strdup (gst_structure_get_string (s, "encoding-name"));
gst_caps_unref (src_caps);
} else {
encoding_name = g_strdup ("VP9-DRAFT-IETF-01");
if (gst_structure_has_field (s, "encoding-name")) {
GValue default_value = G_VALUE_INIT;
g_value_init (&default_value, G_TYPE_STRING);
g_value_set_static_string (&default_value, encoding_name);
value = gst_structure_get_value (s, "encoding-name");
if (!gst_value_can_intersect (&default_value, value))
encoding_name = "VP9-DRAFT-IETF-01";
}
}
gst_rtp_base_payload_set_options (payload, "video", TRUE,
encoding_name, 90000);
g_free (encoding_name);
return gst_rtp_base_payload_set_outcaps (payload, NULL);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment