diff --git a/dom/media/MediaTrackGraph.cpp b/dom/media/MediaTrackGraph.cpp index 7f4f359c770a..d9f390bac923 100644 --- a/dom/media/MediaTrackGraph.cpp +++ b/dom/media/MediaTrackGraph.cpp @@ -3092,6 +3092,16 @@ void MediaInputPort::Disconnect() { mGraph->SetTrackOrderDirty(); } +MediaTrack* MediaInputPort::GetSource() const { + mGraph->AssertOnGraphThreadOrNotRunning(); + return mSource; +} + +ProcessedMediaTrack* MediaInputPort::GetDestination() const { + mGraph->AssertOnGraphThreadOrNotRunning(); + return mDest; +} + MediaInputPort::InputInterval MediaInputPort::GetNextInputInterval( MediaInputPort const* aPort, GraphTime aTime) { InputInterval result = {GRAPH_TIME_MAX, GRAPH_TIME_MAX, false}; @@ -3169,7 +3179,7 @@ already_AddRefed ProcessedMediaTrack::AllocateInputPort( class Message : public ControlMessage { public: explicit Message(MediaInputPort* aPort) - : ControlMessage(aPort->GetDestination()), mPort(aPort) {} + : ControlMessage(aPort->mDest), mPort(aPort) {} void Run() override { TRACE("ProcessedMediaTrack::AllocateInputPort ControlMessage"); mPort->Init(); diff --git a/dom/media/MediaTrackGraph.h b/dom/media/MediaTrackGraph.h index 2ee99e529dee..d4c3e4611314 100644 --- a/dom/media/MediaTrackGraph.h +++ b/dom/media/MediaTrackGraph.h @@ -816,8 +816,8 @@ class MediaInputPort final { // and destination tracks. void Disconnect(); - MediaTrack* GetSource() const { return mSource; } - ProcessedMediaTrack* GetDestination() const { return mDest; } + MediaTrack* GetSource() const; + ProcessedMediaTrack* GetDestination() const; uint16_t InputNumber() const { return mInputNumber; } uint16_t OutputNumber() const { return mOutputNumber; } diff --git a/dom/media/webrtc/transportbridge/MediaPipeline.cpp b/dom/media/webrtc/transportbridge/MediaPipeline.cpp index 4f9ce7bbec92..a2b7753da1f0 100644 --- a/dom/media/webrtc/transportbridge/MediaPipeline.cpp +++ b/dom/media/webrtc/transportbridge/MediaPipeline.cpp @@ -879,8 +879,7 @@ void MediaPipelineTransmit::UpdateSendState() { mSendTrackOverride.Ref() && !mSendTrackOverride.Ref()->IsDestroyed(); const bool mustRemoveSendTrack = haveLiveSendTrack && !mSendTrackOverride.Ref() && - (!haveLiveDomTrack || - mDomTrack.Ref()->GetTrack() != mSendPort->GetSource()); + (!haveLiveDomTrack || mDomTrack.Ref()->GetTrack() != mSendPortSource); mTransmitting = mActive && (haveLiveDomTrack || haveLiveOverrideTrack) && !mustRemoveSendTrack; @@ -917,7 +916,8 @@ void MediaPipelineTransmit::UpdateSendState() { } else { mSendTrack = mDomTrack.Ref()->Graph()->CreateForwardedInputTrack( mDomTrack.Ref()->GetTrack()->mType); - mSendPort = mSendTrack->AllocateInputPort(mDomTrack.Ref()->GetTrack()); + mSendPortSource = mDomTrack.Ref()->GetTrack(); + mSendPort = mSendTrack->AllocateInputPort(mSendPortSource.get()); } mSendTrack->QueueSetAutoend(false); if (mIsVideo) { @@ -948,6 +948,7 @@ void MediaPipelineTransmit::UpdateSendState() { mSendTrack->Destroy(); mSendPort->Destroy(); mSendPort = nullptr; + mSendPortSource = nullptr; } } } diff --git a/dom/media/webrtc/transportbridge/MediaPipeline.h b/dom/media/webrtc/transportbridge/MediaPipeline.h index cfd494ceea2b..b5f61a34e38e 100644 --- a/dom/media/webrtc/transportbridge/MediaPipeline.h +++ b/dom/media/webrtc/transportbridge/MediaPipeline.h @@ -318,6 +318,8 @@ class MediaPipelineTransmit Watchable> mDomTrack; // Input port connecting mDomTrack's MediaTrack to mSendTrack. RefPtr mSendPort; + // The source track of the mSendTrack. Main thread only. + RefPtr mSendPortSource; // True if a parameter affecting mDescription has changed. To avoid updating // the description unnecessarily. Main thread only. bool mDescriptionInvalidated = true;