mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
baseparse: adjust seek handling and newsegment sending
Perform sanity check on type of seek, and only perform one that is appropriately supported. Adjust downstream newsegment event to first buffer timestamp that is sent downstream.
This commit is contained in:
parent
748b96ddef
commit
fd848904f9
1 changed files with 19 additions and 0 deletions
|
@ -976,6 +976,19 @@ gst_base_parse_push_buffer (GstBaseParse * parse, GstBuffer * buffer)
|
|||
|
||||
gst_buffer_set_caps (buffer, GST_PAD_CAPS (parse->srcpad));
|
||||
|
||||
/* segment times are typically estimates,
|
||||
* actual frame data might lead subclass to different timestamps,
|
||||
* so override segment start from what is supplied there */
|
||||
if (G_UNLIKELY (parse->pending_segment && !parse->priv->passthrough &&
|
||||
GST_CLOCK_TIME_IS_VALID (last_stop))) {
|
||||
gst_event_unref (parse->pending_segment);
|
||||
/* stop time possibly lost this way,
|
||||
* but unlikely and not really supported */
|
||||
parse->pending_segment =
|
||||
gst_event_new_new_segment (FALSE, parse->segment.rate,
|
||||
parse->segment.format, last_stop, -1, last_stop);
|
||||
}
|
||||
|
||||
/* and should then also be linked downstream, so safe to send some events */
|
||||
if (parse->priv->pad_mode == GST_ACTIVATE_PULL) {
|
||||
if (G_UNLIKELY (parse->close_segment)) {
|
||||
|
@ -1955,6 +1968,12 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
|
|||
}
|
||||
}
|
||||
|
||||
/* to much estimating going on to support this sensibly,
|
||||
* and no eos/end-of-segment loop handling either ... */
|
||||
if (stop_type != GST_SEEK_TYPE_NONE || (flags & GST_SEEK_FLAG_SEGMENT))
|
||||
goto wrong_type;
|
||||
stop = -1;
|
||||
|
||||
/* get flush flag */
|
||||
flush = flags & GST_SEEK_FLAG_FLUSH;
|
||||
|
||||
|
|
Loading…
Reference in a new issue