diff --git a/src/Mixer.cpp b/src/Mixer.cpp index e522676..0fbd2c4 100644 --- a/src/Mixer.cpp +++ b/src/Mixer.cpp @@ -220,13 +220,13 @@ void Mixer::update() SourceListUnique _failedsources = session_->failedSources(); for(auto it = _failedsources.begin(); it != _failedsources.end(); ++it) { + // intervention depends on the severity of the failure + Source::Failure fail = (*it)->failed(); + // 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 + // 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 ); + } + } } } diff --git a/src/UserInterfaceManager.cpp b/src/UserInterfaceManager.cpp index acc13c7..0599181 100644 --- a/src/UserInterfaceManager.cpp +++ b/src/UserInterfaceManager.cpp @@ -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);