diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2012-07-20 15:18:46 +0200 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2012-07-20 16:09:33 +0200 |
commit | ec7f7264dc56374014d10a4b602617d54ab6e90d (patch) | |
tree | 795f710931b01c49c9d59a4f9da2b3d8f4619e10 /gst/interleave | |
parent | 4dfb79652708632214d6f08889c09a3de3159276 (diff) | |
download | gstreamer-plugins-good-ec7f7264dc56374014d10a4b602617d54ab6e90d.tar.gz |
interleave: convert the output segment to time
Convert the stored input segment to time before pushing it out.
Conflicts:
gst/interleave/interleave.c
Diffstat (limited to 'gst/interleave')
-rw-r--r-- | gst/interleave/interleave.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/gst/interleave/interleave.c b/gst/interleave/interleave.c index ab8266896..63424ca0b 100644 --- a/gst/interleave/interleave.c +++ b/gst/interleave/interleave.c @@ -831,11 +831,13 @@ gst_interleave_sink_event (GstCollectPads * pads, GstCollectData * data, gst_event_replace (&self->pending_segment, NULL); GST_OBJECT_UNLOCK (self); break; - case GST_EVENT_NEWSEGMENT: + case GST_EVENT_SEGMENT: + { GST_OBJECT_LOCK (self); gst_event_replace (&self->pending_segment, event); GST_OBJECT_UNLOCK (self); break; + } case GST_EVENT_CAPS: { GstCaps *caps; @@ -1243,11 +1245,48 @@ gst_interleave_collected (GstCollectPads * pads, GstInterleave * self) GST_OBJECT_LOCK (self); if (self->pending_segment) { GstEvent *event; + GstSegment segment; event = self->pending_segment; self->pending_segment = NULL; GST_OBJECT_UNLOCK (self); + /* convert the input segment to time now */ + gst_event_copy_segment (event, &segment); + + if (segment.format != GST_FORMAT_TIME) { + gst_event_unref (event); + + /* not time, convert */ + switch (segment.format) { + case GST_FORMAT_BYTES: + segment.start *= width; + if (segment.stop != -1) + segment.stop *= width; + if (segment.position != -1) + segment.position *= width; + /* fallthrough for the samples case */ + case GST_FORMAT_DEFAULT: + segment.start = + gst_util_uint64_scale_int (segment.start, GST_SECOND, self->rate); + if (segment.stop != -1) + segment.stop = + gst_util_uint64_scale_int (segment.stop, GST_SECOND, + self->rate); + if (segment.position != -1) + segment.position = + gst_util_uint64_scale_int (segment.position, GST_SECOND, + self->rate); + break; + default: + GST_WARNING ("can't convert segment values"); + segment.start = 0; + segment.stop = -1; + segment.position = 0; + break; + } + event = gst_event_new_segment (&segment); + } gst_pad_push_event (self->src, event); GST_OBJECT_LOCK (self); |