mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
splitmuxsink: Don't busy loop on a non-ready pad.
If a pad gets into the check_completed_gop method and then the underlying conditions change on the reference context, things could get stuck in a busy loop when the context should instead jump back out and wait for more data. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798>
This commit is contained in:
parent
5ac4fdeb7a
commit
41ca3b4e43
1 changed files with 6 additions and 3 deletions
|
@ -2503,16 +2503,19 @@ check_completed_gop (GstSplitMuxSink * splitmux, MqStreamCtx * ctx)
|
|||
if (ctx->in_eos)
|
||||
return;
|
||||
|
||||
/* Some pad is not yet ready, or GOP is being pushed
|
||||
* either way, sleep and wait to get woken */
|
||||
|
||||
if (splitmux->input_state == SPLITMUX_INPUT_STATE_WAITING_GOP_COLLECT &&
|
||||
!ctx->flushing &&
|
||||
(ctx->in_running_time >= splitmux->max_in_running_time) &&
|
||||
(splitmux->max_in_running_time != GST_CLOCK_STIME_NONE)) {
|
||||
/* Some pad is not yet ready, or GOP is being pushed
|
||||
* either way, sleep and wait to get woken */
|
||||
GST_LOG_OBJECT (splitmux, "Sleeping for GOP collection (ctx %p)", ctx);
|
||||
GST_SPLITMUX_WAIT_INPUT (splitmux);
|
||||
GST_LOG_OBJECT (splitmux, "Done waiting for complete GOP (ctx %p)", ctx);
|
||||
} else {
|
||||
/* This pad is not ready or the state changed - break out and get another
|
||||
* buffer / event */
|
||||
break;
|
||||
}
|
||||
} while (splitmux->input_state == SPLITMUX_INPUT_STATE_WAITING_GOP_COLLECT);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue