Commit 506a8a88 authored by Sebastian Dröge's avatar Sebastian Dröge 🍵

rtpbin: Add rtp-profile property for setting the default profile of newly created sessions

https://bugzilla.gnome.org/show_bug.cgi?id=746543
parent 0f7e80ed
...@@ -288,6 +288,7 @@ enum ...@@ -288,6 +288,7 @@ enum
#define DEFAULT_RTCP_SYNC_INTERVAL 0 #define DEFAULT_RTCP_SYNC_INTERVAL 0
#define DEFAULT_DO_SYNC_EVENT FALSE #define DEFAULT_DO_SYNC_EVENT FALSE
#define DEFAULT_DO_RETRANSMISSION FALSE #define DEFAULT_DO_RETRANSMISSION FALSE
#define DEFAULT_RTP_PROFILE GST_RTP_PROFILE_AVPF
enum enum
{ {
...@@ -304,7 +305,8 @@ enum ...@@ -304,7 +305,8 @@ enum
PROP_BUFFER_MODE, PROP_BUFFER_MODE,
PROP_USE_PIPELINE_CLOCK, PROP_USE_PIPELINE_CLOCK,
PROP_DO_SYNC_EVENT, PROP_DO_SYNC_EVENT,
PROP_DO_RETRANSMISSION PROP_DO_RETRANSMISSION,
PROP_RTP_PROFILE
}; };
#define GST_RTP_BIN_RTCP_SYNC_TYPE (gst_rtp_bin_rtcp_sync_get_type()) #define GST_RTP_BIN_RTCP_SYNC_TYPE (gst_rtp_bin_rtcp_sync_get_type())
...@@ -621,7 +623,7 @@ create_session (GstRtpBin * rtpbin, gint id) ...@@ -621,7 +623,7 @@ create_session (GstRtpBin * rtpbin, gint id)
/* configure SDES items */ /* configure SDES items */
GST_OBJECT_LOCK (rtpbin); GST_OBJECT_LOCK (rtpbin);
g_object_set (session, "sdes", rtpbin->sdes, "use-pipeline-clock", g_object_set (session, "sdes", rtpbin->sdes, "use-pipeline-clock",
rtpbin->use_pipeline_clock, NULL); rtpbin->use_pipeline_clock, "rtp-profile", rtpbin->rtp_profile, NULL);
GST_OBJECT_UNLOCK (rtpbin); GST_OBJECT_UNLOCK (rtpbin);
/* provide clock_rate to the session manager when needed */ /* provide clock_rate to the session manager when needed */
...@@ -2125,6 +2127,18 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass) ...@@ -2125,6 +2127,18 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
DEFAULT_DO_RETRANSMISSION, DEFAULT_DO_RETRANSMISSION,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
* GstRtpBin:rtp-profile:
*
* Sets the default RTP profile of newly created RTP sessions. The
* profile can be changed afterwards on a per-session basis.
*/
g_object_class_install_property (gobject_class, PROP_RTP_PROFILE,
g_param_spec_enum ("rtp-profile", "RTP Profile",
"Default RTP profile of newly created sessions",
GST_TYPE_RTP_PROFILE, DEFAULT_RTP_PROFILE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rtp_bin_change_state); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rtp_bin_change_state);
gstelement_class->request_new_pad = gstelement_class->request_new_pad =
GST_DEBUG_FUNCPTR (gst_rtp_bin_request_new_pad); GST_DEBUG_FUNCPTR (gst_rtp_bin_request_new_pad);
...@@ -2187,6 +2201,7 @@ gst_rtp_bin_init (GstRtpBin * rtpbin) ...@@ -2187,6 +2201,7 @@ gst_rtp_bin_init (GstRtpBin * rtpbin)
rtpbin->use_pipeline_clock = DEFAULT_USE_PIPELINE_CLOCK; rtpbin->use_pipeline_clock = DEFAULT_USE_PIPELINE_CLOCK;
rtpbin->send_sync_event = DEFAULT_DO_SYNC_EVENT; rtpbin->send_sync_event = DEFAULT_DO_SYNC_EVENT;
rtpbin->do_retransmission = DEFAULT_DO_RETRANSMISSION; rtpbin->do_retransmission = DEFAULT_DO_RETRANSMISSION;
rtpbin->rtp_profile = DEFAULT_RTP_PROFILE;
/* some default SDES entries */ /* some default SDES entries */
cname = g_strdup_printf ("user%u@host-%x", g_random_int (), g_random_int ()); cname = g_strdup_printf ("user%u@host-%x", g_random_int (), g_random_int ());
...@@ -2347,6 +2362,9 @@ gst_rtp_bin_set_property (GObject * object, guint prop_id, ...@@ -2347,6 +2362,9 @@ gst_rtp_bin_set_property (GObject * object, guint prop_id,
gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin, gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin,
"do-retransmission", value); "do-retransmission", value);
break; break;
case PROP_RTP_PROFILE:
rtpbin->rtp_profile = g_value_get_enum (value);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
...@@ -2409,6 +2427,9 @@ gst_rtp_bin_get_property (GObject * object, guint prop_id, ...@@ -2409,6 +2427,9 @@ gst_rtp_bin_get_property (GObject * object, guint prop_id,
g_value_set_boolean (value, rtpbin->do_retransmission); g_value_set_boolean (value, rtpbin->do_retransmission);
GST_RTP_BIN_UNLOCK (rtpbin); GST_RTP_BIN_UNLOCK (rtpbin);
break; break;
case PROP_RTP_PROFILE:
g_value_set_enum (value, rtpbin->rtp_profile);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
......
...@@ -66,6 +66,8 @@ struct _GstRtpBin { ...@@ -66,6 +66,8 @@ struct _GstRtpBin {
gboolean send_sync_event; gboolean send_sync_event;
GstClockTime buffer_start; GstClockTime buffer_start;
gboolean do_retransmission; gboolean do_retransmission;
GstRTPProfile rtp_profile;
/* a list of session */ /* a list of session */
GSList *sessions; GSList *sessions;
......
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