diff --git a/ChangeLog b/ChangeLog index f6df633649467b4dd07e88977db5b9cd2519ce5e..d2d2c76421c3bb110c537529e10a8a2c6cd24bb9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-09-19 Wim Taymans + + * gst-libs/gst/rtp/gstbasertpdepayload.c: + (gst_base_rtp_depayload_chain), + (gst_base_rtp_depayload_set_gst_timestamp): + Only copy timestamp on outgoing packets if the depayloader did not set + one. + Also copy duration on outgoing packets. + 2007-09-19 Wim Taymans * gst-libs/gst/rtp/gstbasertppayload.c: (copy_fixed), diff --git a/gst-libs/gst/rtp/gstbasertpdepayload.c b/gst-libs/gst/rtp/gstbasertpdepayload.c index 4589fe43235a7618c13147604c22ca6d78c37077..2aa03d5fa0fbde3dbf22f3e9edef20142761c73c 100644 --- a/gst-libs/gst/rtp/gstbasertpdepayload.c +++ b/gst-libs/gst/rtp/gstbasertpdepayload.c @@ -55,6 +55,7 @@ struct _GstBaseRTPDepayloadPrivate gboolean discont; GstClockTime timestamp; + GstClockTime duration; }; /* Filter signals and args */ @@ -260,6 +261,7 @@ gst_base_rtp_depayload_chain (GstPad * pad, GstBuffer * in) timestamp = gst_segment_to_running_time (&filter->segment, GST_FORMAT_TIME, timestamp); priv->timestamp = timestamp; + priv->duration = GST_BUFFER_DURATION (in); bclass = GST_BASE_RTP_DEPAYLOAD_GET_CLASS (filter); @@ -403,11 +405,19 @@ gst_base_rtp_depayload_set_gst_timestamp (GstBaseRTPDepayload * filter, guint32 rtptime, GstBuffer * buf) { GstBaseRTPDepayloadPrivate *priv; + GstClockTime timestamp, duration; priv = filter->priv; - /* apply incomming timestamp to outgoing buffer */ - GST_BUFFER_TIMESTAMP (buf) = priv->timestamp; + timestamp = GST_BUFFER_TIMESTAMP (buf); + duration = GST_BUFFER_DURATION (buf); + + /* apply last incomming timestamp and duration to outgoing buffer if + * not otherwise set. */ + if (!GST_CLOCK_TIME_IS_VALID (timestamp)) + GST_BUFFER_TIMESTAMP (buf) = priv->timestamp; + if (!GST_CLOCK_TIME_IS_VALID (duration)) + GST_BUFFER_DURATION (buf) = priv->duration; /* if this is the first buffer send a NEWSEGMENT */ if (filter->need_newsegment) {