mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 09:05:45 +00:00
526fdd85f6
Implemented by short-circuiting calls to RequestVideoData in MDSM so no frames are decoded. Resuming playback when video moves to foreground by using the SeekTask/SeekJob/Seek in MDSM with result of GetMediaTime(). Special consideration is made to only seek the video part of Seek() to remove an audible glitch in the audio playback when the video becomes visible again. MozReview-Commit-ID: 7YFDTanslXu
56 lines
1.3 KiB
C++
56 lines
1.3 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "SeekJob.h"
|
|
|
|
namespace mozilla {
|
|
|
|
SeekJob::SeekJob()
|
|
{
|
|
}
|
|
|
|
SeekJob::SeekJob(SeekJob&& aOther) : mTarget(aOther.mTarget)
|
|
{
|
|
aOther.mTarget.Reset();
|
|
mPromise = Move(aOther.mPromise);
|
|
}
|
|
|
|
SeekJob::~SeekJob()
|
|
{
|
|
MOZ_DIAGNOSTIC_ASSERT(!mTarget.IsValid());
|
|
MOZ_DIAGNOSTIC_ASSERT(mPromise.IsEmpty());
|
|
}
|
|
|
|
SeekJob& SeekJob::operator=(SeekJob&& aOther)
|
|
{
|
|
MOZ_DIAGNOSTIC_ASSERT(!Exists());
|
|
mTarget = aOther.mTarget;
|
|
aOther.mTarget.Reset();
|
|
mPromise = Move(aOther.mPromise);
|
|
return *this;
|
|
}
|
|
|
|
bool SeekJob::Exists() const
|
|
{
|
|
MOZ_ASSERT(mTarget.IsValid() == !mPromise.IsEmpty());
|
|
return mTarget.IsValid();
|
|
}
|
|
|
|
void SeekJob::Resolve(bool aAtEnd, const char* aCallSite)
|
|
{
|
|
MediaDecoder::SeekResolveValue val(aAtEnd, mTarget.mEventVisibility);
|
|
mPromise.Resolve(val, aCallSite);
|
|
mTarget.Reset();
|
|
}
|
|
|
|
void SeekJob::RejectIfExists(const char* aCallSite)
|
|
{
|
|
mTarget.Reset();
|
|
mPromise.RejectIfExists(true, aCallSite);
|
|
}
|
|
|
|
} // namespace mozilla
|