mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
[MOVED FROM GST-P-FARSIGHT] Push out a simple newsegment event
20080331184421-3e2dc-69544b5b03ae3bb8c1e3f967974fd250d04056b5.gz
This commit is contained in:
parent
ffa0065ab3
commit
59d6b57d52
2 changed files with 26 additions and 0 deletions
|
@ -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);
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue