Bug 1328836 - Remove MDSM::DispatchMinimizePrerollUntilPlaybackStarts.
MozReview-Commit-ID: 1EGHVhZqUTA
--- a/dom/media/MediaDecoder.cpp
+++ b/dom/media/MediaDecoder.cpp
@@ -628,19 +628,16 @@ MediaDecoder::InitializeStateMachine()
return NS_OK;
}
void
MediaDecoder::SetStateMachineParameters()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mMinimizePreroll) {
- mDecoderStateMachine->DispatchMinimizePrerollUntilPlaybackStarts();
- }
if (mPlaybackRate != 1 && mPlaybackRate != 0) {
mDecoderStateMachine->DispatchSetPlaybackRate(mPlaybackRate);
}
mTimedMetadataListener = mDecoderStateMachine->TimedMetadataEvent().Connect(
AbstractThread::MainThread(), this, &MediaDecoder::OnMetadataUpdate);
mMetadataLoadedListener = mDecoderStateMachine->MetadataLoadedEvent().Connect(
AbstractThread::MainThread(), this, &MediaDecoder::MetadataLoaded);
mFirstFrameLoadedListener = mDecoderStateMachine->FirstFrameLoadedEvent().Connect(
--- a/dom/media/MediaDecoder.h
+++ b/dom/media/MediaDecoder.h
@@ -187,16 +187,18 @@ public:
virtual void SetPlaybackRate(double aPlaybackRate);
void SetPreservesPitch(bool aPreservesPitch);
// Directs the decoder to not preroll extra samples until the media is
// played. This reduces the memory overhead of media elements that may
// not be played. Note that seeking also doesn't cause us start prerolling.
void SetMinimizePrerollUntilPlaybackStarts();
+ bool GetMinimizePreroll() const { return mMinimizePreroll; }
+
// All MediaStream-related data is protected by mReentrantMonitor.
// We have at most one DecodedStreamData per MediaDecoder. Its stream
// is used as the input for each ProcessedMediaStream created by calls to
// captureStream(UntilEnded). Seeking creates a new source stream, as does
// replaying after the input as ended. In the latter case, the new source is
// not connected to streams created by captureStreamUntilEnded.
// Add an output stream. All decoder output will be sent to the stream.
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -2354,17 +2354,17 @@ MediaDecoderStateMachine::MediaDecoderSt
mFragmentEndTime(-1),
mReader(new MediaDecoderReaderWrapper(mTaskQueue, aReader)),
mDecodedAudioEndTime(0),
mDecodedVideoEndTime(0),
mPlaybackRate(1.0),
mLowAudioThresholdUsecs(detail::LOW_AUDIO_USECS),
mAmpleAudioThresholdUsecs(detail::AMPLE_AUDIO_USECS),
mAudioCaptured(false),
- mMinimizePreroll(false),
+ mMinimizePreroll(aDecoder->GetMinimizePreroll()),
mSentLoadedMetadataEvent(false),
mSentFirstFrameLoadedEvent(false),
mVideoDecodeSuspended(false),
mVideoDecodeSuspendTimer(mTaskQueue),
mOutputStreamManager(new OutputStreamManager()),
mResource(aDecoder->GetResource()),
INIT_MIRROR(mBuffered, TimeIntervals()),
INIT_MIRROR(mEstimatedDuration, NullableTimeUnit()),
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -173,36 +173,16 @@ public:
void DispatchSetPlaybackRate(double aPlaybackRate)
{
OwnerThread()->DispatchStateChange(NewRunnableMethod<double>(
this, &MediaDecoderStateMachine::SetPlaybackRate, aPlaybackRate));
}
RefPtr<ShutdownPromise> BeginShutdown();
- // Notifies the state machine that should minimize the number of samples
- // decoded we preroll, until playback starts. The first time playback starts
- // the state machine is free to return to prerolling normally. Note
- // "prerolling" in this context refers to when we decode and buffer decoded
- // samples in advance of when they're needed for playback.
- void DispatchMinimizePrerollUntilPlaybackStarts()
- {
- RefPtr<MediaDecoderStateMachine> self = this;
- nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction([self] () -> void
- {
- MOZ_ASSERT(self->OnTaskQueue());
- self->mMinimizePreroll = true;
-
- // Make sure that this arrives before playback starts, otherwise this won't
- // have the intended effect.
- MOZ_DIAGNOSTIC_ASSERT(self->mPlayState == MediaDecoder::PLAY_STATE_LOADING);
- });
- OwnerThread()->Dispatch(r.forget());
- }
-
// Set the media fragment end time. aEndTime is in microseconds.
void DispatchSetFragmentEndTime(int64_t aEndTime)
{
RefPtr<MediaDecoderStateMachine> self = this;
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction([self, aEndTime] () {
self->mFragmentEndTime = aEndTime;
});
OwnerThread()->Dispatch(r.forget());