tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WebrtcCallWrapper.cpp (3367B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "WebrtcCallWrapper.h"
      8 
      9 #include "MediaConduitInterface.h"
     10 #include "jsapi/PeerConnectionCtx.h"
     11 #include "libwebrtcglue/WebrtcEnvironmentWrapper.h"
     12 
     13 namespace mozilla {
     14 
     15 /* static */ RefPtr<WebrtcCallWrapper> WebrtcCallWrapper::Create(
     16    RefPtr<WebrtcEnvironmentWrapper> aEnvWrapper,
     17    const dom::RTCStatsTimestampMaker& aTimestampMaker,
     18    UniquePtr<media::ShutdownBlockingTicket> aShutdownTicket,
     19    const RefPtr<SharedWebrtcState>& aSharedState) {
     20  auto videoBitrateAllocatorFactory =
     21      WrapUnique(webrtc::CreateBuiltinVideoBitrateAllocatorFactory().release());
     22  RefPtr<WebrtcCallWrapper> wrapper = new WebrtcCallWrapper(
     23      aSharedState, std::move(videoBitrateAllocatorFactory),
     24      std::move(aEnvWrapper), aTimestampMaker, std::move(aShutdownTicket));
     25 
     26  wrapper->mCallThread->Dispatch(
     27      NS_NewRunnableFunction(__func__, [wrapper, aSharedState] {
     28        webrtc::CallConfig config(wrapper->mEnvWrapper->Environment(), nullptr);
     29        config.audio_state =
     30            webrtc::AudioState::Create(aSharedState->mAudioStateConfig);
     31        wrapper->SetCall(
     32            WrapUnique(webrtc::Call::Create(std::move(config)).release()));
     33      }));
     34 
     35  return wrapper;
     36 }
     37 
     38 void WebrtcCallWrapper::SetCall(UniquePtr<webrtc::Call> aCall) {
     39  MOZ_ASSERT(mCallThread->IsOnCurrentThread());
     40  MOZ_ASSERT(!mCall);
     41  mCall = std::move(aCall);
     42 }
     43 
     44 webrtc::Call* WebrtcCallWrapper::Call() const {
     45  MOZ_ASSERT(mCallThread->IsOnCurrentThread());
     46  return mCall.get();
     47 }
     48 
     49 void WebrtcCallWrapper::UnsetRemoteSSRC(uint32_t aSsrc) {
     50  MOZ_ASSERT(mCallThread->IsOnCurrentThread());
     51  for (const auto& conduit : mConduits) {
     52    conduit->UnsetRemoteSSRC(aSsrc);
     53  }
     54 }
     55 
     56 void WebrtcCallWrapper::RegisterConduit(MediaSessionConduit* conduit) {
     57  MOZ_ASSERT(mCallThread->IsOnCurrentThread());
     58  mConduits.insert(conduit);
     59 }
     60 
     61 void WebrtcCallWrapper::UnregisterConduit(MediaSessionConduit* conduit) {
     62  MOZ_ASSERT(mCallThread->IsOnCurrentThread());
     63  mConduits.erase(conduit);
     64 }
     65 
     66 void WebrtcCallWrapper::Destroy() {
     67  MOZ_ASSERT(mCallThread->IsOnCurrentThread());
     68  mCall = nullptr;
     69  mShutdownTicket = nullptr;
     70 }
     71 
     72 const dom::RTCStatsTimestampMaker& WebrtcCallWrapper::GetTimestampMaker()
     73    const {
     74  return mClock.mTimestampMaker;
     75 }
     76 
     77 WebrtcCallWrapper::~WebrtcCallWrapper() { MOZ_ASSERT(!mCall); }
     78 
     79 WebrtcCallWrapper::WebrtcCallWrapper(
     80    RefPtr<SharedWebrtcState> aSharedState,
     81    UniquePtr<webrtc::VideoBitrateAllocatorFactory>
     82        aVideoBitrateAllocatorFactory,
     83    RefPtr<WebrtcEnvironmentWrapper> aEnvWrapper,
     84    const dom::RTCStatsTimestampMaker& aTimestampMaker,
     85    UniquePtr<media::ShutdownBlockingTicket> aShutdownTicket)
     86    : mSharedState(std::move(aSharedState)),
     87      mClock(aTimestampMaker),
     88      mShutdownTicket(std::move(aShutdownTicket)),
     89      mCallThread(mSharedState->mCallWorkerThread),
     90      mAudioDecoderFactory(mSharedState->mAudioDecoderFactory),
     91      mVideoBitrateAllocatorFactory(std::move(aVideoBitrateAllocatorFactory)),
     92      mEnvWrapper(std::move(aEnvWrapper)) {}
     93 
     94 }  // namespace mozilla