gst-libs/gst/rtp/gstbasertppayload.c: Make sure we start our RTP timestamp from the random base RTP timestamp even if...

Original commit message from CVS:
* gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_event),
(gst_basertppayload_set_outcaps), (gst_basertppayload_push),
(gst_basertppayload_change_state):
Make sure we start our RTP timestamp from the random base RTP
timestamp even if the buffer timestamp starts from some random value.
This commit is contained in:
Wim Taymans 2007-09-14 20:52:00 +00:00
parent 7eb8a5d24a
commit 06ded6258e
2 changed files with 25 additions and 4 deletions

View file

@ -1,3 +1,11 @@
2007-09-14 Wim Taymans <wim.taymans@gmail.com>
* gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_event),
(gst_basertppayload_set_outcaps), (gst_basertppayload_push),
(gst_basertppayload_change_state):
Make sure we start our RTP timestamp from the random base RTP
timestamp even if the buffer timestamp starts from some random value.
2007-09-14 Wim Taymans <wim.taymans@gmail.com> 2007-09-14 Wim Taymans <wim.taymans@gmail.com>
* configure.ac: * configure.ac:

View file

@ -45,6 +45,8 @@ struct _GstBaseRTPPayloadPrivate
gboolean seqnum_offset_random; gboolean seqnum_offset_random;
gboolean ssrc_random; gboolean ssrc_random;
guint16 next_seqnum; guint16 next_seqnum;
GstClockTime rt_base;
}; };
/* BaseRTPPayload signals and args */ /* BaseRTPPayload signals and args */
@ -364,8 +366,9 @@ gst_basertppayload_event (GstPad * pad, GstEvent * event)
&position); &position);
gst_segment_set_newsegment (&basertppayload->segment, update, rate, fmt, gst_segment_set_newsegment (&basertppayload->segment, update, rate, fmt,
start, stop, position); start, stop, position);
}
/* fallthrough */ /* fallthrough */
}
default: default:
res = gst_pad_event_default (pad, event); res = gst_pad_event_default (pad, event);
break; break;
@ -467,7 +470,6 @@ gst_basertppayload_set_outcaps (GstBaseRTPPayload * payload, gchar * fieldname,
va_end (varargs); va_end (varargs);
} }
/* the peer caps can override some of the defaults */ /* the peer caps can override some of the defaults */
peercaps = gst_pad_peer_get_caps (payload->srcpad); peercaps = gst_pad_peer_get_caps (payload->srcpad);
if (peercaps == NULL) { if (peercaps == NULL) {
@ -610,9 +612,18 @@ gst_basertppayload_push (GstBaseRTPPayload * payload, GstBuffer * buffer)
if (GST_CLOCK_TIME_IS_VALID (timestamp)) { if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
gint64 rtime; gint64 rtime;
rtime = rtime = gst_segment_to_running_time (&payload->segment, GST_FORMAT_TIME,
gst_segment_to_running_time (&payload->segment, GST_FORMAT_TIME,
timestamp); timestamp);
/* take first timestamp as base, we want to calculate the RTP timestamp
* starting from the ts_base */
if (priv->rt_base == -1) {
priv->rt_base = timestamp;
GST_LOG_OBJECT (payload, "first timestamp %" GST_TIME_FORMAT,
GST_TIME_ARGS (timestamp));
}
rtime -= priv->rt_base;
rtime = gst_util_uint64_scale_int (rtime, payload->clock_rate, GST_SECOND); rtime = gst_util_uint64_scale_int (rtime, payload->clock_rate, GST_SECOND);
ts += rtime; ts += rtime;
@ -775,6 +786,8 @@ gst_basertppayload_change_state (GstElement * element,
basertppayload->ts_base = g_rand_int (basertppayload->ts_rand); basertppayload->ts_base = g_rand_int (basertppayload->ts_rand);
else else
basertppayload->ts_base = basertppayload->ts_offset; basertppayload->ts_base = basertppayload->ts_offset;
priv->rt_base = -1;
break; break;
default: default:
break; break;