basedepayloader: Don't re-timestamp with running-time

There was a confusion, six depayloaders where passing through the
timestamp while the base class was re-timestamping to running
time. This inconstancy has been unnoticed has in most use cases
the incoming segment is [0, inifnity] in which case timestamps are
the same as running time. With DTS/PTS shifting added (to avoid
negative values) and pcapparse sending a different segment this
started being an issue.

https://bugzilla.gnome.org/show_bug.cgi?id=753037
This commit is contained in:
Nicolas Dufresne 2015-08-05 15:32:54 -04:00
parent d259a233a5
commit 6ddab6918d

View file

@ -355,7 +355,6 @@ gst_rtp_base_depayload_handle_buffer (GstRTPBaseDepayload * filter,
GstRTPBaseDepayloadPrivate *priv;
GstFlowReturn ret = GST_FLOW_OK;
GstBuffer *out_buf;
GstClockTime pts, dts;
guint16 seqnum;
guint32 rtptime;
gboolean discont, buf_discont;
@ -376,14 +375,8 @@ gst_rtp_base_depayload_handle_buffer (GstRTPBaseDepayload * filter,
buf_discont = GST_BUFFER_IS_DISCONT (in);
pts = GST_BUFFER_PTS (in);
dts = GST_BUFFER_DTS (in);
/* convert to running_time and save the timestamp, this is the timestamp
* we put on outgoing buffers. */
pts = gst_segment_to_running_time (&filter->segment, GST_FORMAT_TIME, pts);
dts = gst_segment_to_running_time (&filter->segment, GST_FORMAT_TIME, dts);
priv->pts = pts;
priv->dts = dts;
priv->pts = GST_BUFFER_PTS (in);
priv->dts = GST_BUFFER_DTS (in);
priv->duration = GST_BUFFER_DURATION (in);
seqnum = gst_rtp_buffer_get_seq (&rtp);
@ -396,7 +389,7 @@ gst_rtp_base_depayload_handle_buffer (GstRTPBaseDepayload * filter,
GST_LOG_OBJECT (filter, "discont %d, seqnum %u, rtptime %u, pts %"
GST_TIME_FORMAT ", dts %" GST_TIME_FORMAT, buf_discont, seqnum, rtptime,
GST_TIME_ARGS (pts), GST_TIME_ARGS (dts));
GST_TIME_ARGS (priv->pts), GST_TIME_ARGS (priv->dts));
/* Check seqnum. This is a very simple check that makes sure that the seqnums
* are strictly increasing, dropping anything that is out of the ordinary. We
@ -904,17 +897,25 @@ gst_rtp_base_depayload_create_stats (GstRTPBaseDepayload * depayload)
{
GstRTPBaseDepayloadPrivate *priv;
GstStructure *s;
GstClockTime pts, dts;
priv = depayload->priv;
/* FIXME this isn't thread safe */
pts = gst_segment_to_running_time (&depayload->segment, GST_FORMAT_TIME,
priv->pts);
dts = gst_segment_to_running_time (&depayload->segment, GST_FORMAT_TIME,
priv->dts);
s = gst_structure_new ("application/x-rtp-depayload-stats",
"clock_rate", G_TYPE_UINT, depayload->clock_rate,
"npt-start", G_TYPE_UINT64, priv->npt_start,
"npt-stop", G_TYPE_UINT64, priv->npt_stop,
"play-speed", G_TYPE_DOUBLE, priv->play_speed,
"play-scale", G_TYPE_DOUBLE, priv->play_scale,
"running-time-dts", G_TYPE_UINT64, priv->dts,
"running-time-pts", G_TYPE_UINT64, priv->pts,
"running-time-dts", G_TYPE_UINT64, dts,
"running-time-pts", G_TYPE_UINT64, pts,
"seqnum", G_TYPE_UINT, (guint) priv->last_seqnum,
"timestamp", G_TYPE_UINT, (guint) priv->last_rtptime, NULL);