summaryrefslogtreecommitdiff
path: root/indra/llwebrtc/llwebrtc.cpp
diff options
context:
space:
mode:
authorRoxie Linden <roxie@lindenlab.com>2023-12-01 01:14:33 -0800
committerRoxie Linden <roxie@lindenlab.com>2024-02-22 23:11:35 -0800
commit0b9c27dc70255385fd65ac2f1f8f99e2e013ea03 (patch)
tree23ef11f729d2348656da793f262ee359e7930ab6 /indra/llwebrtc/llwebrtc.cpp
parent7bc2f93e53105c043814c5c9bb1bac80e57b15aa (diff)
Using the device module to set speaker/mic volume set the system mic/volume
for all applications. Instead, modify the volume on the various streams.
Diffstat (limited to 'indra/llwebrtc/llwebrtc.cpp')
-rw-r--r--indra/llwebrtc/llwebrtc.cpp56
1 files changed, 43 insertions, 13 deletions
diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp
index b2f5e0212e..4741ed92a3 100644
--- a/indra/llwebrtc/llwebrtc.cpp
+++ b/indra/llwebrtc/llwebrtc.cpp
@@ -399,11 +399,6 @@ float LLWebRTCImpl::getTuningAudioLevel() { return 20 * mTuningAudioDeviceObserv
float LLWebRTCImpl::getPeerAudioLevel() { return 20 * mPeerAudioDeviceObserver->getMicrophoneEnergy(); }
-void LLWebRTCImpl::setSpeakerVolume(float volume) { mPeerDeviceModule->SetSpeakerVolume( (uint32_t)(volume * VOLUME_SCALE_WEBRTC));}
-void LLWebRTCImpl::setMicrophoneVolume(float volume) { mPeerDeviceModule->SetMicrophoneVolume((uint32_t)(volume * VOLUME_SCALE_WEBRTC));}
-
-void LLWebRTCImpl::setMute(bool mute) { mPeerDeviceModule->SetMicrophoneMute(mute); }
-
//
// Helpers
//
@@ -417,6 +412,7 @@ LLWebRTCPeerConnection * LLWebRTCImpl::newPeerConnection()
peerConnection->enableTracks(!mMute);
return peerConnection.get();
}
+
void LLWebRTCImpl::freePeerConnection(LLWebRTCPeerConnection * peer_connection)
{
std::vector<rtc::scoped_refptr<LLWebRTCPeerConnectionImpl>>::iterator it =
@@ -506,12 +502,11 @@ bool LLWebRTCPeerConnectionImpl::initializeConnection()
audioOptions.echo_cancellation = false; // incompatible with opus stereo
audioOptions.noise_suppression = true;
- rtc::scoped_refptr<webrtc::MediaStreamInterface> stream = mPeerConnectionFactory->CreateLocalMediaStream("SLStream");
-
+ mLocalStream = mPeerConnectionFactory->CreateLocalMediaStream("SLStream");
rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track(
mPeerConnectionFactory->CreateAudioTrack("SLAudio", mPeerConnectionFactory->CreateAudioSource(audioOptions).get()));
audio_track->set_enabled(true);
- stream->AddTrack(audio_track);
+ mLocalStream->AddTrack(audio_track);
mPeerConnection->AddTrack(audio_track, {"SLStream"});
@@ -545,6 +540,7 @@ bool LLWebRTCPeerConnectionImpl::initializeConnection()
params.codecs.push_back(codecparam);
receiver->SetParameters(params);
}
+
webrtc::PeerConnectionInterface::RTCOfferAnswerOptions offerOptions;
mPeerConnection->CreateOffer(this, offerOptions);
@@ -606,13 +602,47 @@ void LLWebRTCPeerConnectionImpl::AnswerAvailable(const std::string &sdp)
void LLWebRTCPeerConnectionImpl::setMute(bool mute)
{
mMute = mute;
- auto senders = mPeerConnection->GetSenders();
-
- RTC_LOG(LS_INFO) << __FUNCTION__ << (mute ? "disabling" : "enabling") << " streams count " << senders.size();
+ if (mPeerConnection)
+ {
+ auto senders = mPeerConnection->GetSenders();
+
+ RTC_LOG(LS_INFO) << __FUNCTION__ << (mute ? "disabling" : "enabling") << " streams count " << senders.size();
+ for (auto &sender : senders)
+ {
+ auto track = sender->track();
+ if(track)
+ {
+ track->set_enabled(!mMute);
+ }
+ }
+ }
+}
+
+void LLWebRTCPeerConnectionImpl::setReceiveVolume(float volume)
+{
+ auto receivers = mPeerConnection->GetReceivers();
- for (auto &sender : senders)
+ for (auto &receiver : receivers)
{
- sender->track()->set_enabled(!mMute);
+ for (auto& stream : receiver->streams())
+ {
+ for (auto& track : stream->GetAudioTracks())
+ {
+ track->GetSource()->SetVolume(volume);
+ }
+ }
+ }
+}
+
+void LLWebRTCPeerConnectionImpl::setSendVolume(float volume)
+{
+ if (mLocalStream)
+ {
+ auto track = mLocalStream->FindAudioTrack("SLStream");
+ if (track)
+ {
+ track->GetSource()->SetVolume(volume);
+ }
}
}