From 986770c64d74f6f3a1c55bba13dc7085838499f3 Mon Sep 17 00:00:00 2001 From: Karl Tomlinson Date: Wed, 18 Oct 2023 23:30:32 +0000 Subject: [PATCH] Bug 1859433 remove some miscellaneous MediaTrackGraphImpl usage outside of core graph implementation r=pehrsons The only behavior change is that PipelineListener::SetPrivatePrincipal() no longer toggles a reference count in the control message. Differential Revision: https://phabricator.services.mozilla.com/D191248 --- dom/media/AudioCaptureTrack.cpp | 15 +--- dom/media/CrossGraphPort.cpp | 2 +- dom/media/ForwardedInputTrack.cpp | 2 +- dom/media/MediaManager.cpp | 2 +- dom/media/MediaRecorder.cpp | 2 +- dom/media/encoder/MediaEncoder.cpp | 40 ++++------- dom/media/encoder/MediaEncoder.h | 6 -- dom/media/mediasink/AudioDecoderInputTrack.cpp | 81 +++++++--------------- dom/media/mediasink/AudioDecoderInputTrack.h | 3 +- dom/media/webrtc/transportbridge/MediaPipeline.cpp | 35 +++------- 10 files changed, 56 insertions(+), 132 deletions(-) diff --git a/dom/media/AudioCaptureTrack.cpp b/dom/media/AudioCaptureTrack.cpp index f30581ee6925..0772abdc6256 100644 --- a/dom/media/AudioCaptureTrack.cpp +++ b/dom/media/AudioCaptureTrack.cpp @@ -3,7 +3,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "MediaTrackGraphImpl.h" +#include "MediaTrackGraph.h" #include "MediaTrackListener.h" #include "mozilla/MathAlgorithms.h" #include "mozilla/Unused.h" @@ -43,17 +43,8 @@ AudioCaptureTrack::~AudioCaptureTrack() { } void AudioCaptureTrack::Start() { - class Message : public ControlMessage { - public: - explicit Message(AudioCaptureTrack* aTrack) - : ControlMessage(aTrack), mTrack(aTrack) {} - - virtual void Run() { mTrack->mStarted = true; } - - protected: - AudioCaptureTrack* mTrack; - }; - GraphImpl()->AppendMessage(MakeUnique(this)); + QueueControlMessageWithNoShutdown( + [self = RefPtr{this}, this] { mStarted = true; }); } void AudioCaptureTrack::ProcessInput(GraphTime aFrom, GraphTime aTo, diff --git a/dom/media/CrossGraphPort.cpp b/dom/media/CrossGraphPort.cpp index 62c393f447ad..06cf6def23bd 100644 --- a/dom/media/CrossGraphPort.cpp +++ b/dom/media/CrossGraphPort.cpp @@ -6,7 +6,7 @@ #include "AudioDeviceInfo.h" #include "AudioStreamTrack.h" -#include "MediaTrackGraphImpl.h" +#include "MediaTrackGraph.h" #include "mozilla/Logging.h" #include "mozilla/Preferences.h" diff --git a/dom/media/ForwardedInputTrack.cpp b/dom/media/ForwardedInputTrack.cpp index 8859fc633250..2f71f0e12af9 100644 --- a/dom/media/ForwardedInputTrack.cpp +++ b/dom/media/ForwardedInputTrack.cpp @@ -13,7 +13,7 @@ #include "DOMMediaStream.h" #include "GeckoProfiler.h" #include "ImageContainer.h" -#include "MediaTrackGraphImpl.h" +#include "MediaTrackGraph.h" #include "mozilla/Attributes.h" #include "mozilla/Logging.h" #include "mozilla/MathAlgorithms.h" diff --git a/dom/media/MediaManager.cpp b/dom/media/MediaManager.cpp index eeb2973d6bae..ce742922cecf 100644 --- a/dom/media/MediaManager.cpp +++ b/dom/media/MediaManager.cpp @@ -12,7 +12,7 @@ #include "CubebDeviceEnumerator.h" #include "MediaTimer.h" #include "MediaTrackConstraints.h" -#include "MediaTrackGraphImpl.h" +#include "MediaTrackGraph.h" #include "MediaTrackListener.h" #include "VideoStreamTrack.h" #include "VideoUtils.h" diff --git a/dom/media/MediaRecorder.cpp b/dom/media/MediaRecorder.cpp index bdfab11056b6..42cd65509377 100644 --- a/dom/media/MediaRecorder.cpp +++ b/dom/media/MediaRecorder.cpp @@ -11,7 +11,7 @@ #include "DOMMediaStream.h" #include "MediaDecoder.h" #include "MediaEncoder.h" -#include "MediaTrackGraphImpl.h" +#include "MediaTrackGraph.h" #include "VideoUtils.h" #include "mozilla/DOMEventTargetHelper.h" #include "mozilla/dom/AudioStreamTrack.h" diff --git a/dom/media/encoder/MediaEncoder.cpp b/dom/media/encoder/MediaEncoder.cpp index 4410448edd1d..cae5c4ab4e0b 100644 --- a/dom/media/encoder/MediaEncoder.cpp +++ b/dom/media/encoder/MediaEncoder.cpp @@ -10,7 +10,7 @@ #include "AudioNodeTrack.h" #include "DriftCompensation.h" #include "MediaDecoder.h" -#include "MediaTrackGraphImpl.h" +#include "MediaTrackGraph.h" #include "MediaTrackListener.h" #include "mozilla/dom/AudioNode.h" #include "mozilla/dom/AudioStreamTrack.h" @@ -487,29 +487,13 @@ void MediaEncoder::EnsureGraphTrackFrom(MediaTrack* aTrack) { } MOZ_DIAGNOSTIC_ASSERT(!aTrack->IsDestroyed()); mGraphTrack = MakeAndAddRef( - aTrack->GraphImpl()->CreateSourceTrack(MediaSegment::VIDEO)); -} - -void MediaEncoder::RunOnGraph(already_AddRefed aRunnable) { - MOZ_ASSERT(mGraphTrack); - class Message : public ControlMessage { - public: - explicit Message(already_AddRefed aRunnable) - : ControlMessage(nullptr), mRunnable(aRunnable) {} - void Run() override { - TRACE("MediaEncoder::RunOnGraph"); - mRunnable->Run(); - } - const RefPtr mRunnable; - }; - mGraphTrack->mTrack->GraphImpl()->AppendMessage( - MakeUnique(std::move(aRunnable))); + aTrack->Graph()->CreateSourceTrack(MediaSegment::VIDEO)); } void MediaEncoder::Suspend() { - RunOnGraph(NS_NewRunnableFunction( - "MediaEncoder::Suspend (graph)", + mGraphTrack->mTrack->QueueControlMessageWithNoShutdown( [self = RefPtr(this), this] { + TRACE("MediaEncoder::Suspend (graph)"); if (NS_FAILED(mEncoderThread->Dispatch( NS_NewRunnableFunction("MediaEncoder::Suspend (encoder)", [self, this, now = TimeStamp::Now()] { @@ -520,17 +504,17 @@ void MediaEncoder::Suspend() { mVideoEncoder->Suspend(now); } })))) { - // RunOnGraph added an extra async step, and now `thread` has shut - // down. + // QueueControlMessageWithNoShutdown added an extra async step, and + // now `thread` has shut down. return; } - })); + }); } void MediaEncoder::Resume() { - RunOnGraph(NS_NewRunnableFunction( - "MediaEncoder::Resume (graph)", + mGraphTrack->mTrack->QueueControlMessageWithNoShutdown( [self = RefPtr(this), this] { + TRACE("MediaEncoder::Resume (graph)"); if (NS_FAILED(mEncoderThread->Dispatch( NS_NewRunnableFunction("MediaEncoder::Resume (encoder)", [self, this, now = TimeStamp::Now()] { @@ -541,11 +525,11 @@ void MediaEncoder::Resume() { mVideoEncoder->Resume(now); } })))) { - // RunOnGraph added an extra async step, and now `thread` has shut - // down. + // QueueControlMessageWithNoShutdown added an extra async step, and + // now `thread` has shut down. return; } - })); + }); } void MediaEncoder::ConnectAudioNode(AudioNode* aNode, uint32_t aOutput) { diff --git a/dom/media/encoder/MediaEncoder.h b/dom/media/encoder/MediaEncoder.h index 60a48c75d844..005d1f2dcefc 100644 --- a/dom/media/encoder/MediaEncoder.h +++ b/dom/media/encoder/MediaEncoder.h @@ -255,12 +255,6 @@ class MediaEncoder { void EnsureGraphTrackFrom(MediaTrack* aTrack); /** - * Takes a regular runnable and dispatches it to the graph wrapped in a - * ControlMessage. - */ - void RunOnGraph(already_AddRefed aRunnable); - - /** * Shuts down gracefully if there is no remaining live track encoder. */ void MaybeShutdown(); diff --git a/dom/media/mediasink/AudioDecoderInputTrack.cpp b/dom/media/mediasink/AudioDecoderInputTrack.cpp index 82f126fca024..50555256e722 100644 --- a/dom/media/mediasink/AudioDecoderInputTrack.cpp +++ b/dom/media/mediasink/AudioDecoderInputTrack.cpp @@ -78,9 +78,9 @@ bool AudioDecoderInputTrack::ConvertAudioDataToSegment( mResampler.own(nullptr); mResamplerChannelCount = 0; } - if (mInputSampleRate != GraphImpl()->GraphRate()) { + if (mInputSampleRate != Graph()->GraphRate()) { aSegment.ResampleChunks(mResampler, &mResamplerChannelCount, - mInputSampleRate, GraphImpl()->GraphRate()); + mInputSampleRate, Graph()->GraphRate()); } return aSegment.GetDuration() > 0; } @@ -233,22 +233,12 @@ void AudioDecoderInputTrack::SetVolume(float aVolume) { void AudioDecoderInputTrack::SetVolumeImpl(float aVolume) { MOZ_ASSERT(NS_IsMainThread()); - class Message : public ControlMessage { - public: - Message(AudioDecoderInputTrack* aTrack, float aVolume) - : ControlMessage(aTrack), mTrack(aTrack), mVolume(aVolume) {} - void Run() override { - TRACE_COMMENT("AudioDecoderInputTrack::SetVolume ControlMessage", "%f", - mVolume); - LOG_M("Apply volume=%f", mTrack.get(), mVolume); - mTrack->mVolume = mVolume; - } - - protected: - const RefPtr mTrack; - const float mVolume; - }; - GraphImpl()->AppendMessage(MakeUnique(this, aVolume)); + QueueControlMessageWithNoShutdown([self = RefPtr{this}, this, aVolume] { + TRACE_COMMENT("AudioDecoderInputTrack::SetVolume ControlMessage", "%f", + aVolume); + LOG_M("Apply volume=%f", this, aVolume); + mVolume = aVolume; + }); } void AudioDecoderInputTrack::SetPlaybackRate(float aPlaybackRate) { @@ -263,25 +253,13 @@ void AudioDecoderInputTrack::SetPlaybackRate(float aPlaybackRate) { void AudioDecoderInputTrack::SetPlaybackRateImpl(float aPlaybackRate) { MOZ_ASSERT(NS_IsMainThread()); - class Message : public ControlMessage { - public: - Message(AudioDecoderInputTrack* aTrack, float aPlaybackRate) - : ControlMessage(aTrack), - mTrack(aTrack), - mPlaybackRate(aPlaybackRate) {} - void Run() override { - TRACE_COMMENT("AudioDecoderInputTrack::SetPlaybackRate ControlMessage", - "%f", mPlaybackRate); - LOG_M("Apply playback rate=%f", mTrack.get(), mPlaybackRate); - mTrack->mPlaybackRate = mPlaybackRate; - mTrack->SetTempoAndRateForTimeStretcher(); - } - - protected: - const RefPtr mTrack; - const float mPlaybackRate; - }; - GraphImpl()->AppendMessage(MakeUnique(this, aPlaybackRate)); + QueueControlMessageWithNoShutdown([self = RefPtr{this}, this, aPlaybackRate] { + TRACE_COMMENT("AudioDecoderInputTrack::SetPlaybackRate ControlMessage", + "%f", aPlaybackRate); + LOG_M("Apply playback rate=%f", this, aPlaybackRate); + mPlaybackRate = aPlaybackRate; + SetTempoAndRateForTimeStretcher(); + }); } void AudioDecoderInputTrack::SetPreservesPitch(bool aPreservesPitch) { @@ -296,25 +274,14 @@ void AudioDecoderInputTrack::SetPreservesPitch(bool aPreservesPitch) { void AudioDecoderInputTrack::SetPreservesPitchImpl(bool aPreservesPitch) { MOZ_ASSERT(NS_IsMainThread()); - class Message : public ControlMessage { - public: - Message(AudioDecoderInputTrack* aTrack, bool aPreservesPitch) - : ControlMessage(aTrack), - mTrack(aTrack), - mPreservesPitch(aPreservesPitch) {} - void Run() override { - TRACE_COMMENT("AudioDecoderInputTrack::SetPreservesPitch", "%s", - mPreservesPitch ? "true" : "false") - LOG_M("Apply preserves pitch=%d", mTrack.get(), mPreservesPitch); - mTrack->mPreservesPitch = mPreservesPitch; - mTrack->SetTempoAndRateForTimeStretcher(); - } - - protected: - const RefPtr mTrack; - const bool mPreservesPitch; - }; - GraphImpl()->AppendMessage(MakeUnique(this, aPreservesPitch)); + QueueControlMessageWithNoShutdown( + [self = RefPtr{this}, this, aPreservesPitch] { + TRACE_COMMENT("AudioDecoderInputTrack::SetPreservesPitch", "%s", + aPreservesPitch ? "true" : "false"); + LOG_M("Apply preserves pitch=%d", this, aPreservesPitch); + mPreservesPitch = aPreservesPitch; + SetTempoAndRateForTimeStretcher(); + }); } void AudioDecoderInputTrack::Close() { @@ -654,7 +621,7 @@ void AudioDecoderInputTrack::EnsureTimeStretcher() { AssertOnGraphThread(); if (!mTimeStretcher) { mTimeStretcher = new RLBoxSoundTouch(); - mTimeStretcher->setSampleRate(GraphImpl()->GraphRate()); + mTimeStretcher->setSampleRate(Graph()->GraphRate()); mTimeStretcher->setChannels(GetChannelCountForTimeStretcher()); mTimeStretcher->setPitch(1.0); diff --git a/dom/media/mediasink/AudioDecoderInputTrack.h b/dom/media/mediasink/AudioDecoderInputTrack.h index 87698e40b651..051964d78450 100644 --- a/dom/media/mediasink/AudioDecoderInputTrack.h +++ b/dom/media/mediasink/AudioDecoderInputTrack.h @@ -9,8 +9,8 @@ #include "MediaEventSource.h" #include "MediaTimer.h" #include "MediaTrackGraph.h" -#include "MediaTrackGraphImpl.h" #include "MediaSegment.h" +#include "TimeUnits.h" #include "mozilla/SPSCQueue.h" #include "mozilla/StateMirroring.h" #include "nsISerialEventTarget.h" @@ -18,6 +18,7 @@ namespace mozilla { class AudioData; +class AudioInfo; class RLBoxSoundTouch; /** diff --git a/dom/media/webrtc/transportbridge/MediaPipeline.cpp b/dom/media/webrtc/transportbridge/MediaPipeline.cpp index 5d85404a7159..f6c570b6f403 100644 --- a/dom/media/webrtc/transportbridge/MediaPipeline.cpp +++ b/dom/media/webrtc/transportbridge/MediaPipeline.cpp @@ -19,7 +19,7 @@ #include "ImageTypes.h" #include "MediaEngine.h" #include "MediaSegment.h" -#include "MediaTrackGraphImpl.h" +#include "MediaTrackGraph.h" #include "MediaTrackListener.h" #include "MediaStreamTrack.h" #include "RtpLogger.h" @@ -1224,33 +1224,20 @@ class MediaPipelineReceiveAudio::PipelineListener void SetPrivatePrincipal(PrincipalHandle aHandle) { MOZ_ASSERT(NS_IsMainThread()); - class Message : public ControlMessage { - public: - Message(RefPtr aListener, - PrincipalHandle aPrivatePrincipal) - : ControlMessage(nullptr), - mListener(std::move(aListener)), - mPrivatePrincipal(std::move(aPrivatePrincipal)) {} - - void Run() override { - if (mListener->mPrivacy == PrincipalPrivacy::Private) { - return; - } - mListener->mPrincipalHandle = mPrivatePrincipal; - mListener->mPrivacy = PrincipalPrivacy::Private; - mListener->mForceSilence = false; - } - - const RefPtr mListener; - PrincipalHandle mPrivatePrincipal; - }; - if (mSource->IsDestroyed()) { return; } - mSource->GraphImpl()->AppendMessage( - MakeUnique(this, std::move(aHandle))); + mSource->QueueControlMessageWithNoShutdown( + [self = RefPtr{this}, this, + privatePrincipal = std::move(aHandle)]() mutable { + if (mPrivacy == PrincipalPrivacy::Private) { + return; + } + mPrincipalHandle = std::move(privatePrincipal); + mPrivacy = PrincipalPrivacy::Private; + mForceSilence = false; + }); } private: -- 2.11.4.GIT