mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 03:00:35 +00:00
adaptivedemux: start/stop the manifest update loop on liveness or periodic update changes
Scenario: A manifest starts out in live mode but then the recording is finalized and a subsequent update changes the state to a non-live manifest when the server has finished recording/transcoding/whatever with the full list of fragments. Without this patch, the manifest update task is never stopped on the live->non-live transition and will busy loop, burning through one CPU core. https://bugzilla.gnome.org/show_bug.cgi?id=786275
This commit is contained in:
parent
df4c6385aa
commit
cbf4a44426
1 changed files with 14 additions and 0 deletions
|
@ -2027,6 +2027,7 @@ gst_adaptive_demux_stop_manifest_update_task (GstAdaptiveDemux * demux)
|
|||
gst_task_stop (demux->priv->updates_task);
|
||||
|
||||
g_mutex_lock (&demux->priv->updates_timed_lock);
|
||||
GST_DEBUG_OBJECT (demux, "requesting stop of the manifest update task");
|
||||
demux->priv->stop_updates_task = TRUE;
|
||||
g_cond_signal (&demux->priv->updates_timed_cond);
|
||||
g_mutex_unlock (&demux->priv->updates_timed_lock);
|
||||
|
@ -2045,6 +2046,7 @@ gst_adaptive_demux_start_manifest_update_task (GstAdaptiveDemux * demux)
|
|||
g_mutex_unlock (&demux->priv->updates_timed_lock);
|
||||
/* Task to periodically update the manifest */
|
||||
if (demux_class->requires_periodical_playlist_update (demux)) {
|
||||
GST_DEBUG_OBJECT (demux, "requesting start of the manifest update task");
|
||||
gst_task_start (demux->priv->updates_task);
|
||||
}
|
||||
}
|
||||
|
@ -4361,6 +4363,18 @@ gst_adaptive_demux_update_manifest (GstAdaptiveDemux * demux)
|
|||
GST_DEBUG_OBJECT (demux,
|
||||
"Duration unknown, can not send the duration message");
|
||||
}
|
||||
|
||||
/* If a manifest changes it's liveness or periodic updateness, we need
|
||||
* to start/stop the manifest update task appropriately */
|
||||
/* Keep this condition in sync with the one in
|
||||
* gst_adaptive_demux_start_manifest_update_task()
|
||||
*/
|
||||
if (gst_adaptive_demux_is_live (demux) &&
|
||||
klass->requires_periodical_playlist_update (demux)) {
|
||||
gst_adaptive_demux_start_manifest_update_task (demux);
|
||||
} else {
|
||||
gst_adaptive_demux_stop_manifest_update_task (demux);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
Loading…
Reference in a new issue