diff options
| author | Roxanne Skelly <roxanne@roxiware.com> | 2024-08-19 08:14:44 -0700 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-19 08:14:44 -0700 | 
| commit | 1c7bc351d60788a7d8fadb5a460d2bf7223cc19a (patch) | |
| tree | b8914600245b781674cee7ece9e02600e91c61e5 | |
| parent | 0f3ffb0fad721740f20ed5c7a74f4ceade6d46b6 (diff) | |
| parent | 2dae5a880de2e8b24ad0b36cc4d634187b97979b (diff) | |
Merge pull request #2328 from secondlife/roxie/webrtc-airpod-fixes
| -rw-r--r-- | autobuild.xml | 82 | ||||
| -rw-r--r-- | indra/llwebrtc/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | indra/llwebrtc/llwebrtc.cpp | 86 | ||||
| -rw-r--r-- | indra/llwebrtc/llwebrtc_impl.h | 2 | 
4 files changed, 112 insertions, 64 deletions
| diff --git a/autobuild.xml b/autobuild.xml index c2d063763d..37a04862da 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -745,18 +745,6 @@        </map>        <key>glm</key>        <map> -        <key>canonical_repo</key> -        <string>https://github.com/secondlife/3p-glm</string> -        <key>copyright</key> -        <string>Copyright (c) 2005 - G-Truc Creation</string> -        <key>description</key> -        <string>OpenGL Mathematics</string> -        <key>license</key> -        <string>MIT</string> -        <key>license_file</key> -        <string>LICENSES/glm_license.txt</string> -        <key>name</key> -        <string>glm</string>          <key>platforms</key>          <map>            <key>common</key> @@ -774,16 +762,28 @@              <string>common</string>            </map>          </map> -        <key>source_type</key> -        <string>git</string> +        <key>license</key> +        <string>MIT</string> +        <key>license_file</key> +        <string>LICENSES/glm_license.txt</string> +        <key>copyright</key> +        <string>Copyright (c) 2005 - G-Truc Creation</string> +        <key>version</key> +        <string>v1.0.1</string> +        <key>name</key> +        <string>glm</string>          <key>vcs_branch</key>          <string>refs/tags/v1.0.1-r1</string>          <key>vcs_revision</key>          <string>399cd5ba57a9267a560ce07e50a0f8c5fe3dc66f</string>          <key>vcs_url</key>          <string>git://github.com/secondlife/3p-glm.git</string> -        <key>version</key> -        <string>v1.0.1</string> +        <key>canonical_repo</key> +        <string>https://github.com/secondlife/3p-glm</string> +        <key>description</key> +        <string>OpenGL Mathematics</string> +        <key>source_type</key> +        <string>git</string>        </map>        <key>gstreamer</key>        <map> @@ -1418,14 +1418,6 @@        </map>        <key>llphysicsextensions_source</key>        <map> -        <key>copyright</key> -        <string>Copyright (c) 2010, Linden Research, Inc.</string> -        <key>license</key> -        <string>internal</string> -        <key>license_file</key> -        <string>LICENSES/llphysicsextensions.txt</string> -        <key>name</key> -        <string>llphysicsextensions_source</string>          <key>platforms</key>          <map>            <key>darwin64</key> @@ -1477,8 +1469,16 @@              <string>windows64</string>            </map>          </map> +        <key>license</key> +        <string>internal</string> +        <key>license_file</key> +        <string>LICENSES/llphysicsextensions.txt</string> +        <key>copyright</key> +        <string>Copyright (c) 2010, Linden Research, Inc.</string>          <key>version</key>          <string>1.0.b8b1f73</string> +        <key>name</key> +        <string>llphysicsextensions_source</string>        </map>        <key>llphysicsextensions_stub</key>        <map> @@ -2008,16 +2008,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>        </map>        <key>openal</key>        <map> -        <key>copyright</key> -        <string>Copyright (C) 1999-2007 by authors.</string> -        <key>description</key> -        <string>OpenAL Soft is a software implementation of the OpenAL 3D audio API.</string> -        <key>license</key> -        <string>LGPL2</string> -        <key>license_file</key> -        <string>LICENSES/openal-soft.txt</string> -        <key>name</key> -        <string>openal</string>          <key>platforms</key>          <map>            <key>darwin64</key> @@ -2063,8 +2053,18 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <string>windows64</string>            </map>          </map> +        <key>license</key> +        <string>LGPL2</string> +        <key>license_file</key> +        <string>LICENSES/openal-soft.txt</string> +        <key>copyright</key> +        <string>Copyright (C) 1999-2007 by authors.</string>          <key>version</key>          <string>1.23.1</string> +        <key>name</key> +        <string>openal</string> +        <key>description</key> +        <string>OpenAL Soft is a software implementation of the OpenAL 3D audio API.</string>        </map>        <key>openjpeg</key>        <map> @@ -2793,11 +2793,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>194b4f5957c9f003c46e61a434e23a7c3d1180d6</string> +              <string>3570b6442d472cd97bad8622c2ec2571d72218a0</string>                <key>hash_algorithm</key>                <string>sha1</string>                <key>url</key> -              <string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.70-debug/webrtc-m114.5735.08.70-debug.10377605436-darwin64-10377605436.tar.zst</string> +              <string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.72-test/webrtc-m114.5735.08.72-test.10444682919-darwin64-10444682919.tar.zst</string>              </map>              <key>name</key>              <string>darwin64</string> @@ -2807,11 +2807,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>38e0c7d30b4c40eb04e60ab199440b847cc7c6cf</string> +              <string>eadf6aa99313940ded11801d42c11375669f1628</string>                <key>hash_algorithm</key>                <string>sha1</string>                <key>url</key> -              <string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.70-debug/webrtc-m114.5735.08.70-debug.10377605436-linux64-10377605436.tar.zst</string> +              <string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.72-test/webrtc-m114.5735.08.72-test.10444682919-linux64-10444682919.tar.zst</string>              </map>              <key>name</key>              <string>linux64</string> @@ -2821,11 +2821,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>053fb5c873df9192e34cddcf2db1c5fdcff76ba1</string> +              <string>0081fd35290adbc8e66dd366535fb6cd8a966f1e</string>                <key>hash_algorithm</key>                <string>sha1</string>                <key>url</key> -              <string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.70-debug/webrtc-m114.5735.08.70-debug.10377605436-windows64-10377605436.tar.zst</string> +              <string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.72-test/webrtc-m114.5735.08.72-test.10444682919-windows64-10444682919.tar.zst</string>              </map>              <key>name</key>              <string>windows64</string> @@ -2838,7 +2838,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <key>copyright</key>          <string>Copyright (c) 2011, The WebRTC project authors. All rights reserved.</string>          <key>version</key> -        <string>m114.5735.08.70-debug.10377605436</string> +        <string>m114.5735.08.72-test.10444682919</string>          <key>name</key>          <string>webrtc</string>          <key>vcs_branch</key> diff --git a/indra/llwebrtc/CMakeLists.txt b/indra/llwebrtc/CMakeLists.txt index 30aaec1265..a18b716003 100644 --- a/indra/llwebrtc/CMakeLists.txt +++ b/indra/llwebrtc/CMakeLists.txt @@ -31,6 +31,7 @@ add_library (llwebrtc SHARED ${llwebrtc_SOURCE_FILES})  set_target_properties(llwebrtc PROPERTIES PUBLIC_HEADER llwebrtc.h)  if (WINDOWS) +    cmake_policy(SET CMP0091 NEW)      set_target_properties(llwebrtc          PROPERTIES          LINK_FLAGS "/debug /LARGEADDRESSAWARE" @@ -42,7 +43,10 @@ if (WINDOWS)                                         wmcodecdspuuid                                         msdmo                                         strmiids -                                       iphlpapi) +                                       iphlpapi +                                       libcmt) +    # as the webrtc libraries are release, build this binary as release as well. +    target_compile_options(llwebrtc PRIVATE "/MT")      if (USE_BUGSPLAT)          set_target_properties(llwebrtc PROPERTIES PDB_OUTPUT_DIRECTORY "${SYMBOLS_STAGING_DIR}")      endif (USE_BUGSPLAT) diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp index 2c890acbdb..0daa767766 100644 --- a/indra/llwebrtc/llwebrtc.cpp +++ b/indra/llwebrtc/llwebrtc.cpp @@ -206,10 +206,10 @@ void LLWebRTCImpl::init()              mTuningDeviceModule->SetAudioDeviceSink(this);              mTuningDeviceModule->InitMicrophone();              mTuningDeviceModule->InitSpeaker(); +            mTuningDeviceModule->SetStereoRecording(false); +            mTuningDeviceModule->SetStereoPlayout(true);              mTuningDeviceModule->InitRecording();              mTuningDeviceModule->InitPlayout(); -            mTuningDeviceModule->SetStereoRecording(true); -            mTuningDeviceModule->SetStereoPlayout(true);              updateDevices();          }); @@ -227,10 +227,6 @@ void LLWebRTCImpl::init()              mPeerDeviceModule->EnableBuiltInAEC(false);              mPeerDeviceModule->InitMicrophone();              mPeerDeviceModule->InitSpeaker(); -            mPeerDeviceModule->InitRecording(); -            mPeerDeviceModule->InitPlayout(); -            mPeerDeviceModule->SetStereoRecording(true); -            mPeerDeviceModule->SetStereoPlayout(true);          });      // The custom processor allows us to retrieve audio data (and levels) @@ -251,8 +247,9 @@ void LLWebRTCImpl::init()      apm_config.noise_suppression.level        = webrtc::AudioProcessing::Config::NoiseSuppression::kVeryHigh;      apm_config.transient_suppression.enabled  = true;      apm_config.pipeline.multi_channel_render  = true; -    apm_config.pipeline.multi_channel_capture = true; -    apm_config.pipeline.multi_channel_capture = true; +    apm_config.pipeline.multi_channel_capture = false; + +    mAudioProcessingModule->ApplyConfig(apm_config);      webrtc::ProcessingConfig processing_config;      processing_config.input_stream().set_num_channels(2); @@ -264,10 +261,8 @@ void LLWebRTCImpl::init()      processing_config.reverse_output_stream().set_num_channels(2);      processing_config.reverse_output_stream().set_sample_rate_hz(48000); -    mAudioProcessingModule->ApplyConfig(apm_config);      mAudioProcessingModule->Initialize(processing_config); -      mPeerConnectionFactory = webrtc::CreatePeerConnectionFactory(mNetworkThread.get(),                                                                   mWorkerThread.get(),                                                                   mSignalingThread.get(), @@ -279,7 +274,6 @@ void LLWebRTCImpl::init()                                                                   nullptr /* audio_mixer */,                                                                   mAudioProcessingModule); -    mWorkerThread->BlockingCall([this]() { mPeerDeviceModule->StartPlayout(); });  }  void LLWebRTCImpl::terminate() @@ -331,6 +325,8 @@ void LLWebRTCImpl::setRecording(bool recording)          {              if (recording)              { +                mPeerDeviceModule->SetStereoRecording(false); +                mPeerDeviceModule->InitRecording();                  mPeerDeviceModule->StartRecording();              }              else @@ -340,6 +336,24 @@ void LLWebRTCImpl::setRecording(bool recording)          });  } +void LLWebRTCImpl::setPlayout(bool playing) +{ +    mWorkerThread->PostTask( +        [this, playing]() +        { +            if (playing) +            { +                mPeerDeviceModule->SetStereoPlayout(true); +                mPeerDeviceModule->InitPlayout(); +                mPeerDeviceModule->StartPlayout(); +            } +            else +            { +                mPeerDeviceModule->StopPlayout(); +            } +        }); +} +  void LLWebRTCImpl::setAudioConfig(LLWebRTCDeviceInterface::AudioConfig config)  {      webrtc::AudioProcessing::Config apm_config; @@ -402,7 +416,6 @@ void LLWebRTCImpl::unsetDevicesObserver(LLWebRTCDevicesObserver *observer)  void ll_set_device_module_capture_device(rtc::scoped_refptr<webrtc::AudioDeviceModule> device_module, int16_t device)  { -    device_module->StopRecording();  #if WEBRTC_WIN      if (device < 0)      { @@ -417,10 +430,9 @@ 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(); -    device_module->SetStereoRecording(false); -    device_module->StartRecording();  }  void LLWebRTCImpl::setCaptureDevice(const std::string &id) @@ -444,18 +456,32 @@ void LLWebRTCImpl::setCaptureDevice(const std::string &id)      mRecordingDevice = recordingDevice;      if (mTuningMode)      { -        mWorkerThread->PostTask([this, recordingDevice]() { ll_set_device_module_capture_device(mTuningDeviceModule, recordingDevice); }); +        mWorkerThread->PostTask([this, recordingDevice]() +            { +                ll_set_device_module_capture_device(mTuningDeviceModule, recordingDevice); +            });      }      else      { -        mWorkerThread->PostTask([this, recordingDevice]() { ll_set_device_module_capture_device(mPeerDeviceModule, recordingDevice); }); +        mWorkerThread->PostTask([this, recordingDevice]() +            { +                bool recording = mPeerDeviceModule->Recording(); +                if (recording) +                { +                    mPeerDeviceModule->StopRecording(); +                } +                ll_set_device_module_capture_device(mPeerDeviceModule, recordingDevice); +                if (recording) +                { +                    mPeerDeviceModule->StartRecording(); +                } +            });      }  }  void ll_set_device_module_render_device(rtc::scoped_refptr<webrtc::AudioDeviceModule> device_module, int16_t device)  { -    device_module->StopPlayout();  #if WEBRTC_WIN      if (device < 0)      { @@ -468,9 +494,9 @@ 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(); -    device_module->SetStereoPlayout(true);  }  void LLWebRTCImpl::setRenderDevice(const std::string &id) @@ -506,8 +532,16 @@ void LLWebRTCImpl::setRenderDevice(const std::string &id)          mWorkerThread->PostTask(              [this, playoutDevice]()              { +                bool playing = mPeerDeviceModule->Playing(); +                if (playing) +                { +                    mPeerDeviceModule->StopPlayout(); +                }                  ll_set_device_module_render_device(mPeerDeviceModule, playoutDevice); -                mPeerDeviceModule->StartPlayout(); +                if (playing) +                { +                    mPeerDeviceModule->StartPlayout(); +                }              });      }  } @@ -592,6 +626,8 @@ void LLWebRTCImpl::setTuningMode(bool enable)                  //mTuningDeviceModule->StopPlayout();                  ll_set_device_module_render_device(mPeerDeviceModule, mPlayoutDevice);                  ll_set_device_module_capture_device(mPeerDeviceModule, mRecordingDevice); +                mPeerDeviceModule->SetStereoPlayout(true); +                mPeerDeviceModule->SetStereoRecording(false);                  mPeerDeviceModule->InitPlayout();                  mPeerDeviceModule->InitRecording();                  mPeerDeviceModule->StartPlayout(); @@ -635,6 +671,11 @@ LLWebRTCPeerConnectionInterface *LLWebRTCImpl::newPeerConnection()      mPeerConnections.emplace_back(peerConnection);      peerConnection->enableSenderTracks(!mMute); +    if (mPeerConnections.empty()) +    { +        setRecording(true); +        setPlayout(true); +    }      return peerConnection.get();  } @@ -649,6 +690,7 @@ void LLWebRTCImpl::freePeerConnection(LLWebRTCPeerConnectionInterface* peer_conn      if (mPeerConnections.empty())      {          setRecording(false); +        setPlayout(false);      }  } @@ -662,7 +704,7 @@ void LLWebRTCImpl::freePeerConnection(LLWebRTCPeerConnectionInterface* peer_conn  LLWebRTCPeerConnectionImpl::LLWebRTCPeerConnectionImpl() :      mWebRTCImpl(nullptr),      mPeerConnection(nullptr), -    mMute(false), +    mMute(true),      mAnswerReceived(false)  {  } @@ -684,8 +726,8 @@ void LLWebRTCPeerConnectionImpl::init(LLWebRTCImpl * webrtc_impl)  }  void LLWebRTCPeerConnectionImpl::terminate()  { -    mWebRTCImpl->PostSignalingTask( -        [=]() +    mWebRTCImpl->SignalingBlockingCall( +        [this]()          {              if (mPeerConnection)              { diff --git a/indra/llwebrtc/llwebrtc_impl.h b/indra/llwebrtc/llwebrtc_impl.h index c5b32123eb..f8a7873af8 100644 --- a/indra/llwebrtc/llwebrtc_impl.h +++ b/indra/llwebrtc/llwebrtc_impl.h @@ -278,6 +278,8 @@ class LLWebRTCImpl : public LLWebRTCDeviceInterface, public webrtc::AudioDeviceS      // enables/disables capture via the capture device      void setRecording(bool recording); +    void setPlayout(bool playing); +    protected:      LLWebRTCLogSink*                                           mLogSink; | 
