Bug 1367701 P2 - transit to NextFrameSeekingState in Transit(); r?jwwang
MozReview-Commit-ID: FdPHn6uGubq
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1731,42 +1731,37 @@ public:
}
RefPtr<MediaDecoder::SeekPromise> Enter(SeekJob&& aCurrentSeekJob,
SeekJob&& aFutureSeekJob)
{
mFutureSeekJob = Move(aFutureSeekJob);
AccurateSeekingState::Enter(Move(aCurrentSeekJob),
- EventVisibility::Suppressed)
- ->Then(OwnerThread(),
- __func__,
- [this]() {
- mAccurateSeekRequest.Complete();
- SetState<NextFrameSeekingState>(Move(mFutureSeekJob),
- EventVisibility::Observable);
- },
- [this]() { mAccurateSeekRequest.Complete(); })
- ->Track(mAccurateSeekRequest);
+ EventVisibility::Suppressed);
+
return mFutureSeekJob.mPromise.Ensure(__func__);
}
void Exit() override
{
- mAccurateSeekRequest.DisconnectIfExists();
mFutureSeekJob.RejectIfExists(__func__);
AccurateSeekingState::Exit();
}
private:
- MozPromiseRequestHolder<MediaDecoder::SeekPromise> mAccurateSeekRequest;
SeekJob mFutureSeekJob;
- // We don't want to transition to DecodingState once this seek completes.
- void GoToNextState() override { // No transition after seek completed. }
+ // We don't want to transition to DecodingState once this seek completes,
+ // instead, we transition to NextFrameSeekingState.
+ void GoToNextState() override
+ {
+ SetState<NextFrameSeekingState>(Move(mFutureSeekJob),
+ EventVisibility::Observable);
+ }
};
RefPtr<MediaDecoder::SeekPromise>
MediaDecoderStateMachine::DormantState::HandleSeek(SeekTarget aTarget)
{
if (aTarget.IsNextFrame()) {
// NextFrameSeekingState doesn't reset the decoder unlike
// AccurateSeekingState. So we first must come out of dormant by seeking to