From 8dd16259287f58f9273002717ec4d27e97127719 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 07:43:14 +0200 Subject: Merging upstream version 127.0. Signed-off-by: Daniel Baumann --- dom/media/mediasource/MediaSource.cpp | 3 +-- dom/media/mediasource/MediaSourceDemuxer.cpp | 20 ++++++++++++-------- dom/media/mediasource/MediaSourceDemuxer.h | 11 +++++++---- 3 files changed, 20 insertions(+), 14 deletions(-) (limited to 'dom/media/mediasource') diff --git a/dom/media/mediasource/MediaSource.cpp b/dom/media/mediasource/MediaSource.cpp index 94e9904262..8f4cd0c514 100644 --- a/dom/media/mediasource/MediaSource.cpp +++ b/dom/media/mediasource/MediaSource.cpp @@ -191,8 +191,7 @@ void MediaSource::IsTypeSupported(const nsAString& aType, return; } if (mimeType == MEDIAMIMETYPE("audio/webm")) { - if (!(StaticPrefs::media_mediasource_webm_enabled() || - StaticPrefs::media_mediasource_webm_audio_enabled())) { + if (!StaticPrefs::media_mediasource_webm_enabled()) { // Don't leak information about the fact that it's pref-disabled; just act // like we can't play it. Or should this throw "Unknown type"? return aRv.ThrowNotSupportedError("Can't play type"); diff --git a/dom/media/mediasource/MediaSourceDemuxer.cpp b/dom/media/mediasource/MediaSourceDemuxer.cpp index 6df15cb2d4..b846beb403 100644 --- a/dom/media/mediasource/MediaSourceDemuxer.cpp +++ b/dom/media/mediasource/MediaSourceDemuxer.cpp @@ -271,7 +271,7 @@ MediaSourceTrackDemuxer::MediaSourceTrackDemuxer(MediaSourceDemuxer* aParent, : mParent(aParent), mTaskQueue(mParent->GetTaskQueue()), mType(aType), - mMutex("MediaSourceTrackDemuxer"), + mMutex("MediaSourceTrackDemuxer", this), mManager(aManager), mReset(true), mPreRoll(TimeUnit::FromMicroseconds( @@ -316,6 +316,7 @@ void MediaSourceTrackDemuxer::Reset() { RefPtr self = this; nsCOMPtr task = NS_NewRunnableFunction("MediaSourceTrackDemuxer::Reset", [self]() { + self->mMutex.AssertOnWritingThread(); self->mNextSample.reset(); self->mReset = true; if (!self->mManager) { @@ -324,7 +325,7 @@ void MediaSourceTrackDemuxer::Reset() { MOZ_ASSERT(self->OnTaskQueue()); self->mManager->Seek(self->mType, TimeUnit::Zero(), TimeUnit::Zero()); { - MutexAutoLock mon(self->mMutex); + MutexSingleWriterAutoLockOnThread(lock, self->mMutex); self->mNextRandomAccessPoint = self->mManager->GetNextRandomAccessPoint( self->mType, MediaSourceDemuxer::EOS_FUZZ); @@ -336,7 +337,7 @@ void MediaSourceTrackDemuxer::Reset() { } nsresult MediaSourceTrackDemuxer::GetNextRandomAccessPoint(TimeUnit* aTime) { - MutexAutoLock mon(mMutex); + MutexSingleWriterAutoLock mon(mMutex); *aTime = mNextRandomAccessPoint; return NS_OK; } @@ -350,7 +351,7 @@ MediaSourceTrackDemuxer::SkipToNextRandomAccessPoint( } media::TimeIntervals MediaSourceTrackDemuxer::GetBuffered() { - MutexAutoLock mon(mMutex); + MutexSingleWriterAutoLock mon(mMutex); if (!mManager) { return media::TimeIntervals(); } @@ -371,6 +372,7 @@ void MediaSourceTrackDemuxer::BreakCycles() { RefPtr MediaSourceTrackDemuxer::DoSeek( const TimeUnit& aTime) { + mMutex.AssertOnWritingThread(); if (!mManager) { return SeekPromise::CreateAndReject( MediaResult(NS_ERROR_DOM_MEDIA_CANCELED, @@ -426,7 +428,7 @@ RefPtr MediaSourceTrackDemuxer::DoSeek( } mReset = false; { - MutexAutoLock mon(mMutex); + MutexSingleWriterAutoLockOnThread(lock, mMutex); mNextRandomAccessPoint = mManager->GetNextRandomAccessPoint(mType, MediaSourceDemuxer::EOS_FUZZ); } @@ -435,6 +437,7 @@ RefPtr MediaSourceTrackDemuxer::DoSeek( RefPtr MediaSourceTrackDemuxer::DoGetSamples(int32_t aNumSamples) { + mMutex.AssertOnWritingThread(); if (!mManager) { return SamplesPromise::CreateAndReject( MediaResult(NS_ERROR_DOM_MEDIA_CANCELED, @@ -487,7 +490,7 @@ MediaSourceTrackDemuxer::DoGetSamples(int32_t aNumSamples) { RefPtr samples = new SamplesHolder; samples->AppendSample(sample); { - MutexAutoLock mon(mMutex); // spurious warning will be given + MutexSingleWriterAutoLockOnThread(lock, mMutex); // Diagnostic asserts for bug 1810396 MOZ_DIAGNOSTIC_ASSERT(sample, "Invalid sample pointer found!"); MOZ_DIAGNOSTIC_ASSERT(sample->HasValidTime(), "Invalid sample time found!"); @@ -505,6 +508,7 @@ MediaSourceTrackDemuxer::DoGetSamples(int32_t aNumSamples) { RefPtr MediaSourceTrackDemuxer::DoSkipToNextRandomAccessPoint( const TimeUnit& aTimeThreadshold) { + mMutex.AssertOnWritingThread(); if (!mManager) { return SkipAccessPointPromise::CreateAndReject( SkipFailureHolder(MediaResult(NS_ERROR_DOM_MEDIA_CANCELED, @@ -534,13 +538,13 @@ MediaSourceTrackDemuxer::DoSkipToNextRandomAccessPoint( } bool MediaSourceTrackDemuxer::HasManager(TrackBuffersManager* aManager) const { - MOZ_ASSERT(OnTaskQueue()); + mMutex.AssertOnWritingThread(); return mManager == aManager; } void MediaSourceTrackDemuxer::DetachManager() { MOZ_ASSERT(OnTaskQueue()); - MutexAutoLock mon(mMutex); + MutexSingleWriterAutoLock mon(mMutex); mManager = nullptr; } diff --git a/dom/media/mediasource/MediaSourceDemuxer.h b/dom/media/mediasource/MediaSourceDemuxer.h index 177aae769b..fa25878af9 100644 --- a/dom/media/mediasource/MediaSourceDemuxer.h +++ b/dom/media/mediasource/MediaSourceDemuxer.h @@ -101,13 +101,16 @@ class MediaSourceDemuxer : public MediaDataDemuxer, class MediaSourceTrackDemuxer : public MediaTrackDemuxer, - public DecoderDoctorLifeLogger { + public DecoderDoctorLifeLogger, + public SingleWriterLockOwner { public: MediaSourceTrackDemuxer(MediaSourceDemuxer* aParent, TrackInfo::TrackType aType, TrackBuffersManager* aManager) MOZ_REQUIRES(aParent->mMutex); + bool OnWritingThread() const override { return OnTaskQueue(); } + UniquePtr GetInfo() const override; RefPtr Seek(const media::TimeUnit& aTime) override; @@ -146,12 +149,12 @@ class MediaSourceTrackDemuxer TrackInfo::TrackType mType; // Mutex protecting members below accessed from multiple threads. - Mutex mMutex MOZ_UNANNOTATED; - media::TimeUnit mNextRandomAccessPoint; + MutexSingleWriter mMutex; + media::TimeUnit mNextRandomAccessPoint MOZ_GUARDED_BY(mMutex); // Would be accessed in MFR's demuxer proxy task queue and TaskQueue, and // only be set on the TaskQueue. It can be accessed while on TaskQueue without // the need for the lock. - RefPtr mManager; + RefPtr mManager MOZ_GUARDED_BY(mMutex); // Only accessed on TaskQueue Maybe> mNextSample; -- cgit v1.2.3