diff --git a/dom/media/MediaManager.cpp b/dom/media/MediaManager.cpp index 6086e2a90ffa..b9324853b7de 100644 --- a/dom/media/MediaManager.cpp +++ b/dom/media/MediaManager.cpp @@ -482,12 +482,13 @@ public: CreateTrackUnionStream(nsIDOMWindow* aWindow, GetUserMediaCallbackMediaStreamListener* aListener, MediaEngineSource* aAudioSource, - MediaEngineSource* aVideoSource) + MediaEngineSource* aVideoSource, + MediaStreamGraph* aMSG) { nsRefPtr stream = new nsDOMUserMediaStream(aListener, aAudioSource, aVideoSource); - stream->InitTrackUnionStream(aWindow); + stream->InitTrackUnionStream(aWindow, aMSG); return stream.forget(); } @@ -786,7 +787,13 @@ public: } #endif - MediaStreamGraph* msg = MediaStreamGraph::GetInstance(); + MediaStreamGraph::GraphDriverType graphDriverType = + mAudioSource ? MediaStreamGraph::AUDIO_THREAD_DRIVER + : MediaStreamGraph::SYSTEM_THREAD_DRIVER; + MediaStreamGraph* msg = + MediaStreamGraph::GetInstance(graphDriverType, + dom::AudioChannel::Normal); + nsRefPtr stream = msg->CreateSourceStream(nullptr); nsRefPtr domStream; @@ -796,7 +803,7 @@ public: // them down instead. if (mAudioSource && mAudioSource->GetMediaSource() == dom::MediaSourceEnum::AudioCapture) { - domStream = DOMLocalMediaStream::CreateAudioCaptureStream(window); + domStream = DOMLocalMediaStream::CreateAudioCaptureStream(window, msg); // It should be possible to pipe the capture stream to anything. CORS is // not a problem here, we got explicit user content. domStream->SetPrincipal(window->GetExtantDoc()->NodePrincipal()); @@ -808,7 +815,8 @@ public: // avoid us blocking nsRefPtr trackunion = nsDOMUserMediaStream::CreateTrackUnionStream(window, mListener, - mAudioSource, mVideoSource); + mAudioSource, mVideoSource, + msg); trackunion->GetStream()->AsProcessedStream()->SetAutofinish(true); nsRefPtr port = trackunion->GetStream()->AsProcessedStream()-> AllocateInputPort(stream, MediaInputPort::FLAG_BLOCK_OUTPUT); @@ -2831,7 +2839,10 @@ GetUserMediaCallbackMediaStreamListener::StopSharing() nsCOMPtr window = nsGlobalWindow::GetInnerWindowWithId(mWindowID); MOZ_ASSERT(window); window->SetAudioCapture(false); - MediaStreamGraph::GetInstance()->UnregisterCaptureStreamForWindow(mWindowID); + MediaStreamGraph* graph = + MediaStreamGraph::GetInstance(MediaStreamGraph::AUDIO_THREAD_DRIVER, + dom::AudioChannel::Normal); + graph->UnregisterCaptureStreamForWindow(mWindowID); mStream->Destroy(); } }