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