diff options
-rw-r--r-- | gst/rtpmanager/gstrtpbin.c | 196 | ||||
-rw-r--r-- | gst/rtpmanager/gstrtpbin.h | 2 | ||||
-rw-r--r-- | gst/rtpmanager/gstrtpsession.c | 112 |
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; |