From 25e6dc6013f7695e6893a7f4132cac22c99c62cc Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 20 Sep 2005 11:50:20 +0000 Subject: [PATCH] gst-libs/gst/rtp/gstbasertppayload.*: Make timestamp offset configurable. Original commit message from CVS: * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_class_init), (gst_basertppayload_init), (gst_basertppayload_setcaps), (gst_basertppayload_chain), (gst_basertppayload_set_options), (gst_basertppayload_set_outcaps), (gst_basertppayload_push), (gst_basertppayload_set_property), (gst_basertppayload_get_property), (gst_basertppayload_change_state): * gst-libs/gst/rtp/gstbasertppayload.h: Make timestamp offset configurable. --- ChangeLog | 12 ++++++++ gst-libs/gst/rtp/gstbasertppayload.c | 41 ++++++++++++++++++++-------- gst-libs/gst/rtp/gstbasertppayload.h | 1 + 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index d0191cb64c..f269d95b95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2005-09-20 Wim Taymans + + * gst-libs/gst/rtp/gstbasertppayload.c: + (gst_basertppayload_class_init), (gst_basertppayload_init), + (gst_basertppayload_setcaps), (gst_basertppayload_chain), + (gst_basertppayload_set_options), (gst_basertppayload_set_outcaps), + (gst_basertppayload_push), (gst_basertppayload_set_property), + (gst_basertppayload_get_property), + (gst_basertppayload_change_state): + * gst-libs/gst/rtp/gstbasertppayload.h: + Make timestamp offset configurable. + 2005-09-20 Thomas Vander Stichele * check/pipelines/simple_launch_lines.c: (run_pipeline): diff --git a/gst-libs/gst/rtp/gstbasertppayload.c b/gst-libs/gst/rtp/gstbasertppayload.c index 5c1d875635..58c6a3b3e3 100644 --- a/gst-libs/gst/rtp/gstbasertppayload.c +++ b/gst-libs/gst/rtp/gstbasertppayload.c @@ -32,9 +32,10 @@ enum LAST_SIGNAL }; -#define DEFAULT_MTU 1024 -#define DEFAULT_PT 96 -#define DEFAULT_SSRC 0 +#define DEFAULT_MTU 1024 +#define DEFAULT_PT 96 +#define DEFAULT_SSRC 0 +#define DEFAULT_TIMESTAMP_OFFSET -1 enum { @@ -42,6 +43,7 @@ enum PROP_MTU, PROP_PT, PROP_SSRC, + PROP_TIMESTAMP_OFFSET, PROP_TIMESTAMP, PROP_SEQNUM }; @@ -124,14 +126,19 @@ gst_basertppayload_class_init (GstBaseRTPPayloadClass * klass) g_param_spec_uint ("ssrc", "SSRC", "The SSRC of the packets (0 == random)", 0, G_MAXUINT, DEFAULT_SSRC, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + PROP_TIMESTAMP_OFFSET, g_param_spec_int ("timestamp-offset", + "Timestamp Offset", + "Offset to add to all outgoing timestamps (-1 = random)", -1, + G_MAXINT, DEFAULT_TIMESTAMP_OFFSET, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TIMESTAMP, g_param_spec_uint ("timestamp", "Timestamp", - "The RTP timestamp of the last processed packet", - 0, G_MAXUINT, 0, G_PARAM_READABLE)); + "The RTP timestamp of the last processed packet", 0, G_MAXUINT, 0, + G_PARAM_READABLE)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SEQNUM, g_param_spec_uint ("seqnum", "Sequence number", - "The RTP sequence number of the last processed packet", - 0, G_MAXUINT, 0, G_PARAM_READABLE)); + "The RTP sequence number of the last processed packet", 0, G_MAXUINT, + 0, G_PARAM_READABLE)); gstelement_class->change_state = gst_basertppayload_change_state; @@ -171,6 +178,7 @@ gst_basertppayload_init (GstBaseRTPPayload * basertppayload, gpointer g_class) basertppayload->seqnum = g_rand_int_range (basertppayload->seq_rand, 0, G_MAXUINT16); basertppayload->ssrc = DEFAULT_SSRC; + basertppayload->ts_offset = DEFAULT_TIMESTAMP_OFFSET; basertppayload->ts_base = g_rand_int (basertppayload->ts_rand); basertppayload->clock_rate = 0; @@ -265,11 +273,11 @@ gst_basertppayload_set_outcaps (GstBaseRTPPayload * payload, gchar * fieldname, srccaps = gst_caps_new_simple ("application/x-rtp", "media", G_TYPE_STRING, payload->media, "payload", G_TYPE_INT, GST_BASE_RTP_PAYLOAD_PT (payload), - "clock_rate", G_TYPE_INT, payload->clock_rate, - "encoding_name", G_TYPE_STRING, payload->encoding_name, + "clock-rate", G_TYPE_INT, payload->clock_rate, + "encoding-name", G_TYPE_STRING, payload->encoding_name, "ssrc", G_TYPE_UINT, payload->current_ssrc, - "clock_base", G_TYPE_UINT, payload->ts_base, - "seqnum_base", G_TYPE_UINT, payload->seqnum_base, NULL); + "clock-base", G_TYPE_UINT, payload->ts_base, + "seqnum-base", G_TYPE_UINT, payload->seqnum_base, NULL); s = gst_caps_get_structure (srccaps, 0); if (fieldname) { @@ -348,6 +356,9 @@ gst_basertppayload_set_property (GObject * object, guint prop_id, case PROP_SSRC: basertppayload->ssrc = g_value_get_uint (value); break; + case PROP_TIMESTAMP_OFFSET: + basertppayload->ts_offset = g_value_get_int (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -372,6 +383,9 @@ gst_basertppayload_get_property (GObject * object, guint prop_id, case PROP_SSRC: g_value_set_uint (value, basertppayload->ssrc); break; + case PROP_TIMESTAMP_OFFSET: + g_value_set_int (value, basertppayload->ts_offset); + break; case PROP_TIMESTAMP: g_value_set_uint (value, basertppayload->timestamp); break; @@ -404,7 +418,10 @@ gst_basertppayload_change_state (GstElement * element, basertppayload->current_ssrc = g_rand_int (basertppayload->ssrc_rand); else basertppayload->current_ssrc = basertppayload->ssrc; - basertppayload->ts_base = g_rand_int (basertppayload->ts_rand); + if (basertppayload->ts_offset == -1) + basertppayload->ts_base = g_rand_int (basertppayload->ts_rand); + else + basertppayload->ts_base = basertppayload->ts_offset; break; default: break; diff --git a/gst-libs/gst/rtp/gstbasertppayload.h b/gst-libs/gst/rtp/gstbasertppayload.h index 7a078328fe..84799c849f 100644 --- a/gst-libs/gst/rtp/gstbasertppayload.h +++ b/gst-libs/gst/rtp/gstbasertppayload.h @@ -66,6 +66,7 @@ struct _GstBaseRTPPayload gboolean dynamic; guint32 clock_rate; + gint32 ts_offset; guint32 timestamp; guint16 seqnum; guint pt;