From a90a5cba08fdf6c0ceb95101c275108a152a3aed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 07:35:37 +0200 Subject: Merging upstream version 127.0. Signed-off-by: Daniel Baumann --- dom/media/webcodecs/EncoderTemplate.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'dom/media/webcodecs/EncoderTemplate.h') diff --git a/dom/media/webcodecs/EncoderTemplate.h b/dom/media/webcodecs/EncoderTemplate.h index bc65edca46..ecadf68681 100644 --- a/dom/media/webcodecs/EncoderTemplate.h +++ b/dom/media/webcodecs/EncoderTemplate.h @@ -11,14 +11,15 @@ #include "EncoderAgent.h" #include "MediaData.h" +#include "SimpleMap.h" #include "WebCodecsUtils.h" #include "mozilla/DOMEventTargetHelper.h" #include "mozilla/MozPromise.h" #include "mozilla/RefPtr.h" #include "mozilla/Result.h" #include "mozilla/UniquePtr.h" -#include "mozilla/dom/VideoEncoderBinding.h" #include "mozilla/dom/AudioEncoderBinding.h" +#include "mozilla/dom/VideoEncoderBinding.h" #include "mozilla/dom/WorkerRef.h" #include "mozilla/media/MediaUtils.h" #include "nsStringFwd.h" @@ -116,12 +117,10 @@ class EncoderTemplate : public DOMEventTargetHelper { : public ControlMessage, public MessageRequestHolder { public: - FlushMessage(WebCodecsId aConfigureId, Promise* aPromise); + explicit FlushMessage(WebCodecsId aConfigureId); virtual void Cancel() override { Disconnect(); } virtual bool IsProcessing() override { return Exists(); }; virtual RefPtr AsFlushMessage() override { return this; } - already_AddRefed TakePromise() { return mPromise.forget(); } - void RejectPromiseIfAny(const nsresult& aReason); nsCString ToString() const override { nsCString rv; @@ -129,9 +128,6 @@ class EncoderTemplate : public DOMEventTargetHelper { this->mMessageId); return rv; } - - private: - RefPtr mPromise; }; protected: @@ -207,7 +203,7 @@ class EncoderTemplate : public DOMEventTargetHelper { const nsresult& aResult); void ProcessControlMessageQueue(); - void CancelPendingControlMessages(const nsresult& aResult); + void CancelPendingControlMessagesAndFlushPromises(const nsresult& aResult); template void QueueATask(const char* aName, Func&& aSteps); @@ -236,6 +232,11 @@ class EncoderTemplate : public DOMEventTargetHelper { std::queue> mControlMessageQueue; RefPtr mProcessingMessage; + // When a flush request is initiated, a promise is created and stored in + // mPendingFlushPromises until it is settled in the task delivering the flush + // result or Reset() is called before the promise is settled. + SimpleMap> mPendingFlushPromises; + uint32_t mEncodeQueueSize; bool mDequeueEventScheduled; -- cgit v1.2.3