diff --git a/Telegram/SourceFiles/calls/group/calls_group_call.cpp b/Telegram/SourceFiles/calls/group/calls_group_call.cpp index cc4f1e988a..c67eadc998 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_call.cpp @@ -1943,7 +1943,10 @@ void GroupCall::setupOutgoingVideo() { _cameraState.value( ) | rpl::combine_previous( - ) | rpl::start_with_next([=](VideoState previous, VideoState state) { + ) | rpl::filter([=](VideoState previous, VideoState state) { + // Recursive entrance may happen if error happens when activating. + return (previous != state); + }) | rpl::start_with_next([=](VideoState previous, VideoState state) { const auto wasPaused = (previous == VideoState::Paused); const auto wasActive = (previous != VideoState::Inactive); const auto nowPaused = (state == VideoState::Paused); @@ -1989,7 +1992,10 @@ void GroupCall::setupOutgoingVideo() { _screenState.value( ) | rpl::combine_previous( - ) | rpl::start_with_next([=](VideoState previous, VideoState state) { + ) | rpl::filter([=](VideoState previous, VideoState state) { + // Recursive entrance may happen if error happens when activating. + return (previous != state); + }) | rpl::start_with_next([=](VideoState previous, VideoState state) { const auto wasPaused = (previous == VideoState::Paused); const auto wasActive = (previous != VideoState::Inactive); const auto nowPaused = (state == VideoState::Paused);