rtphdrext: Add helper function to set fields in caps
authorOlivier CrĂȘte <olivier.crete@collabora.com>
Fri, 24 Sep 2021 16:51:01 +0000 (12:51 -0400)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 28 Sep 2021 20:04:55 +0000 (20:04 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906>

subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtphdrext.c
subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtphdrext.h

index 948c8b9..6791952 100644 (file)
@@ -652,8 +652,8 @@ gst_rtp_header_extension_get_sdp_caps_field_name (GstRTPHeaderExtension * ext)
   return g_strdup_printf ("extmap-%u", priv->ext_id);
 }
 
-/*
- * gst_rtp_header_extension_set_caps_from_attributes_default
+/**
+ * gst_rtp_header_extension_set_caps_from_attributes_helper:
  * @ext: the #GstRTPHeaderExtension
  * @caps: #GstCaps to write fields into
  *
@@ -665,17 +665,20 @@ gst_rtp_header_extension_get_sdp_caps_field_name (GstRTPHeaderExtension * ext)
  * advertised in @caps.
  *
  * Returns: whether the @ext attributes could be set on @caps.
+ *
+ * Since: 1.20
  */
-static gboolean
-gst_rtp_header_extension_set_caps_from_attributes_default (GstRTPHeaderExtension
-    * ext, GstCaps * caps)
+gboolean
+gst_rtp_header_extension_set_caps_from_attributes_helper (GstRTPHeaderExtension
+    * ext, GstCaps * caps, const gchar * attributes)
 {
   GstRTPHeaderExtensionPrivate *priv =
       gst_rtp_header_extension_get_instance_private (ext);
   gchar *field_name = gst_rtp_header_extension_get_sdp_caps_field_name (ext);
   GstStructure *s = gst_caps_get_structure (caps, 0);
 
-  if (priv->direction & GST_RTP_HEADER_EXTENSION_DIRECTION_INHERITED) {
+  if (priv->direction & GST_RTP_HEADER_EXTENSION_DIRECTION_INHERITED &&
+      (attributes == NULL || attributes[0] == 0)) {
     gst_structure_set (s, field_name, G_TYPE_STRING,
         gst_rtp_header_extension_get_uri (ext), NULL);
   } else {
@@ -705,7 +708,7 @@ gst_rtp_header_extension_set_caps_from_attributes_default (GstRTPHeaderExtension
     gst_value_array_append_value (&arr, &val);
 
     /* attributes */
-    g_value_set_string (&val, "");
+    g_value_set_string (&val, attributes);
     gst_value_array_append_value (&arr, &val);
 
     gst_structure_set_value (s, field_name, &arr);
@@ -721,6 +724,14 @@ gst_rtp_header_extension_set_caps_from_attributes_default (GstRTPHeaderExtension
 }
 
 static gboolean
+gst_rtp_header_extension_set_caps_from_attributes_default (GstRTPHeaderExtension
+    * ext, GstCaps * caps)
+{
+  return gst_rtp_header_extension_set_caps_from_attributes_helper (ext, caps,
+      NULL);
+}
+
+static gboolean
 gst_rtp_ext_list_filter (GstPluginFeature * feature, gpointer user_data)
 {
   GstElementFactory *factory;
index 5fbf013..73e6daf 100644 (file)
@@ -281,6 +281,11 @@ void                   gst_rtp_header_extension_set_direction (GstRTPHeaderExtension *
 GST_RTP_API
 GstRTPHeaderExtensionDirection gst_rtp_header_extension_get_direction (GstRTPHeaderExtension * ext);
 
+GST_RTP_API
+gboolean    gst_rtp_header_extension_set_caps_from_attributes_helper (GstRTPHeaderExtension * ext,
+                                                                      GstCaps * caps,
+                                                                      const gchar * attributes);
+
 G_END_DECLS
 
 #endif /* __GST_RTPHDREXT_H__ */