rtpbin: proxy jitterbuffer do-retransmission property

This commit is contained in:
Wim Taymans 2013-08-23 11:55:02 +02:00
parent 23d4044e2c
commit 84833bed11
2 changed files with 23 additions and 0 deletions

View file

@ -253,6 +253,7 @@ enum
#define DEFAULT_RTCP_SYNC GST_RTP_BIN_RTCP_SYNC_ALWAYS #define DEFAULT_RTCP_SYNC GST_RTP_BIN_RTCP_SYNC_ALWAYS
#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
enum enum
{ {
@ -269,6 +270,7 @@ 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_LAST PROP_LAST
}; };
@ -1429,6 +1431,7 @@ create_stream (GstRtpBinSession * session, guint32 ssrc)
g_object_set (buffer, "drop-on-latency", rtpbin->drop_on_latency, NULL); g_object_set (buffer, "drop-on-latency", rtpbin->drop_on_latency, NULL);
g_object_set (buffer, "do-lost", rtpbin->do_lost, NULL); g_object_set (buffer, "do-lost", rtpbin->do_lost, NULL);
g_object_set (buffer, "mode", rtpbin->buffer_mode, NULL); g_object_set (buffer, "mode", rtpbin->buffer_mode, NULL);
g_object_set (buffer, "do-retransmission", rtpbin->do_retransmission, NULL);
if (!rtpbin->ignore_pt) if (!rtpbin->ignore_pt)
gst_bin_add (GST_BIN_CAST (rtpbin), demux); gst_bin_add (GST_BIN_CAST (rtpbin), demux);
@ -1867,6 +1870,12 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
"Send event downstream when a stream is synchronized to the sender", "Send event downstream when a stream is synchronized to the sender",
DEFAULT_DO_SYNC_EVENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); DEFAULT_DO_SYNC_EVENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_DO_RETRANSMISSION,
g_param_spec_boolean ("do-retransmission", "Do retransmission",
"Send an event downstream to request packet retransmission",
DEFAULT_DO_RETRANSMISSION,
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);
@ -1924,6 +1933,7 @@ gst_rtp_bin_init (GstRtpBin * rtpbin)
rtpbin->buffer_mode = DEFAULT_BUFFER_MODE; rtpbin->buffer_mode = DEFAULT_BUFFER_MODE;
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;
/* 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 ());
@ -2077,6 +2087,13 @@ gst_rtp_bin_set_property (GObject * object, guint prop_id,
/* propagate the property down to the jitterbuffer */ /* propagate the property down to the jitterbuffer */
gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin, "mode", value); gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin, "mode", value);
break; break;
case PROP_DO_RETRANSMISSION:
GST_RTP_BIN_LOCK (rtpbin);
rtpbin->do_retransmission = g_value_get_boolean (value);
GST_RTP_BIN_UNLOCK (rtpbin);
gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin,
"do-retransmission", 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;
@ -2134,6 +2151,11 @@ gst_rtp_bin_get_property (GObject * object, guint prop_id,
case PROP_DO_SYNC_EVENT: case PROP_DO_SYNC_EVENT:
g_value_set_boolean (value, rtpbin->send_sync_event); g_value_set_boolean (value, rtpbin->send_sync_event);
break; break;
case PROP_DO_RETRANSMISSION:
GST_RTP_BIN_LOCK (rtpbin);
g_value_set_boolean (value, rtpbin->do_retransmission);
GST_RTP_BIN_UNLOCK (rtpbin);
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;

View file

@ -58,6 +58,7 @@ struct _GstRtpBin {
gboolean use_pipeline_clock; gboolean use_pipeline_clock;
gboolean send_sync_event; gboolean send_sync_event;
GstClockTime buffer_start; GstClockTime buffer_start;
gboolean do_retransmission;
/* a list of session */ /* a list of session */
GSList *sessions; GSList *sessions;