From 9b19093204a4f8514ae146d872e84e85a4261a69 Mon Sep 17 00:00:00 2001 From: Andreas Pehrson Date: Mon, 9 Feb 2015 15:23:34 +0800 Subject: [PATCH] Bug 1129263 - Part 6. Remove DOMMediaStream::TrackTypeHints. r=roc,jesup --- dom/camera/DOMCameraControl.cpp | 1 - dom/html/HTMLMediaElement.cpp | 66 ++++++++----------- dom/media/DOMMediaStream.cpp | 66 ++++++------------- dom/media/DOMMediaStream.h | 36 ++-------- dom/media/MediaManager.cpp | 6 +- dom/media/MediaManager.h | 11 +--- dom/media/MediaRecorder.cpp | 32 +++++---- dom/media/MediaStreamGraph.cpp | 11 ++-- dom/media/MediaStreamGraph.h | 2 +- dom/media/MediaStreamGraphImpl.h | 2 +- dom/media/webaudio/AudioDestinationNode.cpp | 3 +- .../MediaStreamAudioDestinationNode.cpp | 3 +- .../src/peerconnection/PeerConnectionImpl.cpp | 15 ++--- .../src/peerconnection/PeerConnectionImpl.h | 2 +- .../webrtc/signaling/test/FakeMediaStreams.h | 2 +- 15 files changed, 88 insertions(+), 170 deletions(-) diff --git a/dom/camera/DOMCameraControl.cpp b/dom/camera/DOMCameraControl.cpp index 9237329fe0dc..e5ed9cc947a6 100644 --- a/dom/camera/DOMCameraControl.cpp +++ b/dom/camera/DOMCameraControl.cpp @@ -264,7 +264,6 @@ nsDOMCameraControl::nsDOMCameraControl(uint32_t aCameraId, mCurrentConfiguration = initialConfig.forget(); // Attach our DOM-facing media stream to our viewfinder stream. - SetHintContents(HINT_CONTENTS_VIDEO); InitStreamCommon(mInput); MOZ_ASSERT(mWindow, "Shouldn't be created with a null window!"); if (mWindow->GetExtantDoc()) { diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index beced9ed287d..f8088d4e7773 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -1858,31 +1858,7 @@ HTMLMediaElement::CaptureStreamInternal(bool aFinishWhenEnded) } #endif OutputMediaStream* out = mOutputStreams.AppendElement(); - uint8_t hints = 0; - if (mReadyState >= nsIDOMHTMLMediaElement::HAVE_METADATA) { - hints = (HasAudio()? DOMMediaStream::HINT_CONTENTS_AUDIO : 0) | - (HasVideo()? DOMMediaStream::HINT_CONTENTS_VIDEO : 0); - } else { -#ifdef DEBUG - // Estimate hints based on the type of the media element - // under the preference media.capturestream_hints for the - // debug builds only. This allows WebRTC Peer Connection - // to behave appropriately when media streams generated - // via mozCaptureStream*() are added to the Peer Connection. - // This functionality is planned to be used as part of Audio - // Quality Performance testing for WebRTC. - // Bug932845: Revisit this once hints mechanism is dealt with - // holistically. - if (Preferences::GetBool("media.capturestream_hints.enabled")) { - if (IsVideo() && GetVideoFrameContainer()) { - hints = DOMMediaStream::HINT_CONTENTS_VIDEO | DOMMediaStream::HINT_CONTENTS_AUDIO; - } else { - hints = DOMMediaStream::HINT_CONTENTS_AUDIO; - } - } -#endif - } - out->mStream = DOMMediaStream::CreateTrackUnionStream(window, hints); + out->mStream = DOMMediaStream::CreateTrackUnionStream(window); nsRefPtr principal = GetCurrentPrincipal(); out->mStream->CombineWithPrincipal(principal); out->mStream->SetCORSMode(mCORSMode); @@ -1896,6 +1872,17 @@ HTMLMediaElement::CaptureStreamInternal(bool aFinishWhenEnded) if (mDecoder) { mDecoder->AddOutputStream( out->mStream->GetStream()->AsProcessedStream(), aFinishWhenEnded); + if (mReadyState >= HAVE_METADATA) { + // Expose the tracks to JS directly. + if (HasAudio()) { + TrackID audioTrackId = mMediaInfo.mAudio.mTrackInfo.mOutputId; + out->mStream->CreateDOMTrack(audioTrackId, MediaSegment::AUDIO); + } + if (HasVideo()) { + TrackID videoTrackId = mMediaInfo.mVideo.mTrackInfo.mOutputId; + out->mStream->CreateDOMTrack(videoTrackId, MediaSegment::VIDEO); + } + } } nsRefPtr result = out->mStream; return result.forget(); @@ -2928,9 +2915,8 @@ class HTMLMediaElement::MediaStreamTracksAvailableCallback: public DOMMediaStream::OnTracksAvailableCallback { public: - explicit MediaStreamTracksAvailableCallback(HTMLMediaElement* aElement, - DOMMediaStream::TrackTypeHints aExpectedTracks = 0): - DOMMediaStream::OnTracksAvailableCallback(aExpectedTracks), + explicit MediaStreamTracksAvailableCallback(HTMLMediaElement* aElement): + DOMMediaStream::OnTracksAvailableCallback(), mElement(aElement) {} virtual void NotifyTracksAvailable(DOMMediaStream* aStream) @@ -2987,9 +2973,6 @@ void HTMLMediaElement::SetupSrcMediaStreamPlayback(DOMMediaStream* aStream) GetSrcMediaStream()->ChangeExplicitBlockerCount(1); } - mSrcStream->OnTracksAvailable(new MediaStreamTracksAvailableCallback(this, DOMMediaStream::HINT_CONTENTS_AUDIO)); - mSrcStream->OnTracksAvailable(new MediaStreamTracksAvailableCallback(this, DOMMediaStream::HINT_CONTENTS_VIDEO)); - ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE); ChangeDelayLoadStatus(false); @@ -3006,6 +2989,8 @@ void HTMLMediaElement::SetupSrcMediaStreamPlayback(DOMMediaStream* aStream) // mSrcStream mSrcStream->ConstructMediaTracks(AudioTracks(), VideoTracks()); + mSrcStream->OnTracksAvailable(new MediaStreamTracksAvailableCallback(this)); + // FirstFrameLoaded() will be called when the stream has current data. } @@ -3084,12 +3069,16 @@ void HTMLMediaElement::MetadataLoaded(const MediaInfo* aInfo, mDecoder->SetFragmentEndTime(mFragmentEnd); } - // Tracks just got known, pass the info along to the output streams - uint8_t hints = (HasAudio() ? DOMMediaStream::HINT_CONTENTS_AUDIO : 0) | - (HasVideo() ? DOMMediaStream::HINT_CONTENTS_VIDEO : 0); - for (uint32_t i = 0; i < mOutputStreams.Length(); ++i) { - OutputMediaStream* out = &mOutputStreams[i]; - out->mStream->SetHintContents(hints); + // Expose the tracks to JS directly. + for (OutputMediaStream& out : mOutputStreams) { + if (aInfo->HasAudio()) { + TrackID audioTrackId = aInfo->mAudio.mTrackInfo.mOutputId; + out.mStream->CreateDOMTrack(audioTrackId, MediaSegment::AUDIO); + } + if (aInfo->HasVideo()) { + TrackID videoTrackId = aInfo->mVideo.mTrackInfo.mOutputId; + out.mStream->CreateDOMTrack(videoTrackId, MediaSegment::VIDEO); + } } // If this element had a video track, but consists only of an audio track now, @@ -4265,8 +4254,7 @@ void HTMLMediaElement::UpdateAudioChannelPlayingState() (HasAttr(kNameSpaceID_None, nsGkAtoms::loop) || (mReadyState >= nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA && !IsPlaybackEnded() && - !(mSrcStream && !(mSrcStream->GetTrackTypesAvailable() & - DOMMediaStream::HINT_CONTENTS_AUDIO))) || + (!mSrcStream || HasAudio())) || mPlayingThroughTheAudioChannelBeforeSeek)); if (playingThroughTheAudioChannel != mPlayingThroughTheAudioChannel) { mPlayingThroughTheAudioChannel = playingThroughTheAudioChannel; diff --git a/dom/media/DOMMediaStream.cpp b/dom/media/DOMMediaStream.cpp index 8fa0eee88808..7945b2a7ec7e 100644 --- a/dom/media/DOMMediaStream.cpp +++ b/dom/media/DOMMediaStream.cpp @@ -274,20 +274,18 @@ DOMMediaStream::IsFinished() } void -DOMMediaStream::InitSourceStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents) +DOMMediaStream::InitSourceStream(nsIDOMWindow* aWindow) { mWindow = aWindow; - SetHintContents(aHintContents); - MediaStreamGraph* gm = MediaStreamGraph::GetInstance(aHintContents); + MediaStreamGraph* gm = MediaStreamGraph::GetInstance(); InitStreamCommon(gm->CreateSourceStream(this)); } void -DOMMediaStream::InitTrackUnionStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents) +DOMMediaStream::InitTrackUnionStream(nsIDOMWindow* aWindow) { mWindow = aWindow; - SetHintContents(aHintContents); - MediaStreamGraph* gm = MediaStreamGraph::GetInstance(aHintContents); + MediaStreamGraph* gm = MediaStreamGraph::GetInstance(); InitStreamCommon(gm->CreateTrackUnionStream(this)); } @@ -302,18 +300,18 @@ DOMMediaStream::InitStreamCommon(MediaStream* aStream) } already_AddRefed -DOMMediaStream::CreateSourceStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents) +DOMMediaStream::CreateSourceStream(nsIDOMWindow* aWindow) { nsRefPtr stream = new DOMMediaStream(); - stream->InitSourceStream(aWindow, aHintContents); + stream->InitSourceStream(aWindow); return stream.forget(); } already_AddRefed -DOMMediaStream::CreateTrackUnionStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents) +DOMMediaStream::CreateTrackUnionStream(nsIDOMWindow* aWindow) { nsRefPtr stream = new DOMMediaStream(); - stream->InitTrackUnionStream(aWindow, aHintContents); + stream->InitTrackUnionStream(aWindow); return stream.forget(); } @@ -386,23 +384,15 @@ DOMMediaStream::RemovePrincipalChangeObserver(PrincipalChangeObserver* aObserver return mPrincipalChangeObservers.RemoveElement(aObserver); } -void -DOMMediaStream::SetHintContents(TrackTypeHints aHintContents) -{ - mHintContents |= aHintContents; -} - MediaStreamTrack* DOMMediaStream::CreateDOMTrack(TrackID aTrackID, MediaSegment::Type aType) { MediaStreamTrack* track; switch (aType) { case MediaSegment::AUDIO: - mHintContents |= HINT_CONTENTS_AUDIO; track = new AudioStreamTrack(this, aTrackID); break; case MediaSegment::VIDEO: - mHintContents |= HINT_CONTENTS_VIDEO; track = new VideoStreamTrack(this, aTrackID); break; default: @@ -424,7 +414,6 @@ DOMMediaStream::BindDOMTrack(TrackID aTrackID, MediaSegment::Type aType) track = mTracks[i]->AsAudioStreamTrack(); if (track && track->GetTrackID() == aTrackID) { bindSuccess = true; - mTrackTypesAvailable |= HINT_CONTENTS_AUDIO; break; } } @@ -435,7 +424,6 @@ DOMMediaStream::BindDOMTrack(TrackID aTrackID, MediaSegment::Type aType) track = mTracks[i]->AsVideoStreamTrack(); if (track && track->GetTrackID() == aTrackID) { bindSuccess = true; - mTrackTypesAvailable |= HINT_CONTENTS_VIDEO; break; } } @@ -444,9 +432,6 @@ DOMMediaStream::BindDOMTrack(TrackID aTrackID, MediaSegment::Type aType) default: MOZ_CRASH("Unhandled track type"); } - if (bindSuccess) { - CheckTracksAvailable(); - } return bindSuccess ? track : nullptr; } @@ -513,13 +498,7 @@ DOMMediaStream::CheckTracksAvailable() callbacks.SwapElements(mRunOnTracksAvailable); for (uint32_t i = 0; i < callbacks.Length(); ++i) { - OnTracksAvailableCallback* cb = callbacks[i]; - if (~mTrackTypesAvailable & cb->GetExpectedTracks()) { - // Some expected tracks not available yet. Try this callback again later. - *mRunOnTracksAvailable.AppendElement() = callbacks[i].forget(); - continue; - } - cb->NotifyTracksAvailable(this); + callbacks[i]->NotifyTracksAvailable(this); } } @@ -552,14 +531,10 @@ void DOMMediaStream::ConstructMediaTracks(AudioTrackList* aAudioTrackList, VideoTrackList* aVideoTrackList) { - if (mHintContents & DOMMediaStream::HINT_CONTENTS_AUDIO) { - MediaTrackListListener listener(aAudioTrackList); - mMediaTrackListListeners.AppendElement(listener); - } - if (mHintContents & DOMMediaStream::HINT_CONTENTS_VIDEO) { - MediaTrackListListener listener(aVideoTrackList); - mMediaTrackListListeners.AppendElement(listener); - } + MediaTrackListListener audioListener(aAudioTrackList); + mMediaTrackListListeners.AppendElement(audioListener); + MediaTrackListListener videoListener(aVideoTrackList); + mMediaTrackListListeners.AppendElement(videoListener); int firstEnabledVideo = -1; for (uint32_t i = 0; i < mTracks.Length(); ++i) { @@ -648,20 +623,18 @@ DOMLocalMediaStream::Stop() } already_AddRefed -DOMLocalMediaStream::CreateSourceStream(nsIDOMWindow* aWindow, - TrackTypeHints aHintContents) +DOMLocalMediaStream::CreateSourceStream(nsIDOMWindow* aWindow) { nsRefPtr stream = new DOMLocalMediaStream(); - stream->InitSourceStream(aWindow, aHintContents); + stream->InitSourceStream(aWindow); return stream.forget(); } already_AddRefed -DOMLocalMediaStream::CreateTrackUnionStream(nsIDOMWindow* aWindow, - TrackTypeHints aHintContents) +DOMLocalMediaStream::CreateTrackUnionStream(nsIDOMWindow* aWindow) { nsRefPtr stream = new DOMLocalMediaStream(); - stream->InitTrackUnionStream(aWindow, aHintContents); + stream->InitTrackUnionStream(aWindow); return stream.forget(); } @@ -676,10 +649,9 @@ DOMAudioNodeMediaStream::~DOMAudioNodeMediaStream() already_AddRefed DOMAudioNodeMediaStream::CreateTrackUnionStream(nsIDOMWindow* aWindow, - AudioNode* aNode, - TrackTypeHints aHintContents) + AudioNode* aNode) { nsRefPtr stream = new DOMAudioNodeMediaStream(aNode); - stream->InitTrackUnionStream(aWindow, aHintContents); + stream->InitTrackUnionStream(aWindow); return stream.forget(); } diff --git a/dom/media/DOMMediaStream.h b/dom/media/DOMMediaStream.h index f91e04cdd0b1..18253a7f89b5 100644 --- a/dom/media/DOMMediaStream.h +++ b/dom/media/DOMMediaStream.h @@ -177,28 +177,17 @@ public: // need to surface this to content. void AssignId(const nsAString& aID) { mID = aID; } - // Indicate what track types we eventually expect to add to this stream - enum { - HINT_CONTENTS_AUDIO = 1 << 0, - HINT_CONTENTS_VIDEO = 1 << 1, - HINT_CONTENTS_UNKNOWN = 1 << 2 - }; - TrackTypeHints GetHintContents() const { return mHintContents; } - void SetHintContents(TrackTypeHints aHintContents); - - TrackTypeHints GetTrackTypesAvailable() const { return mTrackTypesAvailable; } - /** * Create an nsDOMMediaStream whose underlying stream is a SourceMediaStream. */ static already_AddRefed - CreateSourceStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents); + CreateSourceStream(nsIDOMWindow* aWindow); /** * Create an nsDOMMediaStream whose underlying stream is a TrackUnionStream. */ static already_AddRefed - CreateTrackUnionStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents = 0); + CreateTrackUnionStream(nsIDOMWindow* aWindow); void SetLogicalStreamStartTime(StreamTime aTime) { @@ -213,14 +202,8 @@ public: class OnTracksAvailableCallback { public: - explicit OnTracksAvailableCallback(uint8_t aExpectedTracks = 0) - : mExpectedTracks(aExpectedTracks) {} virtual ~OnTracksAvailableCallback() {} virtual void NotifyTracksAvailable(DOMMediaStream* aStream) = 0; - TrackTypeHints GetExpectedTracks() { return mExpectedTracks; } - void SetExpectedTracks(TrackTypeHints aExpectedTracks) { mExpectedTracks = aExpectedTracks; } - private: - TrackTypeHints mExpectedTracks; }; // When one track of the appropriate type has been added for each bit set // in aCallback->GetExpectedTracks(), run aCallback->NotifyTracksAvailable. @@ -266,8 +249,8 @@ protected: virtual ~DOMMediaStream(); void Destroy(); - void InitSourceStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents); - void InitTrackUnionStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents); + void InitSourceStream(nsIDOMWindow* aWindow); + void InitTrackUnionStream(nsIDOMWindow* aWindow); void InitStreamCommon(MediaStream* aStream); already_AddRefed CreateAudioTrack(AudioStreamTrack* aStreamTrack); already_AddRefed CreateVideoTrack(VideoStreamTrack* aStreamTrack); @@ -304,10 +287,6 @@ protected: // Keep these alive until the stream finishes nsTArray > mConsumersToKeepAlive; - // Indicate what track types we eventually expect to add to this stream - uint8_t mHintContents; - // Indicate what track types have arrived in this stream - uint8_t mTrackTypesAvailable; bool mNotifiedOfMediaStreamGraphShutdown; // Send notifications to AudioTrackList or VideoTrackList, if this MediaStream @@ -352,13 +331,13 @@ public: * Create an nsDOMLocalMediaStream whose underlying stream is a SourceMediaStream. */ static already_AddRefed - CreateSourceStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents); + CreateSourceStream(nsIDOMWindow* aWindow); /** * Create an nsDOMLocalMediaStream whose underlying stream is a TrackUnionStream. */ static already_AddRefed - CreateTrackUnionStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents = 0); + CreateTrackUnionStream(nsIDOMWindow* aWindow); protected: virtual ~DOMLocalMediaStream(); @@ -381,8 +360,7 @@ public: */ static already_AddRefed CreateTrackUnionStream(nsIDOMWindow* aWindow, - AudioNode* aNode, - TrackTypeHints aHintContents = 0); + AudioNode* aNode); protected: ~DOMAudioNodeMediaStream(); diff --git a/dom/media/MediaManager.cpp b/dom/media/MediaManager.cpp index 540b912b88cb..f2a73dc062a3 100644 --- a/dom/media/MediaManager.cpp +++ b/dom/media/MediaManager.cpp @@ -567,14 +567,10 @@ public: MediaEngineSource* aAudioSource, MediaEngineSource* aVideoSource) { - DOMMediaStream::TrackTypeHints hints = - (aAudioSource ? DOMMediaStream::HINT_CONTENTS_AUDIO : 0) | - (aVideoSource ? DOMMediaStream::HINT_CONTENTS_VIDEO : 0); - nsRefPtr stream = new nsDOMUserMediaStream(aListener, aAudioSource, aVideoSource); - stream->InitTrackUnionStream(aWindow, hints); + stream->InitTrackUnionStream(aWindow); return stream.forget(); } diff --git a/dom/media/MediaManager.h b/dom/media/MediaManager.h index ab75413cd738..451e7c5981fb 100644 --- a/dom/media/MediaManager.h +++ b/dom/media/MediaManager.h @@ -393,21 +393,16 @@ public: NS_ASSERTION(!NS_IsMainThread(), "Never call on main thread"); nsresult rv; - DOMMediaStream::TrackTypeHints expectedTracks = 0; if (mAudioSource) { rv = mAudioSource->Start(source, kAudioTrack); - if (NS_SUCCEEDED(rv)) { - expectedTracks |= DOMMediaStream::HINT_CONTENTS_AUDIO; - } else { + if (NS_FAILED(rv)) { ReturnCallbackError(rv, "Starting audio failed"); return; } } if (mVideoSource) { rv = mVideoSource->Start(source, kVideoTrack); - if (NS_SUCCEEDED(rv)) { - expectedTracks |= DOMMediaStream::HINT_CONTENTS_VIDEO; - } else { + if (NS_FAILED(rv)) { ReturnCallbackError(rv, "Starting video failed"); return; } @@ -415,8 +410,6 @@ public: // Start() queued the tracks to be added synchronously to avoid races source->FinishAddTracks(); - mOnTracksAvailableCallback->SetExpectedTracks(expectedTracks); - source->SetPullEnabled(true); source->AdvanceKnownTracksTime(STREAM_TIME_MAX); diff --git a/dom/media/MediaRecorder.cpp b/dom/media/MediaRecorder.cpp index c827ec38f998..c73925a9297a 100644 --- a/dom/media/MediaRecorder.cpp +++ b/dom/media/MediaRecorder.cpp @@ -295,23 +295,21 @@ class MediaRecorder::Session: public nsIObserver : mSession(aSession) {} virtual void NotifyTracksAvailable(DOMMediaStream* aStream) { - uint8_t trackType = aStream->GetHintContents(); - // ToDo: GetHintContents return 0 when recording media tags. - if (trackType == 0) { - nsTArray > audioTracks; - aStream->GetAudioTracks(audioTracks); - nsTArray > videoTracks; - aStream->GetVideoTracks(videoTracks); - // What is inside the track - if (videoTracks.Length() > 0) { - trackType |= DOMMediaStream::HINT_CONTENTS_VIDEO; - } - if (audioTracks.Length() > 0) { - trackType |= DOMMediaStream::HINT_CONTENTS_AUDIO; - } + uint8_t trackTypes = 0; + nsTArray> audioTracks; + aStream->GetAudioTracks(audioTracks); + if (!audioTracks.IsEmpty()) { + trackTypes |= ContainerWriter::CREATE_AUDIO_TRACK; } - LOG(PR_LOG_DEBUG, ("Session.NotifyTracksAvailable track type = (%d)", trackType)); - mSession->InitEncoder(trackType); + + nsTArray> videoTracks; + aStream->GetVideoTracks(videoTracks); + if (!videoTracks.IsEmpty()) { + trackTypes |= ContainerWriter::CREATE_VIDEO_TRACK; + } + + LOG(PR_LOG_DEBUG, ("Session.NotifyTracksAvailable track type = (%d)", trackTypes)); + mSession->InitEncoder(trackTypes); } private: nsRefPtr mSession; @@ -542,7 +540,7 @@ private: domStream->OnTracksAvailable(tracksAvailableCallback); } else { // Web Audio node has only audio. - InitEncoder(DOMMediaStream::HINT_CONTENTS_AUDIO); + InitEncoder(ContainerWriter::CREATE_AUDIO_TRACK); } } diff --git a/dom/media/MediaStreamGraph.cpp b/dom/media/MediaStreamGraph.cpp index c19e8fcaf404..3574669be5ff 100644 --- a/dom/media/MediaStreamGraph.cpp +++ b/dom/media/MediaStreamGraph.cpp @@ -2737,7 +2737,7 @@ ProcessedMediaStream::DestroyImpl() MediaStreamGraphImpl::MediaStreamGraphImpl(bool aRealtime, TrackRate aSampleRate, - DOMMediaStream::TrackTypeHints aHint= DOMMediaStream::HINT_CONTENTS_UNKNOWN, + bool aStartWithAudioDriver, dom::AudioChannel aChannel) : MediaStreamGraph(aSampleRate) , mProcessingGraphUpdateIndex(0) @@ -2776,7 +2776,7 @@ MediaStreamGraphImpl::MediaStreamGraphImpl(bool aRealtime, #endif if (mRealtime) { - if (aHint & DOMMediaStream::HINT_CONTENTS_AUDIO) { + if (aStartWithAudioDriver) { AudioCallbackDriver* driver = new AudioCallbackDriver(this, aChannel); mDriver = driver; mMixer.AddCallback(driver); @@ -2784,7 +2784,7 @@ MediaStreamGraphImpl::MediaStreamGraphImpl(bool aRealtime, mDriver = new SystemClockDriver(this); } } else { - mDriver = new OfflineClockDriver(this, MEDIA_GRAPH_TARGET_PERIOD_MS); + mDriver = new OfflineClockDriver(this, MEDIA_GRAPH_TARGET_PERIOD_MS); } mLastMainThreadUpdate = TimeStamp::Now(); @@ -2833,7 +2833,8 @@ MediaStreamGraphShutdownObserver::Observe(nsISupports *aSubject, } MediaStreamGraph* -MediaStreamGraph::GetInstance(DOMMediaStream::TrackTypeHints aHint, dom::AudioChannel aChannel) +MediaStreamGraph::GetInstance(bool aStartWithAudioDriver, + dom::AudioChannel aChannel) { NS_ASSERTION(NS_IsMainThread(), "Main thread only"); @@ -2848,7 +2849,7 @@ MediaStreamGraph::GetInstance(DOMMediaStream::TrackTypeHints aHint, dom::AudioCh CubebUtils::InitPreferredSampleRate(); - graph = new MediaStreamGraphImpl(true, CubebUtils::PreferredSampleRate(), aHint, aChannel); + graph = new MediaStreamGraphImpl(true, CubebUtils::PreferredSampleRate(), aStartWithAudioDriver, aChannel); gGraphs.Put(channel, graph); STREAM_LOG(PR_LOG_DEBUG, ("Starting up MediaStreamGraph %p", graph)); diff --git a/dom/media/MediaStreamGraph.h b/dom/media/MediaStreamGraph.h index 522537e36a2f..d64c92847e4e 100644 --- a/dom/media/MediaStreamGraph.h +++ b/dom/media/MediaStreamGraph.h @@ -1181,7 +1181,7 @@ public: // // Main thread only - static MediaStreamGraph* GetInstance(DOMMediaStream::TrackTypeHints aHint = DOMMediaStream::HINT_CONTENTS_UNKNOWN, + static MediaStreamGraph* GetInstance(bool aStartWithAudioDriver = false, dom::AudioChannel aChannel = dom::AudioChannel::Normal); static MediaStreamGraph* CreateNonRealtimeInstance(TrackRate aSampleRate); // Idempotent diff --git a/dom/media/MediaStreamGraphImpl.h b/dom/media/MediaStreamGraphImpl.h index ac38790ab710..a4b57b7d1655 100644 --- a/dom/media/MediaStreamGraphImpl.h +++ b/dom/media/MediaStreamGraphImpl.h @@ -99,7 +99,7 @@ public: */ explicit MediaStreamGraphImpl(bool aRealtime, TrackRate aSampleRate, - DOMMediaStream::TrackTypeHints aHint, + bool aStartWithAudioDriver = false, dom::AudioChannel aChannel = dom::AudioChannel::Normal); /** diff --git a/dom/media/webaudio/AudioDestinationNode.cpp b/dom/media/webaudio/AudioDestinationNode.cpp index 4d4766147379..5cebff29bc7b 100644 --- a/dom/media/webaudio/AudioDestinationNode.cpp +++ b/dom/media/webaudio/AudioDestinationNode.cpp @@ -354,9 +354,10 @@ AudioDestinationNode::AudioDestinationNode(AudioContext* aContext, , mExtraCurrentTimeSinceLastStartedBlocking(0) , mExtraCurrentTimeUpdatedSinceLastStableState(false) { + bool startWithAudioDriver = true; MediaStreamGraph* graph = aIsOffline ? MediaStreamGraph::CreateNonRealtimeInstance(aSampleRate) : - MediaStreamGraph::GetInstance(DOMMediaStream::HINT_CONTENTS_AUDIO, aChannel); + MediaStreamGraph::GetInstance(startWithAudioDriver, aChannel); AudioNodeEngine* engine = aIsOffline ? new OfflineDestinationNodeEngine(this, aNumberOfChannels, aLength, aSampleRate) : diff --git a/dom/media/webaudio/MediaStreamAudioDestinationNode.cpp b/dom/media/webaudio/MediaStreamAudioDestinationNode.cpp index aa3738c149b4..741fc046a203 100644 --- a/dom/media/webaudio/MediaStreamAudioDestinationNode.cpp +++ b/dom/media/webaudio/MediaStreamAudioDestinationNode.cpp @@ -68,8 +68,7 @@ MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode(AudioContext* a ChannelCountMode::Explicit, ChannelInterpretation::Speakers) , mDOMStream(DOMAudioNodeMediaStream::CreateTrackUnionStream(GetOwner(), - this, - DOMMediaStream::HINT_CONTENTS_AUDIO)) + this)) { TrackUnionStream* tus = static_cast(mDOMStream->GetStream()); MOZ_ASSERT(tus == mDOMStream->GetStream()->AsProcessedStream()); diff --git a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp index 0285f34090c7..ef66fd483816 100644 --- a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp +++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp @@ -182,10 +182,7 @@ public: size_t numNewVideoTracks, const std::string& pcHandle, nsRefPtr aObserver) - : DOMMediaStream::OnTracksAvailableCallback( - // Once DOMMediaStream can handle more than one of each, this will change. - (numNewAudioTracks ? DOMMediaStream::HINT_CONTENTS_AUDIO : 0) | - (numNewVideoTracks ? DOMMediaStream::HINT_CONTENTS_VIDEO : 0)) + : DOMMediaStream::OnTracksAvailableCallback() , mObserver(aObserver) , mPcHandle(pcHandle) {} @@ -450,10 +447,10 @@ PeerConnectionImpl::~PeerConnectionImpl() } already_AddRefed -PeerConnectionImpl::MakeMediaStream(uint32_t aHint) +PeerConnectionImpl::MakeMediaStream() { nsRefPtr stream = - DOMMediaStream::CreateSourceStream(GetWindow(), aHint); + DOMMediaStream::CreateSourceStream(GetWindow()); #ifdef MOZILLA_INTERNAL_API // Make the stream data (audio/video samples) accessible to the receiving page. @@ -486,11 +483,7 @@ PeerConnectionImpl::CreateRemoteSourceStreamInfo(nsRefPtr stream = MakeMediaStream(0); + nsRefPtr stream = MakeMediaStream(); if (!stream) { return NS_ERROR_FAILURE; } diff --git a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h index e7c01ce13140..2151b013e151 100644 --- a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h +++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h @@ -264,7 +264,7 @@ public: IceConfiguration *aDst); static nsresult AddIceServer(const RTCIceServer& aServer, IceConfiguration* aDst); - already_AddRefed MakeMediaStream(uint32_t aHint); + already_AddRefed MakeMediaStream(); nsresult CreateRemoteSourceStreamInfo(nsRefPtr* aInfo, const std::string& aId); diff --git a/media/webrtc/signaling/test/FakeMediaStreams.h b/media/webrtc/signaling/test/FakeMediaStreams.h index 2fd1789b2fd2..39e63d145d62 100644 --- a/media/webrtc/signaling/test/FakeMediaStreams.h +++ b/media/webrtc/signaling/test/FakeMediaStreams.h @@ -280,7 +280,7 @@ public: NS_DECL_THREADSAFE_ISUPPORTS static already_AddRefed - CreateSourceStream(nsIDOMWindow* aWindow, uint32_t aHintContents) { + CreateSourceStream(nsIDOMWindow* aWindow, uint32_t aHintContents = 0) { Fake_SourceMediaStream *source = new Fake_SourceMediaStream(); nsRefPtr ds = new Fake_DOMMediaStream(source);