summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--gst/videomixer/videomixer.c16
2 files changed, 21 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 43d1559f..1d9762ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2008-09-25 Wim Taymans <wim.taymans@collabora.co.uk>
+ * gst/videomixer/videomixer.c: (gst_videomixer_fill_queues),
+ (gst_videomixer_sink_event):
+ Handle segments a little better. Fixes #537361.
+
+2008-09-25 Wim Taymans <wim.taymans@collabora.co.uk>
+
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_parse_methods):
Don't assume the server supports PAUSE by default. Fixes #551048.
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;
}