Mixer re-creates sources after CRITICAL failure that was fixed

Stream sources that fail CRITICAL and are later back to NONE failure can now be re-created and reintegrated in the Mixer
This commit is contained in:
Bruno Herbelin
2023-08-18 11:58:47 +02:00
parent e92e9eb45c
commit d743307e59
2 changed files with 15 additions and 4 deletions

View File

@@ -220,13 +220,13 @@ void Mixer::update()
SourceListUnique _failedsources = session_->failedSources();
for(auto it = _failedsources.begin(); it != _failedsources.end(); ++it) {
// only deal with sources that are still attached to mixer
if ( attached( *it ) ) {
// intervention depends on the severity of the failure
Source::Failure fail = (*it)->failed();
// Attempt to repair BAD failed sources
// only deal with sources that are still attached to mixer
if ( attached( *it ) ) {
// RETRY: Attempt to repair failed sources
// (can be automatically repaired without user intervention)
if (fail == Source::FAIL_RETRY) {
if ( !recreateSource( *it ) ) {
@@ -249,6 +249,15 @@ void Mixer::update()
// needs refresh after intervention
++View::need_deep_update_;
}
// Source failed, was detached (after FAIL_CRITICAL) and got back to state FAIL_NONE
else if ( fail < Source::FAIL_CRITICAL ) {
// This looks like we should try to recreate it
if ( !recreateSource( *it ) ) {
Log::Warning("Source '%s' definitely failed and could not be fixed.", (*it)->name().c_str());
// delete failed source if could not recreate it
deleteSource( *it );
}
}
}
}

View File

@@ -3638,6 +3638,8 @@ void Navigator::RenderNewPannel()
ImGui::TextDisabled("Explore online");
if (ImGui::Selectable( ICON_FA_EXTERNAL_LINK_ALT " Documentation" ) )
SystemToolkit::open("https://gstreamer.freedesktop.org/documentation/tools/gst-launch.html?gi-language=c#pipeline-description");
if (ImGui::Selectable( ICON_FA_EXTERNAL_LINK_ALT " Video test source" ) )
SystemToolkit::open("https://gstreamer.freedesktop.org/documentation/videotestsrc/index.html?gi-language=c#videotestsrc-page");
ImGui::EndCombo();
}
ImGui::SetCursorPos(pos_bot);