summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gst/rtpmanager/gstrtpbin.c196
-rw-r--r--gst/rtpmanager/gstrtpbin.h2
-rw-r--r--gst/rtpmanager/gstrtpsession.c112
3 files changed, 39 insertions, 271 deletions
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c
index 482cf017b..ea391cf1a 100644
--- a/gst/rtpmanager/gstrtpbin.c
+++ b/gst/rtpmanager/gstrtpbin.c
@@ -240,9 +240,3 @@ enum
#define DEFAULT_LATENCY_MS 200
-#define DEFAULT_SDES_CNAME NULL
-#define DEFAULT_SDES_NAME NULL
-#define DEFAULT_SDES_EMAIL NULL
-#define DEFAULT_SDES_PHONE NULL
-#define DEFAULT_SDES_LOCATION NULL
-#define DEFAULT_SDES_TOOL NULL
-#define DEFAULT_SDES_NOTE NULL
+#define DEFAULT_SDES NULL
#define DEFAULT_DO_LOST FALSE
@@ -253,9 +247,3 @@ enum
PROP_LATENCY,
- PROP_SDES_CNAME,
- PROP_SDES_NAME,
- PROP_SDES_EMAIL,
- PROP_SDES_PHONE,
- PROP_SDES_LOCATION,
- PROP_SDES_TOOL,
- PROP_SDES_NOTE,
+ PROP_SDES,
PROP_DO_LOST,
@@ -273,6 +261,2 @@ static GstCaps *pt_map_requested (GstElement * element, guint pt,
GstRtpBinSession * session);
-static const gchar *sdes_type_to_name (GstRTCPSDESType type);
-static void gst_rtp_bin_set_sdes_string (GstRtpBin * bin,
- GstRTCPSDESType type, const gchar * data);
-
static void free_stream (GstRtpBinStream * stream);
@@ -517,3 +501,2 @@ create_session (GstRtpBin * rtpbin, gint id)
GstElement *session, *demux;
- gint i;
GstState target;
@@ -540,5 +523,3 @@ create_session (GstRtpBin * rtpbin, gint id)
GST_OBJECT_LOCK (rtpbin);
- for (i = GST_RTCP_SDES_CNAME; i < GST_RTCP_SDES_PRIV; i++) {
- g_object_set (session, sdes_type_to_name (i), rtpbin->sdes[i], NULL);
- }
+ g_object_set (session, "sdes", rtpbin->sdes, NULL);
GST_OBJECT_UNLOCK (rtpbin);
@@ -1450,36 +1431,6 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
- g_object_class_install_property (gobject_class, PROP_SDES_CNAME,
- g_param_spec_string ("sdes-cname", "SDES CNAME",
- "The CNAME to put in SDES messages of this session",
- DEFAULT_SDES_CNAME, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_NAME,
- g_param_spec_string ("sdes-name", "SDES NAME",
- "The NAME to put in SDES messages of this session",
- DEFAULT_SDES_NAME, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_EMAIL,
- g_param_spec_string ("sdes-email", "SDES EMAIL",
- "The EMAIL to put in SDES messages of this session",
- DEFAULT_SDES_EMAIL, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_PHONE,
- g_param_spec_string ("sdes-phone", "SDES PHONE",
- "The PHONE to put in SDES messages of this session",
- DEFAULT_SDES_PHONE, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_LOCATION,
- g_param_spec_string ("sdes-location", "SDES LOCATION",
- "The LOCATION to put in SDES messages of this session",
- DEFAULT_SDES_LOCATION, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_TOOL,
- g_param_spec_string ("sdes-tool", "SDES TOOL",
- "The TOOL to put in SDES messages of this session",
- DEFAULT_SDES_TOOL, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_NOTE,
- g_param_spec_string ("sdes-note", "SDES NOTE",
- "The NOTE to put in SDES messages of this session",
- DEFAULT_SDES_NOTE, G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, PROP_SDES,
+ g_param_spec_boxed ("sdes", "SDES",
+ "The SDES items of this session",
+ GST_TYPE_STRUCTURE, G_PARAM_READWRITE));
@@ -1519,7 +1470,7 @@ gst_rtp_bin_init (GstRtpBin * rtpbin, GstRtpBinClass * klass)
str = g_strdup_printf ("%s@%s", g_get_user_name (), g_get_host_name ());
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_CNAME, str);
+ rtpbin->sdes = gst_structure_new ("application/x-rtp-source-sdes",
+ "cname", G_TYPE_STRING, str,
+ "name", G_TYPE_STRING, g_get_real_name (),
+ "tool", G_TYPE_STRING, "GStreamer", NULL);
g_free (str);
-
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_NAME, g_get_real_name ());
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_TOOL, "GStreamer");
}
@@ -1549,3 +1500,2 @@ gst_rtp_bin_finalize (GObject * object)
GstRtpBin *rtpbin;
- gint i;
@@ -1553,4 +1503,4 @@ gst_rtp_bin_finalize (GObject * object)
- for (i = 0; i < 9; i++)
- g_free (rtpbin->sdes[i]);
+ if (rtpbin->sdes)
+ gst_structure_free (rtpbin->sdes);
@@ -1562,47 +1512,9 @@ gst_rtp_bin_finalize (GObject * object)
-static const gchar *
-sdes_type_to_name (GstRTCPSDESType type)
-{
- const gchar *result;
-
- switch (type) {
- case GST_RTCP_SDES_CNAME:
- result = "sdes-cname";
- break;
- case GST_RTCP_SDES_NAME:
- result = "sdes-name";
- break;
- case GST_RTCP_SDES_EMAIL:
- result = "sdes-email";
- break;
- case GST_RTCP_SDES_PHONE:
- result = "sdes-phone";
- break;
- case GST_RTCP_SDES_LOC:
- result = "sdes-location";
- break;
- case GST_RTCP_SDES_TOOL:
- result = "sdes-tool";
- break;
- case GST_RTCP_SDES_NOTE:
- result = "sdes-note";
- break;
- case GST_RTCP_SDES_PRIV:
- result = "sdes-priv";
- break;
- default:
- result = NULL;
- break;
- }
- return result;
-}
static void
-gst_rtp_bin_set_sdes_string (GstRtpBin * bin, GstRTCPSDESType type,
- const gchar * data)
+gst_rtp_bin_set_sdes_struct (GstRtpBin * bin, const GstStructure * sdes)
{
GSList *item;
- const gchar *name;
- if (type < 0 || type > 8)
+ if (sdes == NULL)
return;
@@ -1612,8 +1524,9 @@ gst_rtp_bin_set_sdes_string (GstRtpBin * bin, GstRTCPSDESType type,
GST_OBJECT_LOCK (bin);
- g_free (bin->sdes[type]);
- bin->sdes[type] = g_strdup (data);
- name = sdes_type_to_name (type);
+ if (bin->sdes)
+ gst_structure_free (bin->sdes);
+ bin->sdes = gst_structure_copy (sdes);
+
/* store in all sessions */
for (item = bin->sessions; item; item = g_slist_next (item))
- g_object_set (item->data, name, bin->sdes[type], NULL);
+ g_object_set (item->data, "sdes", sdes, NULL);
GST_OBJECT_UNLOCK (bin);
@@ -1623,12 +1536,9 @@ gst_rtp_bin_set_sdes_string (GstRtpBin * bin, GstRTCPSDESType type,
-static gchar *
-gst_rtp_bin_get_sdes_string (GstRtpBin * bin, GstRTCPSDESType type)
+static GstStructure *
+gst_rtp_bin_get_sdes_struct (GstRtpBin * bin)
{
- gchar *result;
-
- if (type < 0 || type > 8)
- return NULL;
+ GstStructure *result;
GST_OBJECT_LOCK (bin);
- result = g_strdup (bin->sdes[type]);
+ result = gst_structure_copy (bin->sdes);
GST_OBJECT_UNLOCK (bin);
@@ -1654,29 +1564,4 @@ gst_rtp_bin_set_property (GObject * object, guint prop_id,
break;
- case PROP_SDES_CNAME:
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_CNAME,
- g_value_get_string (value));
- break;
- case PROP_SDES_NAME:
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_NAME,
- g_value_get_string (value));
- break;
- case PROP_SDES_EMAIL:
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_EMAIL,
- g_value_get_string (value));
- break;
- case PROP_SDES_PHONE:
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_PHONE,
- g_value_get_string (value));
- break;
- case PROP_SDES_LOCATION:
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_LOC,
- g_value_get_string (value));
- break;
- case PROP_SDES_TOOL:
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_TOOL,
- g_value_get_string (value));
- break;
- case PROP_SDES_NOTE:
- gst_rtp_bin_set_sdes_string (rtpbin, GST_RTCP_SDES_NOTE,
- g_value_get_string (value));
+ case PROP_SDES:
+ gst_rtp_bin_set_sdes_struct (rtpbin, g_value_get_boxed (value));
break;
@@ -1708,29 +1593,4 @@ gst_rtp_bin_get_property (GObject * object, guint prop_id,
break;
- case PROP_SDES_CNAME:
- g_value_take_string (value, gst_rtp_bin_get_sdes_string (rtpbin,
- GST_RTCP_SDES_CNAME));
- break;
- case PROP_SDES_NAME:
- g_value_take_string (value, gst_rtp_bin_get_sdes_string (rtpbin,
- GST_RTCP_SDES_NAME));
- break;
- case PROP_SDES_EMAIL:
- g_value_take_string (value, gst_rtp_bin_get_sdes_string (rtpbin,
- GST_RTCP_SDES_EMAIL));
- break;
- case PROP_SDES_PHONE:
- g_value_take_string (value, gst_rtp_bin_get_sdes_string (rtpbin,
- GST_RTCP_SDES_PHONE));
- break;
- case PROP_SDES_LOCATION:
- g_value_take_string (value, gst_rtp_bin_get_sdes_string (rtpbin,
- GST_RTCP_SDES_LOC));
- break;
- case PROP_SDES_TOOL:
- g_value_take_string (value, gst_rtp_bin_get_sdes_string (rtpbin,
- GST_RTCP_SDES_TOOL));
- break;
- case PROP_SDES_NOTE:
- g_value_take_string (value, gst_rtp_bin_get_sdes_string (rtpbin,
- GST_RTCP_SDES_NOTE));
+ case PROP_SDES:
+ g_value_take_boxed (value, gst_rtp_bin_get_sdes_struct (rtpbin));
break;
diff --git a/gst/rtpmanager/gstrtpbin.h b/gst/rtpmanager/gstrtpbin.h
index f47048e5a..bed6ad023 100644
--- a/gst/rtpmanager/gstrtpbin.h
+++ b/gst/rtpmanager/gstrtpbin.h
@@ -55,3 +55,3 @@ struct _GstRtpBin {
/* the default SDES items for sessions */
- gchar *sdes[9];
+ GstStructure *sdes;
diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c
index 9407ee526..dcddb6895 100644
--- a/gst/rtpmanager/gstrtpsession.c
+++ b/gst/rtpmanager/gstrtpsession.c
@@ -202,9 +202,3 @@ enum
#define DEFAULT_RTCP_FRACTION RTP_STATS_RTCP_BANDWIDTH
-#define DEFAULT_SDES_CNAME NULL
-#define DEFAULT_SDES_NAME NULL
-#define DEFAULT_SDES_EMAIL NULL
-#define DEFAULT_SDES_PHONE NULL
-#define DEFAULT_SDES_LOCATION NULL
-#define DEFAULT_SDES_TOOL NULL
-#define DEFAULT_SDES_NOTE NULL
+#define DEFAULT_SDES NULL
#define DEFAULT_NUM_SOURCES 0
@@ -218,9 +212,3 @@ enum
PROP_RTCP_FRACTION,
- PROP_SDES_CNAME,
- PROP_SDES_NAME,
- PROP_SDES_EMAIL,
- PROP_SDES_PHONE,
- PROP_SDES_LOCATION,
- PROP_SDES_TOOL,
- PROP_SDES_NOTE,
+ PROP_SDES,
PROP_NUM_SOURCES,
@@ -557,36 +545,6 @@ gst_rtp_session_class_init (GstRtpSessionClass * klass)
- g_object_class_install_property (gobject_class, PROP_SDES_CNAME,
- g_param_spec_string ("sdes-cname", "SDES CNAME",
- "The CNAME to put in SDES messages of this session",
- DEFAULT_SDES_CNAME, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_NAME,
- g_param_spec_string ("sdes-name", "SDES NAME",
- "The NAME to put in SDES messages of this session",
- DEFAULT_SDES_NAME, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_EMAIL,
- g_param_spec_string ("sdes-email", "SDES EMAIL",
- "The EMAIL to put in SDES messages of this session",
- DEFAULT_SDES_EMAIL, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_PHONE,
- g_param_spec_string ("sdes-phone", "SDES PHONE",
- "The PHONE to put in SDES messages of this session",
- DEFAULT_SDES_PHONE, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_LOCATION,
- g_param_spec_string ("sdes-location", "SDES LOCATION",
- "The LOCATION to put in SDES messages of this session",
- DEFAULT_SDES_LOCATION, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_TOOL,
- g_param_spec_string ("sdes-tool", "SDES TOOL",
- "The TOOL to put in SDES messages of this session",
- DEFAULT_SDES_TOOL, G_PARAM_READWRITE));
-
- g_object_class_install_property (gobject_class, PROP_SDES_NOTE,
- g_param_spec_string ("sdes-note", "SDES NOTE",
- "The NOTE to put in SDES messages of this session",
- DEFAULT_SDES_NOTE, G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, PROP_SDES,
+ g_param_spec_boxed ("sdes", "SDES",
+ "The SDES items of this session",
+ GST_TYPE_STRUCTURE, G_PARAM_READWRITE));
@@ -706,29 +664,4 @@ gst_rtp_session_set_property (GObject * object, guint prop_id,
break;
- case PROP_SDES_CNAME:
- rtp_session_set_sdes_string (priv->session, GST_RTCP_SDES_CNAME,
- g_value_get_string (value));
- break;
- case PROP_SDES_NAME:
- rtp_session_set_sdes_string (priv->session, GST_RTCP_SDES_NAME,
- g_value_get_string (value));
- break;
- case PROP_SDES_EMAIL:
- rtp_session_set_sdes_string (priv->session, GST_RTCP_SDES_EMAIL,
- g_value_get_string (value));
- break;
- case PROP_SDES_PHONE:
- rtp_session_set_sdes_string (priv->session, GST_RTCP_SDES_PHONE,
- g_value_get_string (value));
- break;
- case PROP_SDES_LOCATION:
- rtp_session_set_sdes_string (priv->session, GST_RTCP_SDES_LOC,
- g_value_get_string (value));
- break;
- case PROP_SDES_TOOL:
- rtp_session_set_sdes_string (priv->session, GST_RTCP_SDES_TOOL,
- g_value_get_string (value));
- break;
- case PROP_SDES_NOTE:
- rtp_session_set_sdes_string (priv->session, GST_RTCP_SDES_NOTE,
- g_value_get_string (value));
+ case PROP_SDES:
+ rtp_session_set_sdes_struct (priv->session, g_value_get_boxed (value));
break;
@@ -762,29 +695,4 @@ gst_rtp_session_get_property (GObject * object, guint prop_id,
break;
- case PROP_SDES_CNAME:
- g_value_take_string (value, rtp_session_get_sdes_string (priv->session,
- GST_RTCP_SDES_CNAME));
- break;
- case PROP_SDES_NAME:
- g_value_take_string (value, rtp_session_get_sdes_string (priv->session,
- GST_RTCP_SDES_NAME));
- break;
- case PROP_SDES_EMAIL:
- g_value_take_string (value, rtp_session_get_sdes_string (priv->session,
- GST_RTCP_SDES_EMAIL));
- break;
- case PROP_SDES_PHONE:
- g_value_take_string (value, rtp_session_get_sdes_string (priv->session,
- GST_RTCP_SDES_PHONE));
- break;
- case PROP_SDES_LOCATION:
- g_value_take_string (value, rtp_session_get_sdes_string (priv->session,
- GST_RTCP_SDES_LOC));
- break;
- case PROP_SDES_TOOL:
- g_value_take_string (value, rtp_session_get_sdes_string (priv->session,
- GST_RTCP_SDES_TOOL));
- break;
- case PROP_SDES_NOTE:
- g_value_take_string (value, rtp_session_get_sdes_string (priv->session,
- GST_RTCP_SDES_NOTE));
+ case PROP_SDES:
+ g_value_take_boxed (value, rtp_session_get_sdes_struct (priv->session));
break;