diff --git a/gst/rtp/gstrtpopuspay.c b/gst/rtp/gstrtpopuspay.c index b610885658..f353800018 100644 --- a/gst/rtp/gstrtpopuspay.c +++ b/gst/rtp/gstrtpopuspay.c @@ -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 = diff --git a/gst/rtp/gstrtpvp8pay.c b/gst/rtp/gstrtpvp8pay.c index 9649502086..17a7788c11 100644 --- a/gst/rtp/gstrtpvp8pay.c +++ b/gst/rtp/gstrtpvp8pay.c @@ -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); } diff --git a/gst/rtp/gstrtpvp9pay.c b/gst/rtp/gstrtpvp9pay.c index a0b01e1b42..fd1676588f 100644 --- a/gst/rtp/gstrtpvp9pay.c +++ b/gst/rtp/gstrtpvp9pay.c @@ -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); }