diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llwebrtc/llwebrtc.cpp | 56 | ||||
| -rw-r--r-- | indra/llwebrtc/llwebrtc_impl.h | 7 | ||||
| -rw-r--r-- | indra/newview/llvoicewebrtc.cpp | 42 | 
3 files changed, 78 insertions, 27 deletions
diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp index a306600f85..28639b9af0 100644 --- a/indra/llwebrtc/llwebrtc.cpp +++ b/indra/llwebrtc/llwebrtc.cpp @@ -670,7 +670,10 @@ LLWebRTCPeerConnectionInterface *LLWebRTCImpl::newPeerConnection()      peerConnection->init(this);      mPeerConnections.emplace_back(peerConnection); -    peerConnection->enableSenderTracks(!mMute); +    // Should it really start disabled? +    // Seems like something doesn't get the memo and senders need to be reset later +    // to remove the voice indicator from taskbar +    peerConnection->enableSenderTracks(false);      if (mPeerConnections.empty())      {          setRecording(true); @@ -704,7 +707,7 @@ void LLWebRTCImpl::freePeerConnection(LLWebRTCPeerConnectionInterface* peer_conn  LLWebRTCPeerConnectionImpl::LLWebRTCPeerConnectionImpl() :      mWebRTCImpl(nullptr),      mPeerConnection(nullptr), -    mMute(true), +    mMute(MUTE_INITIAL),      mAnswerReceived(false)  {  } @@ -739,6 +742,19 @@ void LLWebRTCPeerConnectionImpl::terminate()                      }                  } +                // to remove 'Secondlife is recording' icon from taskbar +                // if user was speaking +                auto senders = mPeerConnection->GetSenders(); +                for (auto& sender : senders) +                { +                    auto track = sender->track(); +                    if (track) +                    { +                        track->set_enabled(false); +                    } +                } +                mPeerConnection->SetAudioRecording(false); +                  mPeerConnection->Close();                  if (mLocalStream)                  { @@ -828,6 +844,7 @@ bool LLWebRTCPeerConnectionImpl::initializeConnection(const LLWebRTCPeerConnecti              audioOptions.auto_gain_control = true;              audioOptions.echo_cancellation = true;              audioOptions.noise_suppression = true; +            audioOptions.init_recording_on_send = false;              mLocalStream = mPeerConnectionFactory->CreateLocalMediaStream("SLStream"); @@ -892,6 +909,7 @@ void LLWebRTCPeerConnectionImpl::enableSenderTracks(bool enable)          {              sender->track()->set_enabled(enable);          } +        mPeerConnection->SetAudioRecording(enable);      }  } @@ -932,9 +950,17 @@ void LLWebRTCPeerConnectionImpl::AnswerAvailable(const std::string &sdp)  void LLWebRTCPeerConnectionImpl::setMute(bool mute)  { -    mMute = mute; +    EMicMuteState new_state = mute ? MUTE_MUTED : MUTE_UNMUTED; +    if (new_state == mMute) +    { +        return; // no change +    } +    bool force_reset = mMute == MUTE_INITIAL && mute; +    bool enable = !mute; +    mMute = new_state; +      mWebRTCImpl->PostSignalingTask( -        [this]() +        [this, force_reset, enable]()          {          if (mPeerConnection)          { @@ -946,16 +972,34 @@ void LLWebRTCPeerConnectionImpl::setMute(bool mute)                  auto track = sender->track();                  if (track)                  { -                    track->set_enabled(!mMute); +                    if (force_reset) +                    { +                        // Force notify observers +                        // Was it disabled too early? +                        // Without this microphone icon in Win's taskbar will stay +                        track->set_enabled(true); +                    } +                    track->set_enabled(enable);                  }              } +            mPeerConnection->SetAudioRecording(enable);          }      });  }  void LLWebRTCPeerConnectionImpl::resetMute()  { -    setMute(mMute); +    switch(mMute) +    { +    case MUTE_MUTED: +         setMute(true); +         break; +    case MUTE_UNMUTED: +         setMute(false); +         break; +    default: +        break; +    }  }  void LLWebRTCPeerConnectionImpl::setReceiveVolume(float volume) diff --git a/indra/llwebrtc/llwebrtc_impl.h b/indra/llwebrtc/llwebrtc_impl.h index b93a1fdb01..b6294dbd4a 100644 --- a/indra/llwebrtc/llwebrtc_impl.h +++ b/indra/llwebrtc/llwebrtc_impl.h @@ -417,7 +417,12 @@ class LLWebRTCPeerConnectionImpl : public LLWebRTCPeerConnectionInterface,      rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> mPeerConnectionFactory; -    bool mMute; +    typedef enum { +        MUTE_INITIAL, +        MUTE_MUTED, +        MUTE_UNMUTED, +    } EMicMuteState; +    EMicMuteState mMute;      // signaling      std::vector<LLWebRTCSignalingObserver *>  mSignalingObserverList; diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index 9835a69e4e..627d759df4 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -336,35 +336,37 @@ void LLWebRTCVoiceClient::updateSettings()      LL_PROFILE_ZONE_SCOPED_CATEGORY_VOICE;      setVoiceEnabled(LLVoiceClient::getInstance()->voiceEnabled()); -    static LLCachedControl<S32> sVoiceEarLocation(gSavedSettings, "VoiceEarLocation"); -    setEarLocation(sVoiceEarLocation); - -    static LLCachedControl<std::string> sInputDevice(gSavedSettings, "VoiceInputAudioDevice"); -    setCaptureDevice(sInputDevice); +    if (mVoiceEnabled) +    { +        static LLCachedControl<S32> sVoiceEarLocation(gSavedSettings, "VoiceEarLocation"); +        setEarLocation(sVoiceEarLocation); -    static LLCachedControl<std::string> sOutputDevice(gSavedSettings, "VoiceOutputAudioDevice"); -    setRenderDevice(sOutputDevice); +        static LLCachedControl<std::string> sInputDevice(gSavedSettings, "VoiceInputAudioDevice"); +        setCaptureDevice(sInputDevice); -    LL_INFOS("Voice") << "Input device: " << std::quoted(sInputDevice()) << ", output device: " << std::quoted(sOutputDevice()) << LL_ENDL; +        static LLCachedControl<std::string> sOutputDevice(gSavedSettings, "VoiceOutputAudioDevice"); +        setRenderDevice(sOutputDevice); -    static LLCachedControl<F32> sMicLevel(gSavedSettings, "AudioLevelMic"); -    setMicGain(sMicLevel); +        LL_INFOS("Voice") << "Input device: " << std::quoted(sInputDevice()) << ", output device: " << std::quoted(sOutputDevice()) << LL_ENDL; -    llwebrtc::LLWebRTCDeviceInterface::AudioConfig config; +        static LLCachedControl<F32> sMicLevel(gSavedSettings, "AudioLevelMic"); +        setMicGain(sMicLevel); -    static LLCachedControl<bool> sEchoCancellation(gSavedSettings, "VoiceEchoCancellation", true); -    config.mEchoCancellation = sEchoCancellation; +        llwebrtc::LLWebRTCDeviceInterface::AudioConfig config; -    static LLCachedControl<bool> sAGC(gSavedSettings, "VoiceAutomaticGainControl", true); -    config.mAGC = sAGC; +        static LLCachedControl<bool> sEchoCancellation(gSavedSettings, "VoiceEchoCancellation", true); +        config.mEchoCancellation = sEchoCancellation; -    static LLCachedControl<U32> sNoiseSuppressionLevel(gSavedSettings, -                                                       "VoiceNoiseSuppressionLevel", -                                                       llwebrtc::LLWebRTCDeviceInterface::AudioConfig::ENoiseSuppressionLevel::NOISE_SUPPRESSION_LEVEL_VERY_HIGH); -    config.mNoiseSuppressionLevel = (llwebrtc::LLWebRTCDeviceInterface::AudioConfig::ENoiseSuppressionLevel) (U32)sNoiseSuppressionLevel; +        static LLCachedControl<bool> sAGC(gSavedSettings, "VoiceAutomaticGainControl", true); +        config.mAGC = sAGC; -    mWebRTCDeviceInterface->setAudioConfig(config); +        static LLCachedControl<U32> sNoiseSuppressionLevel(gSavedSettings, +            "VoiceNoiseSuppressionLevel", +            llwebrtc::LLWebRTCDeviceInterface::AudioConfig::ENoiseSuppressionLevel::NOISE_SUPPRESSION_LEVEL_VERY_HIGH); +        config.mNoiseSuppressionLevel = (llwebrtc::LLWebRTCDeviceInterface::AudioConfig::ENoiseSuppressionLevel)(U32)sNoiseSuppressionLevel; +        mWebRTCDeviceInterface->setAudioConfig(config); +    }  }  // Observers  | 
