mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
gst/gstpipeline.c: Wheen a seek was successful on a pipeline, set the stream_time to the seek offset in order to have...
Original commit message from CVS: * gst/gstpipeline.c: (gst_pipeline_send_event): Wheen a seek was successful on a pipeline, set the stream_time to the seek offset in order to have a synchronized stream_time.
This commit is contained in:
parent
57d529de3a
commit
2e75d2ae7e
2 changed files with 23 additions and 4 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2005-06-28 Edward Hervey <edward@fluendo.com>
|
||||||
|
|
||||||
|
* gst/gstpipeline.c: (gst_pipeline_send_event):
|
||||||
|
Wheen a seek was successful on a pipeline, set the stream_time to the
|
||||||
|
seek offset in order to have a synchronized stream_time.
|
||||||
|
|
||||||
2005-06-28 Wim Taymans <wim@fluendo.com>
|
2005-06-28 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* gst/gstghostpad.c: (gst_proxy_pad_do_bufferalloc),
|
* gst/gstghostpad.c: (gst_proxy_pad_do_bufferalloc),
|
||||||
|
|
|
@ -286,6 +286,7 @@ gst_pipeline_send_event (GstElement * element, GstEvent * event)
|
||||||
GstElementState state;
|
GstElementState state;
|
||||||
GstEventType event_type = GST_EVENT_TYPE (event);
|
GstEventType event_type = GST_EVENT_TYPE (event);
|
||||||
GTimeVal timeout;
|
GTimeVal timeout;
|
||||||
|
gint64 offset = -1;
|
||||||
|
|
||||||
/* need to call _get_state() since a bin state is only updated
|
/* need to call _get_state() since a bin state is only updated
|
||||||
* with this call. */
|
* with this call. */
|
||||||
|
@ -294,13 +295,25 @@ gst_pipeline_send_event (GstElement * element, GstEvent * event)
|
||||||
gst_element_get_state (element, &state, NULL, &timeout);
|
gst_element_get_state (element, &state, NULL, &timeout);
|
||||||
was_playing = state == GST_STATE_PLAYING;
|
was_playing = state == GST_STATE_PLAYING;
|
||||||
|
|
||||||
if (was_playing && event_type == GST_EVENT_SEEK)
|
if (event_type == GST_EVENT_SEEK) {
|
||||||
gst_element_set_state (element, GST_STATE_PAUSED);
|
if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_TIME) {
|
||||||
|
GST_WARNING ("Pipelines only accept seek events with TIME format");
|
||||||
|
g_warning ("Pipelines only accept seek events with TIME format");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
offset = GST_EVENT_SEEK_OFFSET (event);
|
||||||
|
if (was_playing)
|
||||||
|
gst_element_set_state (element, GST_STATE_PAUSED);
|
||||||
|
}
|
||||||
|
|
||||||
res = GST_ELEMENT_CLASS (parent_class)->send_event (element, event);
|
res = GST_ELEMENT_CLASS (parent_class)->send_event (element, event);
|
||||||
|
|
||||||
if (was_playing && event_type == GST_EVENT_SEEK)
|
if (res && event_type == GST_EVENT_SEEK) {
|
||||||
gst_element_set_state (element, GST_STATE_PLAYING);
|
/* need to set the stream time to the seek time */
|
||||||
|
GST_PIPELINE (element)->stream_time = offset;
|
||||||
|
if (was_playing)
|
||||||
|
gst_element_set_state (element, GST_STATE_PLAYING);
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue