diff options
Diffstat (limited to 'indra/llwebrtc/llwebrtc.cpp')
| -rw-r--r-- | indra/llwebrtc/llwebrtc.cpp | 66 | 
1 files changed, 56 insertions, 10 deletions
diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp index 0daa767766..20951ff816 100644 --- a/indra/llwebrtc/llwebrtc.cpp +++ b/indra/llwebrtc/llwebrtc.cpp @@ -430,9 +430,7 @@ void ll_set_device_module_capture_device(rtc::scoped_refptr<webrtc::AudioDeviceM      // has it at 0      device_module->SetRecordingDevice(device + 1);  #endif -    device_module->SetStereoRecording(false);      device_module->InitMicrophone(); -    device_module->InitRecording();  }  void LLWebRTCImpl::setCaptureDevice(const std::string &id) @@ -473,6 +471,8 @@ void LLWebRTCImpl::setCaptureDevice(const std::string &id)                  ll_set_device_module_capture_device(mPeerDeviceModule, recordingDevice);                  if (recording)                  { +                    mPeerDeviceModule->SetStereoRecording(false); +                    mPeerDeviceModule->InitRecording();                      mPeerDeviceModule->StartRecording();                  }              }); @@ -494,9 +494,7 @@ void ll_set_device_module_render_device(rtc::scoped_refptr<webrtc::AudioDeviceMo  #else      device_module->SetPlayoutDevice(device + 1);  #endif -    device_module->SetStereoPlayout(true);      device_module->InitSpeaker(); -    device_module->InitPlayout();  }  void LLWebRTCImpl::setRenderDevice(const std::string &id) @@ -540,6 +538,8 @@ void LLWebRTCImpl::setRenderDevice(const std::string &id)                  ll_set_device_module_render_device(mPeerDeviceModule, playoutDevice);                  if (playing)                  { +                    mPeerDeviceModule->SetStereoPlayout(true); +                    mPeerDeviceModule->InitPlayout();                      mPeerDeviceModule->StartPlayout();                  }              }); @@ -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"); @@ -887,6 +904,7 @@ void LLWebRTCPeerConnectionImpl::enableSenderTracks(bool enable)      // set_enabled shouldn't be done on the worker thread.      if (mPeerConnection)      { +        mPeerConnection->SetAudioRecording(enable);          auto senders = mPeerConnection->GetSenders();          for (auto &sender : senders)          { @@ -932,12 +950,23 @@ 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)          { +            // SetAudioRecording must be called before enabling/disabling tracks. +            mPeerConnection->SetAudioRecording(enable); +              auto senders = mPeerConnection->GetSenders();              RTC_LOG(LS_INFO) << __FUNCTION__ << (mMute ? "disabling" : "enabling") << " streams count " << senders.size(); @@ -946,7 +975,14 @@ 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);                  }              }          } @@ -955,7 +991,17 @@ void LLWebRTCPeerConnectionImpl::setMute(bool mute)  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)  | 
