[MOVED FROM GST-P-FARSIGHT] Push out a simple newsegment event

20080331184421-3e2dc-69544b5b03ae3bb8c1e3f967974fd250d04056b5.gz
This commit is contained in:
Olivier Crete 2008-03-31 18:44:21 +00:00 committed by Edward Hervey
parent ffa0065ab3
commit 59d6b57d52
2 changed files with 26 additions and 0 deletions

View file

@ -547,6 +547,9 @@ gst_live_adder_sink_event (GstPad * pad, GstEvent * event)
case GST_EVENT_FLUSH_STOP: case GST_EVENT_FLUSH_STOP:
ret = gst_pad_push_event (adder->srcpad, event); ret = gst_pad_push_event (adder->srcpad, event);
ret = gst_live_adder_src_activate_push (adder->srcpad, TRUE); ret = gst_live_adder_src_activate_push (adder->srcpad, TRUE);
GST_OBJECT_LOCK (adder);
adder->segment_pending = TRUE;
GST_OBJECT_UNLOCK (adder);
break; break;
case GST_EVENT_EOS: case GST_EVENT_EOS:
{ {
@ -927,6 +930,7 @@ gst_live_adder_loop (gpointer data)
GstClockReturn ret; GstClockReturn ret;
GstBuffer *buffer = NULL; GstBuffer *buffer = NULL;
GstFlowReturn result; GstFlowReturn result;
GstEvent *newseg_event = NULL;
GST_OBJECT_LOCK (adder); GST_OBJECT_LOCK (adder);
@ -1016,8 +1020,27 @@ gst_live_adder_loop (gpointer data)
adder->next_timestamp = GST_BUFFER_TIMESTAMP (buffer) + adder->next_timestamp = GST_BUFFER_TIMESTAMP (buffer) +
GST_BUFFER_DURATION (buffer); GST_BUFFER_DURATION (buffer);
if (adder->segment_pending)
{
/*
* We should probably loop through all of the sinks that have a segment
* and take the min of the starts and the max of the stops
* and convert them to running times and use these are start/stop.
* And so something smart about the positions with seeks that I dont
* understand yet.
*/
newseg_event = gst_event_new_new_segment_full (FALSE, 1.0,
1.0, GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (buffer), -1,
0);
adder->segment_pending = FALSE;
}
GST_OBJECT_UNLOCK (adder); GST_OBJECT_UNLOCK (adder);
if (newseg_event)
gst_pad_push_event (adder->srcpad, newseg_event);
result = gst_pad_push (adder->srcpad, buffer); result = gst_pad_push (adder->srcpad, buffer);
if (result != GST_FLOW_OK) if (result != GST_FLOW_OK)
goto pause; goto pause;
@ -1188,6 +1211,7 @@ gst_live_adder_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_READY_TO_PAUSED: case GST_STATE_CHANGE_READY_TO_PAUSED:
{ {
GST_OBJECT_LOCK (adder); GST_OBJECT_LOCK (adder);
adder->segment_pending = TRUE;
adder->peer_latency = 0; adder->peer_latency = 0;
adder->next_timestamp = GST_CLOCK_TIME_NONE; adder->next_timestamp = GST_CLOCK_TIME_NONE;
g_list_foreach (adder->sinkpads, reset_pad_private, adder); g_list_foreach (adder->sinkpads, reset_pad_private, adder);

View file

@ -90,6 +90,8 @@ struct _GstLiveAdder {
GstClockTime latency_ms; GstClockTime latency_ms;
GstClockTime peer_latency; GstClockTime peer_latency;
gboolean segment_pending;
}; };
struct _GstLiveAdderClass { struct _GstLiveAdderClass {