diff options
author | Matt A. Tobin <email@mattatobin.com> | 2022-04-21 13:59:55 -0500 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2022-04-21 13:59:55 -0500 |
commit | b5cf6b9b3f577ad7d08205dab34cf4a812088fde (patch) | |
tree | f5695b41090d3e7fa5f98db4a4b9b1373c490992 | |
parent | 796ef61698ff59668594ff18e1cad3489c875924 (diff) | |
download | aura-central-b5cf6b9b3f577ad7d08205dab34cf4a812088fde.tar.gz |
Issue #25 - Part 14: Remove DOM Media code relating to waiting for an eme key
-rw-r--r-- | dom/base/nsGkAtomList.h | 1 | ||||
-rw-r--r-- | dom/html/HTMLMediaElement.cpp | 34 | ||||
-rw-r--r-- | dom/html/HTMLMediaElement.h | 16 | ||||
-rw-r--r-- | dom/media/AbstractMediaDecoder.h | 12 | ||||
-rw-r--r-- | dom/media/MediaFormatReader.cpp | 54 | ||||
-rw-r--r-- | dom/media/MediaFormatReader.h | 10 | ||||
-rw-r--r-- | dom/media/mediasource/MediaSourceDecoder.cpp | 12 | ||||
-rw-r--r-- | dom/media/mediasource/MediaSourceDecoder.h | 5 | ||||
-rw-r--r-- | dom/media/platforms/PlatformDecoderModule.h | 6 | ||||
-rw-r--r-- | dom/media/platforms/agnostic/gmp/MediaDataDecoderProxy.h | 5 |
10 files changed, 14 insertions, 141 deletions
diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h index ad2eda211..50b3d911d 100644 --- a/dom/base/nsGkAtomList.h +++ b/dom/base/nsGkAtomList.h @@ -2105,7 +2105,6 @@ GK_ATOM(onenter, "onenter") GK_ATOM(onexit, "onexit") GK_ATOM(onencrypted, "onencrypted") GK_ATOM(encrypted, "encrypted") -GK_ATOM(onwaitingforkey, "onwaitingforkey") GK_ATOM(onkeystatuseschange, "onkeystatuseschange") GK_ATOM(onremovetrack, "onremovetrack") GK_ATOM(loadstart, "loadstart") diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index 35df8dd0e..9de0fd82b 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -1067,7 +1067,6 @@ void HTMLMediaElement::ShutdownDecoder() { RemoveMediaElementFromURITable(); NS_ASSERTION(mDecoder, "Must have decoder to shut down"); - mWaitingForKeyListener.DisconnectIfExists(); for (OutputMediaStream& out : mOutputStreams) { if (!out.mCapturingDecoder) { continue; @@ -1151,7 +1150,6 @@ void HTMLMediaElement::AbortExistingLoads() mDownloadSuspendedByCache = false; mMediaInfo = MediaInfo(); mIsEncrypted = false; - mWaitingForKey = NOT_WAITING_FOR_KEY; mSourcePointer = nullptr; mTags = nullptr; @@ -3149,7 +3147,6 @@ HTMLMediaElement::HTMLMediaElement(already_AddRefed<mozilla::dom::NodeInfo>& aNo mMediaSecurityVerified(false), mCORSMode(CORS_NONE), mIsEncrypted(false), - mWaitingForKey(NOT_WAITING_FOR_KEY), mDownloadSuspendedByCache(false, "HTMLMediaElement::mDownloadSuspendedByCache"), mAudioChannelVolume(1.0), mPlayingThroughTheAudioChannel(false), @@ -4467,8 +4464,8 @@ void HTMLMediaElement::MetadataLoaded(const MediaInfo* aInfo, void HTMLMediaElement::FirstFrameLoaded() { - LOG(LogLevel::Debug, ("%p, FirstFrameLoaded() mFirstFrameLoaded=%d mWaitingForKey=%d", - this, mFirstFrameLoaded, mWaitingForKey)); + LOG(LogLevel::Debug, ("%p, FirstFrameLoaded() mFirstFrameLoaded=%d", + this, mFirstFrameLoaded)); NS_ASSERTION(!mSuspendedAfterFirstFrame, "Should not have already suspended"); @@ -4813,28 +4810,8 @@ HTMLMediaElement::UpdateReadyStateInternal() } enum NextFrameStatus nextFrameStatus = NextFrameStatus(); - if (nextFrameStatus == NEXT_FRAME_UNAVAILABLE || - (nextFrameStatus == NEXT_FRAME_UNAVAILABLE_BUFFERING && - mWaitingForKey == WAITING_FOR_KEY)) { - if (mWaitingForKey != NOT_WAITING_FOR_KEY) { - // http://w3c.github.io/encrypted-media/#wait-for-key - // Continuing 7.3.4 Queue a "waitingforkey" Event - // 4. Queue a task to fire a simple event named waitingforkey - // at the media element. - if (mWaitingForKey == WAITING_FOR_KEY) { - mWaitingForKey = WAITING_FOR_KEY_DISPATCHED; - DispatchAsyncEvent(NS_LITERAL_STRING("waitingforkey")); - } - // 5. Set the readyState of media element to HAVE_METADATA. - // NOTE: We'll change to HAVE_CURRENT_DATA or HAVE_METADATA - // depending on whether we've loaded the first frame or not - // below. - // 6. Suspend playback. - // Note: Playback will already be stalled, as the next frame is - // unavailable. - } else if (mDecoder) { - nextFrameStatus = mDecoder->NextFrameBufferedStatus(); - } + if (nextFrameStatus == NEXT_FRAME_UNAVAILABLE || nextFrameStatus == NEXT_FRAME_UNAVAILABLE_BUFFERING) { + nextFrameStatus = mDecoder->NextFrameBufferedStatus(); } if (nextFrameStatus == MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_SEEKING) { @@ -4914,7 +4891,7 @@ HTMLMediaElement::UpdateReadyStateInternal() // autoplay elements for live streams will never play. Otherwise we // move to HAVE_ENOUGH_DATA if we can play through the entire media // without stopping to buffer. - if (mWaitingForKey == NOT_WAITING_FOR_KEY && mDecoder->CanPlayThrough()) { + if (mDecoder->CanPlayThrough()) { LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() " "Decoder can play through", this)); ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA); @@ -4979,7 +4956,6 @@ void HTMLMediaElement::ChangeReadyState(nsMediaReadyState aState) mReadyState >= nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA) { DispatchAsyncEvent(NS_LITERAL_STRING("canplay")); if (!mPaused) { - mWaitingForKey = NOT_WAITING_FOR_KEY; NotifyAboutPlaying(); } } diff --git a/dom/html/HTMLMediaElement.h b/dom/html/HTMLMediaElement.h index 23799b574..08665c674 100644 --- a/dom/html/HTMLMediaElement.h +++ b/dom/html/HTMLMediaElement.h @@ -613,8 +613,6 @@ public: // XPCOM MozPreservesPitch() is OK - void CannotDecryptWaitingForKey(); - bool MozAutoplayEnabled() const { return mAutoplayEnabled; @@ -1586,20 +1584,6 @@ protected: // True if the media has encryption information. bool mIsEncrypted; - enum WaitingForKeyState { - NOT_WAITING_FOR_KEY = 0, - WAITING_FOR_KEY = 1, - WAITING_FOR_KEY_DISPATCHED = 2 - }; - - // True when the CDM cannot decrypt the current block due to lacking a key. - // Note: the "waitingforkey" event is not dispatched until all decoded data - // has been rendered. - WaitingForKeyState mWaitingForKey; - - // Listens for waitingForKey events from the owned decoder. - MediaEventListener mWaitingForKeyListener; - // True if the media's channel's download has been suspended. Watchable<bool> mDownloadSuspendedByCache; diff --git a/dom/media/AbstractMediaDecoder.h b/dom/media/AbstractMediaDecoder.h index c38de81af..3b7ad0ca0 100644 --- a/dom/media/AbstractMediaDecoder.h +++ b/dom/media/AbstractMediaDecoder.h @@ -78,18 +78,6 @@ public: return nullptr; } - // Notify the media decoder that a decryption key is required before emitting - // further output. This only needs to be overridden for decoders that expect - // encryption, such as the MediaSource decoder. - virtual void NotifyWaitingForKey() {} - - // Return an event that will be notified when a decoder is waiting for a - // decryption key before it can return more output. - virtual MediaEventSource<void>* WaitingForKeyEvent() - { - return nullptr; - } - protected: virtual void UpdateEstimatedMediaDuration(int64_t aDuration) {}; public: diff --git a/dom/media/MediaFormatReader.cpp b/dom/media/MediaFormatReader.cpp index b9289e82a..8e872dd04 100644 --- a/dom/media/MediaFormatReader.cpp +++ b/dom/media/MediaFormatReader.cpp @@ -974,21 +974,6 @@ MediaFormatReader::NotifyWaitingForData(TrackType aTrack) } void -MediaFormatReader::NotifyWaitingForKey(TrackType aTrack) -{ - MOZ_ASSERT(OnTaskQueue()); - auto& decoder = GetDecoderData(aTrack); - if (mDecoder) { - mDecoder->NotifyWaitingForKey(); - } - if (!decoder.mDecodePending) { - LOGV("WaitingForKey received while no pending decode. Ignoring"); - } - decoder.mWaitingForKey = true; - ScheduleUpdate(aTrack); -} - -void MediaFormatReader::NotifyEndOfStream(TrackType aTrack) { MOZ_ASSERT(OnTaskQueue()); @@ -1485,10 +1470,6 @@ MediaFormatReader::Update(TrackType aTrack) // EOS state. We can immediately reject the data promise. LOG("Rejecting %s promise: EOS", TrackTypeToStr(aTrack)); decoder.RejectPromise(NS_ERROR_DOM_MEDIA_END_OF_STREAM, __func__); - } else if (decoder.mWaitingForKey) { - LOG("Rejecting %s promise: WAITING_FOR_DATA due to waiting for key", - TrackTypeToStr(aTrack)); - decoder.RejectPromise(NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA, __func__); } } @@ -1522,30 +1503,20 @@ MediaFormatReader::Update(TrackType aTrack) bool needInput = NeedInput(decoder); - LOGV("Update(%s) ni=%d no=%d ie=%d, in:%llu out:%llu qs=%u pending:%u waiting:%d promise:%d wfk:%d sid:%u", + LOGV("Update(%s) ni=%d no=%d ie=%d, in:%llu out:%llu qs=%u pending:%u waiting:%d promise:%d sid:%u", TrackTypeToStr(aTrack), needInput, needOutput, decoder.mDecodePending, decoder.mNumSamplesInput, decoder.mNumSamplesOutput, uint32_t(size_t(decoder.mSizeOfQueue)), uint32_t(decoder.mOutput.Length()), - decoder.mWaitingForData, decoder.HasPromise(), - decoder.mWaitingForKey, decoder.mLastStreamSourceID); + decoder.mWaitingForData, decoder.HasPromise(), decoder.mLastStreamSourceID); if ((decoder.mWaitingForData && (!decoder.mTimeThreshold || decoder.mTimeThreshold.ref().mWaiting)) || - (decoder.mWaitingForKey && decoder.mDecodePending)) { + decoder.mDecodePending) { // Nothing more we can do at present. - LOGV("Still waiting for data or key."); + LOGV("Still waiting for data."); return; } - if (decoder.mWaitingForKey) { - decoder.mWaitingForKey = false; - if (decoder.HasWaitingPromise() && !decoder.IsWaiting()) { - LOGV("No longer waiting for key. Resolving waiting promise"); - decoder.mWaitingPromise.Resolve(decoder.mType, __func__); - return; - } - } - if (!needInput) { LOGV("No need for additional input (pending:%u)", uint32_t(decoder.mOutput.Length())); @@ -1721,15 +1692,6 @@ MediaFormatReader::Error(TrackType aTrack, const MediaResult& aError) } void -MediaFormatReader::WaitingForKey(TrackType aTrack) -{ - RefPtr<nsIRunnable> task = - NewRunnableMethod<TrackType>( - this, &MediaFormatReader::NotifyWaitingForKey, aTrack); - OwnerThread()->Dispatch(task.forget()); -} - -void MediaFormatReader::Reset(TrackType aTrack) { MOZ_ASSERT(OnTaskQueue()); @@ -2254,7 +2216,7 @@ MediaFormatReader::GetMozDebugReaderData(nsAString& aString) result += nsPrintfCString("audio frames decoded: %lld\n", mAudio.mNumSamplesOutputTotal); if (HasAudio()) { - result += nsPrintfCString("audio state: ni=%d no=%d ie=%d demuxr:%d demuxq:%d tt:%f tths:%d in:%llu out:%llu qs=%u pending:%u waiting:%d wfk:%d sid:%u\n", + result += nsPrintfCString("audio state: ni=%d no=%d ie=%d demuxr:%d demuxq:%d tt:%f tths:%d in:%llu out:%llu qs=%u pending:%u waiting:%d sid:%u\n", NeedInput(mAudio), mAudio.HasPromise(), mAudio.mDecodePending, mAudio.mDemuxRequest.Exists(), @@ -2268,7 +2230,7 @@ MediaFormatReader::GetMozDebugReaderData(nsAString& aString) mAudio.mNumSamplesInput, mAudio.mNumSamplesOutput, unsigned(size_t(mAudio.mSizeOfQueue)), unsigned(mAudio.mOutput.Length()), - mAudio.mWaitingForData, mAudio.mWaitingForKey, + mAudio.mWaitingForData, mAudio.mLastStreamSourceID); } result += nsPrintfCString("video decoder: %s\n", videoName); @@ -2278,7 +2240,7 @@ MediaFormatReader::GetMozDebugReaderData(nsAString& aString) mVideo.mNumSamplesOutputTotal, mVideo.mNumSamplesSkippedTotal); if (HasVideo()) { - result += nsPrintfCString("video state: ni=%d no=%d ie=%d demuxr:%d demuxq:%d tt:%f tths:%d in:%llu out:%llu qs=%u pending:%u waiting:%d wfk:%d, sid:%u\n", + result += nsPrintfCString("video state: ni=%d no=%d ie=%d demuxr:%d demuxq:%d tt:%f tths:%d in:%llu out:%llu qs=%u pending:%u waiting:%d sid:%u\n", NeedInput(mVideo), mVideo.HasPromise(), mVideo.mDecodePending, mVideo.mDemuxRequest.Exists(), @@ -2292,7 +2254,7 @@ MediaFormatReader::GetMozDebugReaderData(nsAString& aString) mVideo.mNumSamplesInput, mVideo.mNumSamplesOutput, unsigned(size_t(mVideo.mSizeOfQueue)), unsigned(mVideo.mOutput.Length()), - mVideo.mWaitingForData, mVideo.mWaitingForKey, + mVideo.mWaitingForData, mVideo.mLastStreamSourceID); } aString += NS_ConvertUTF8toUTF16(result); diff --git a/dom/media/MediaFormatReader.h b/dom/media/MediaFormatReader.h index 6e83c9e70..fe3c3798d 100644 --- a/dom/media/MediaFormatReader.h +++ b/dom/media/MediaFormatReader.h @@ -158,7 +158,6 @@ private: void NotifyDrainComplete(TrackType aTrack); void NotifyError(TrackType aTrack, const MediaResult& aError); void NotifyWaitingForData(TrackType aTrack); - void NotifyWaitingForKey(TrackType aTrack); void NotifyEndOfStream(TrackType aTrack); void ExtractCryptoInitData(nsTArray<uint8_t>& aInitData); @@ -174,7 +173,6 @@ private: void Reset(TrackType aTrack); void DrainComplete(TrackType aTrack); void DropDecodedSamples(TrackType aTrack); - void WaitingForKey(TrackType aTrack); bool ShouldSkip(bool aSkipToNextKeyframe, media::TimeUnit aTimeThreshold); @@ -209,9 +207,6 @@ private: bool OnReaderTaskQueue() override { return mReader->OnTaskQueue(); } - void WaitingForKey() override { - mReader->WaitingForKey(mType); - } private: MediaFormatReader* mReader; @@ -229,7 +224,6 @@ private: , mUpdateScheduled(false) , mDemuxEOS(false) , mWaitingForData(false) - , mWaitingForKey(false) , mReceivedNewData(false) , mOutputRequested(false) , mDecodePending(false) @@ -277,7 +271,6 @@ private: bool mUpdateScheduled; bool mDemuxEOS; bool mWaitingForData; - bool mWaitingForKey; bool mReceivedNewData; // Pending seek. @@ -297,7 +290,7 @@ private: bool IsWaiting() const { MOZ_ASSERT(mOwner->OnTaskQueue()); - return mWaitingForData || mWaitingForKey; + return mWaitingForData; } // MediaDataDecoder handler's variables. @@ -400,7 +393,6 @@ private: MOZ_ASSERT(mOwner->OnTaskQueue()); mDemuxEOS = false; mWaitingForData = false; - mWaitingForKey = false; mQueuedSamples.Clear(); mOutputRequested = false; mNeedDraining = false; diff --git a/dom/media/mediasource/MediaSourceDecoder.cpp b/dom/media/mediasource/MediaSourceDecoder.cpp index 6507b320a..c5b25d6a2 100644 --- a/dom/media/mediasource/MediaSourceDecoder.cpp +++ b/dom/media/mediasource/MediaSourceDecoder.cpp @@ -325,18 +325,6 @@ MediaSourceDecoder::CanPlayThrough() return buffered.ContainsStrict(ClampIntervalToEnd(interval)); } -void -MediaSourceDecoder::NotifyWaitingForKey() -{ - mWaitingForKeyEvent.Notify(); -} - -MediaEventSource<void>* -MediaSourceDecoder::WaitingForKeyEvent() -{ - return &mWaitingForKeyEvent; -} - TimeInterval MediaSourceDecoder::ClampIntervalToEnd(const TimeInterval& aInterval) { diff --git a/dom/media/mediasource/MediaSourceDecoder.h b/dom/media/mediasource/MediaSourceDecoder.h index f4d84bc40..6c028f367 100644 --- a/dom/media/mediasource/MediaSourceDecoder.h +++ b/dom/media/mediasource/MediaSourceDecoder.h @@ -71,10 +71,6 @@ public: MediaDecoderOwner::NextFrameStatus NextFrameBufferedStatus() override; bool CanPlayThrough() override; - void NotifyWaitingForKey() override; - - MediaEventSource<void>* WaitingForKeyEvent() override; - private: void DoSetMediaSourceDuration(double aDuration); media::TimeInterval ClampIntervalToEnd(const media::TimeInterval& aInterval); @@ -85,7 +81,6 @@ private: dom::MediaSource* mMediaSource; RefPtr<MediaSourceDemuxer> mDemuxer; RefPtr<MediaFormatReader> mReader; - MediaEventProducer<void> mWaitingForKeyEvent; bool mEnded; }; diff --git a/dom/media/platforms/PlatformDecoderModule.h b/dom/media/platforms/PlatformDecoderModule.h index 62855335f..a81e7f864 100644 --- a/dom/media/platforms/PlatformDecoderModule.h +++ b/dom/media/platforms/PlatformDecoderModule.h @@ -207,12 +207,6 @@ public: virtual void ReleaseMediaResources() {} virtual bool OnReaderTaskQueue() = 0; - - // Denotes that a pending encryption key is preventing more input being fed - // into the decoder. This only needs to be overridden for callbacks that - // handle encryption. E.g. benchmarking does not use eme, so this need - // not be overridden in that case. - virtual void WaitingForKey() {} }; // MediaDataDecoder is the interface exposed by decoders created by the diff --git a/dom/media/platforms/agnostic/gmp/MediaDataDecoderProxy.h b/dom/media/platforms/agnostic/gmp/MediaDataDecoderProxy.h index 735b6126e..1e108994d 100644 --- a/dom/media/platforms/agnostic/gmp/MediaDataDecoderProxy.h +++ b/dom/media/platforms/agnostic/gmp/MediaDataDecoderProxy.h @@ -95,11 +95,6 @@ public: return mProxyCallback->OnReaderTaskQueue(); } - void WaitingForKey() override - { - mProxyCallback->WaitingForKey(); - } - private: MediaDataDecoderProxy* mProxyDecoder; MediaDataDecoderCallback* mProxyCallback; |