diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 02:29:21 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 02:29:21 +0000 |
commit | f34df9db04b7adaff418b61c35fb1346c1c2fccd (patch) | |
tree | ca9b0e61a1c03f0246b0371423bbbe570193e2f1 /dom/media/platforms | |
parent | Adding upstream version 115.8.0esr. (diff) | |
download | firefox-esr-f34df9db04b7adaff418b61c35fb1346c1c2fccd.tar.xz firefox-esr-f34df9db04b7adaff418b61c35fb1346c1c2fccd.zip |
Adding upstream version 115.9.0esr.upstream/115.9.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/platforms')
-rw-r--r-- | dom/media/platforms/wrappers/MediaChangeMonitor.cpp | 27 | ||||
-rw-r--r-- | dom/media/platforms/wrappers/MediaChangeMonitor.h | 2 |
2 files changed, 24 insertions, 5 deletions
diff --git a/dom/media/platforms/wrappers/MediaChangeMonitor.cpp b/dom/media/platforms/wrappers/MediaChangeMonitor.cpp index 17387204ed..544abea161 100644 --- a/dom/media/platforms/wrappers/MediaChangeMonitor.cpp +++ b/dom/media/platforms/wrappers/MediaChangeMonitor.cpp @@ -519,6 +519,10 @@ RefPtr<MediaDataDecoder::InitPromise> MediaChangeMonitor::Init() { mDecoderInitialized = true; mConversionRequired = Some(mDecoder->NeedsConversion()); mCanRecycleDecoder = Some(CanRecycleDecoder()); + if (mPendingSeekThreshold) { + mDecoder->SetSeekThreshold(*mPendingSeekThreshold); + mPendingSeekThreshold.reset(); + } } return mInitPromise.ResolveOrRejectIfExists(std::move(aValue), __func__); @@ -686,11 +690,19 @@ bool MediaChangeMonitor::IsHardwareAccelerated( } void MediaChangeMonitor::SetSeekThreshold(const media::TimeUnit& aTime) { - if (mDecoder) { - mDecoder->SetSeekThreshold(aTime); - } else { - MediaDataDecoder::SetSeekThreshold(aTime); - } + GetCurrentSerialEventTarget()->Dispatch(NS_NewRunnableFunction( + "MediaChangeMonitor::SetSeekThreshold", + [self = RefPtr<MediaChangeMonitor>(this), time = aTime, this] { + // During the shutdown. + if (mShutdownPromise) { + return; + } + if (mDecoder && mDecoderInitialized) { + mDecoder->SetSeekThreshold(time); + } else { + mPendingSeekThreshold = Some(time); + } + })); } RefPtr<MediaChangeMonitor::CreateDecoderPromise> @@ -744,6 +756,11 @@ MediaResult MediaChangeMonitor::CreateDecoderAndInit(MediaRawData* aSample) { mConversionRequired = Some(mDecoder->NeedsConversion()); mCanRecycleDecoder = Some(CanRecycleDecoder()); + if (mPendingSeekThreshold) { + mDecoder->SetSeekThreshold(*mPendingSeekThreshold); + mPendingSeekThreshold.reset(); + } + if (!mFlushPromise.IsEmpty()) { // A Flush is pending, abort the current operation. mFlushPromise.Resolve(true, __func__); diff --git a/dom/media/platforms/wrappers/MediaChangeMonitor.h b/dom/media/platforms/wrappers/MediaChangeMonitor.h index a85c23fcb2..843dd9035b 100644 --- a/dom/media/platforms/wrappers/MediaChangeMonitor.h +++ b/dom/media/platforms/wrappers/MediaChangeMonitor.h @@ -135,6 +135,8 @@ class MediaChangeMonitor final Maybe<MediaDataDecoder::ConversionRequired> mConversionRequired; bool mDecoderInitialized = false; const CreateDecoderParamsForAsync mParams; + // Keep any seek threshold set for after decoder creation and initialization. + Maybe<media::TimeUnit> mPendingSeekThreshold; }; } // namespace mozilla |