From 1dcf0755c5abab7ea9e7ffedb0b64ff24e7a28f5 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 25 Sep 2008 15:11:16 +0000 Subject: gst/videomixer/videomixer.c: Handle segments a little better. Fixes #537361. Original commit message from CVS: * gst/videomixer/videomixer.c: (gst_videomixer_fill_queues), (gst_videomixer_sink_event): Handle segments a little better. Fixes #537361. --- gst/videomixer/videomixer.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'gst/videomixer') diff --git a/gst/videomixer/videomixer.c b/gst/videomixer/videomixer.c index 0d9e70f7..46dc5829 100644 --- a/gst/videomixer/videomixer.c +++ b/gst/videomixer/videomixer.c @@ -1277,6 +1277,7 @@ gst_videomixer_fill_queues (GstVideoMixer * mix) } if (mix->sendseg && (mixpad == mix->master)) { GstEvent *event; + gint64 stop, start; GstSegment *segment = &data->segment; @@ -1294,8 +1295,18 @@ gst_videomixer_fill_queues (GstVideoMixer * mix) * match. */ GST_INFO ("_sending play segment"); + + start = segment->accum; + + /* get the duration of the segment if we can and add it to the accumulated + * time on the segment. */ + if (segment->stop != -1 && segment->start != -1) + stop = start + (segment->stop - segment->start); + else + stop = -1; + event = gst_event_new_new_segment_full (FALSE, segment->rate, 1.0, - segment->format, 0, -1, mix->segment_position); + segment->format, start, stop, start + mix->segment_position); gst_pad_push_event (mix->srcpad, event); mix->sendseg = FALSE; } @@ -1627,6 +1638,9 @@ gst_videomixer_sink_event (GstPad * pad, GstEvent * event) */ videomixer->sendseg = TRUE; break; + case GST_EVENT_NEWSEGMENT: + videomixer->sendseg = TRUE; + break; default: break; } -- cgit