Bug 1407549 - Simplify MSGImpl::AudioTrackPresent. r?padenot
MozReview-Commit-ID: 9MBH3xoah1f
--- a/dom/media/MediaStreamGraph.cpp
+++ b/dom/media/MediaStreamGraph.cpp
@@ -327,63 +327,60 @@ MediaStreamGraphImpl::WillUnderrun(Media
namespace {
// Value of mCycleMarker for unvisited streams in cycle detection.
const uint32_t NOT_VISITED = UINT32_MAX;
// Value of mCycleMarker for ordered streams in muted cycles.
const uint32_t IN_MUTED_CYCLE = 1;
} // namespace
bool
-MediaStreamGraphImpl::AudioTrackPresent(bool& aNeedsAEC)
+MediaStreamGraphImpl::AudioTrackPresent()
{
MOZ_ASSERT(OnGraphThreadOrNotRunning());
bool audioTrackPresent = false;
- for (uint32_t i = 0; i < mStreams.Length() && audioTrackPresent == false; ++i) {
- MediaStream* stream = mStreams[i];
- SourceMediaStream* source = stream->AsSourceStream();
-#ifdef MOZ_WEBRTC
- if (source && source->NeedsMixing()) {
- aNeedsAEC = true;
- }
-#endif
- // If this is a AudioNodeStream, force a AudioCallbackDriver.
+ for (MediaStream* stream : mStreams) {
if (stream->AsAudioNodeStream()) {
audioTrackPresent = true;
- } else {
- for (StreamTracks::TrackIter tracks(stream->GetStreamTracks(), MediaSegment::AUDIO);
- !tracks.IsEnded(); tracks.Next()) {
- audioTrackPresent = true;
- }
+ break;
}
- if (source) {
+
+ if (!StreamTracks::TrackIter(
+ stream->GetStreamTracks(),
+ MediaSegment::AUDIO
+ ).IsEnded()) {
+ audioTrackPresent = true;
+ break;
+ }
+
+ if (SourceMediaStream* source = stream->AsSourceStream()) {
audioTrackPresent = source->HasPendingAudioTrack();
}
+
+ if (audioTrackPresent) {
+ break;
+ }
}
// XXX For some reason, there are race conditions when starting an audio input where
// we find no active audio tracks. In any case, if we have an active audio input we
// should not allow a switch back to a SystemClockDriver
if (!audioTrackPresent && mInputDeviceUsers.Count() != 0) {
NS_WARNING("No audio tracks, but full-duplex audio is enabled!!!!!");
audioTrackPresent = true;
-#ifdef MOZ_WEBRTC
- aNeedsAEC = true;
-#endif
}
return audioTrackPresent;
}
void
MediaStreamGraphImpl::UpdateStreamOrder()
{
MOZ_ASSERT(OnGraphThreadOrNotRunning());
- bool shouldAEC = false;
- bool audioTrackPresent = AudioTrackPresent(shouldAEC);
+ bool audioTrackPresent = AudioTrackPresent();
// Note that this looks for any audio streams, input or output, and switches to a
// SystemClockDriver if there are none. However, if another is already pending, let that
// switch happen.
if (!audioTrackPresent && mRealtime &&
CurrentDriver()->AsAudioCallbackDriver()) {
MonitorAutoLock mon(mMonitor);
@@ -890,18 +887,17 @@ MediaStreamGraphImpl::CloseAudioInputImp
mInputWanted = false;
AudioCallbackDriver *driver = CurrentDriver()->AsAudioCallbackDriver();
if (driver) {
driver->RemoveInputListener(aListener);
}
mAudioInputs.RemoveElement(aListener);
// Switch Drivers since we're adding or removing an input (to nothing/system or output only)
- bool shouldAEC = false;
- bool audioTrackPresent = AudioTrackPresent(shouldAEC);
+ bool audioTrackPresent = AudioTrackPresent();
MonitorAutoLock mon(mMonitor);
if (LifecycleStateRef() == LIFECYCLE_RUNNING) {
GraphDriver* driver;
if (audioTrackPresent) {
// We still have audio output
LOG(LogLevel::Debug, ("CloseInput: output present (AudioCallback)"));
@@ -4139,18 +4135,17 @@ MediaStreamGraphImpl::ApplyAudioContextO
}
}
// Close, suspend: check if we are going to switch to a
// SystemAudioCallbackDriver, and pass the promise to the AudioCallbackDriver
// if that's the case, so it can notify the content.
// This is the same logic as in UpdateStreamOrder, but it's simpler to have it
// here as well so we don't have to store the Promise(s) on the Graph.
if (aOperation != AudioContextOperation::Resume) {
- bool shouldAEC = false;
- bool audioTrackPresent = AudioTrackPresent(shouldAEC);
+ bool audioTrackPresent = AudioTrackPresent();
if (!audioTrackPresent && CurrentDriver()->AsAudioCallbackDriver()) {
CurrentDriver()->AsAudioCallbackDriver()->
EnqueueStreamAndPromiseForOperation(aDestinationStream, aPromise,
aOperation);
SystemClockDriver* driver;
if (nextDriver) {
--- a/dom/media/MediaStreamGraphImpl.h
+++ b/dom/media/MediaStreamGraphImpl.h
@@ -317,19 +317,18 @@ public:
* Move streams from the mStreams to mSuspendedStream if suspending/closing an
* AudioContext, or the inverse when resuming an AudioContext.
*/
void SuspendOrResumeStreams(dom::AudioContextOperation aAudioContextOperation,
const nsTArray<MediaStream*>& aStreamSet);
/**
* Determine if we have any audio tracks, or are about to add any audiotracks.
- * Also checks if we'll need the AEC running (i.e. microphone input tracks)
*/
- bool AudioTrackPresent(bool& aNeedsAEC);
+ bool AudioTrackPresent();
/**
* Sort mStreams so that every stream not in a cycle is after any streams
* it depends on, and every stream in a cycle is marked as being in a cycle.
* Also sets mIsConsumed on every stream.
*/
void UpdateStreamOrder();