summaryrefslogtreecommitdiffstats
path: root/gst/multipart/multipartmux.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2007-05-03 15:55:06 +0000
committerWim Taymans <wim.taymans@gmail.com>2007-05-03 15:55:06 +0000
commit4d42c097a625e58edff7df569aae0cc058e74979 (patch)
tree7e04fbfbeb1e63d8e0cf2fe64ac255169142b787 /gst/multipart/multipartmux.c
parent5ba2fa6e3f7134a49eac116deeb9ac3f1e5f93a4 (diff)
gst/multipart/multipartmux.c: Fix timestamps on outgoing buffers.
Original commit message from CVS: * gst/multipart/multipartmux.c: (gst_multipart_mux_queue_pads), (gst_multipart_mux_collected): Fix timestamps on outgoing buffers.
Diffstat (limited to 'gst/multipart/multipartmux.c')
-rw-r--r--gst/multipart/multipartmux.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gst/multipart/multipartmux.c b/gst/multipart/multipartmux.c
index 84b52e9e..6584dbe4 100644
--- a/gst/multipart/multipartmux.c
+++ b/gst/multipart/multipartmux.c
@@ -66,7 +66,8 @@ typedef struct
GstCollectData collect; /* we extend the CollectData */
GstBuffer *buffer; /* the queued buffer for this pad */
- GstClockTime timestamp; /* its timestamp */
+ GstClockTime timestamp; /* its timestamp, converted to running_time so that we can
+ correctly sort over multiple segments. */
}
GstMultipartPad;
@@ -382,10 +383,13 @@ gst_multipart_mux_queue_pads (GstMultipartMux * mux)
buf = gst_collect_pads_pop (mux->collect, data);
/* Store timestamp with segment_start and preroll */
- if (buf && GST_BUFFER_TIMESTAMP_IS_VALID (buf))
- pad->timestamp = GST_BUFFER_TIMESTAMP (buf) - data->segment.start;
- else
+ if (buf && GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+ pad->timestamp =
+ gst_segment_to_running_time (&data->segment, GST_FORMAT_TIME,
+ GST_BUFFER_TIMESTAMP (buf));
+ } else {
pad->timestamp = GST_CLOCK_TIME_NONE;
+ }
pad->buffer = buf;
}
@@ -503,6 +507,8 @@ gst_multipart_mux_collected (GstCollectPads * pads, GstMultipartMux * mux)
best->buffer = NULL;
gst_buffer_set_caps (databuf, GST_PAD_CAPS (mux->srcpad));
+ /* we need to updated the timestamp to match the running_time */
+ GST_BUFFER_TIMESTAMP (databuf) = best->timestamp;
GST_BUFFER_OFFSET (databuf) = mux->offset;
mux->offset += GST_BUFFER_SIZE (databuf);
GST_BUFFER_OFFSET_END (databuf) = mux->offset;