summaryrefslogtreecommitdiffstats
path: root/gst/videomixer
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2008-09-25 15:11:16 +0000
committerWim Taymans <wim.taymans@gmail.com>2008-09-25 15:11:16 +0000
commit1dcf0755c5abab7ea9e7ffedb0b64ff24e7a28f5 (patch)
tree0a2c8e389bdae32c68590c4257e883e073e34c51 /gst/videomixer
parentb1dfdc758e04ea8aa70379bbcc9ea9103516d0af (diff)
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.
Diffstat (limited to 'gst/videomixer')
-rw-r--r--gst/videomixer/videomixer.c16
1 files changed, 15 insertions, 1 deletions
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;
}