mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
basesink: Check if buffers are too late before calling prepare/prepare_list
https://bugzilla.gnome.org/show_bug.cgi?id=690936
This commit is contained in:
parent
d0c8831f1f
commit
c859a1719c
1 changed files with 30 additions and 11 deletions
|
@ -3259,17 +3259,36 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad,
|
|||
goto out_of_segment;
|
||||
}
|
||||
|
||||
if (!is_list) {
|
||||
if (bclass->prepare) {
|
||||
ret = bclass->prepare (basesink, GST_BUFFER_CAST (obj));
|
||||
if (G_UNLIKELY (ret != GST_FLOW_OK))
|
||||
goto prepare_failed;
|
||||
}
|
||||
} else {
|
||||
if (bclass->prepare_list) {
|
||||
ret = bclass->prepare_list (basesink, GST_BUFFER_LIST_CAST (obj));
|
||||
if (G_UNLIKELY (ret != GST_FLOW_OK))
|
||||
goto prepare_failed;
|
||||
if (bclass->prepare || bclass->prepare_list) {
|
||||
gboolean late = FALSE;
|
||||
gboolean do_sync = TRUE, stepped = FALSE, step_end, syncable = TRUE;
|
||||
GstClockTime sstart, sstop, rstart, rstop;
|
||||
GstStepInfo *current;
|
||||
|
||||
current = &priv->current_step;
|
||||
syncable =
|
||||
gst_base_sink_get_sync_times (basesink, obj, &sstart, &sstop, &rstart,
|
||||
&rstop, &do_sync, &stepped, current, &step_end);
|
||||
|
||||
if (!stepped && syncable && do_sync)
|
||||
late =
|
||||
gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
|
||||
GST_CLOCK_EARLY, 0);
|
||||
if (late)
|
||||
goto dropped;
|
||||
|
||||
if (!is_list) {
|
||||
if (bclass->prepare) {
|
||||
ret = bclass->prepare (basesink, GST_BUFFER_CAST (obj));
|
||||
if (G_UNLIKELY (ret != GST_FLOW_OK))
|
||||
goto prepare_failed;
|
||||
}
|
||||
} else {
|
||||
if (bclass->prepare_list) {
|
||||
ret = bclass->prepare_list (basesink, GST_BUFFER_LIST_CAST (obj));
|
||||
if (G_UNLIKELY (ret != GST_FLOW_OK))
|
||||
goto prepare_failed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue