gecko-dev/dom/media/SeekJob.cpp
Dan Glastonbury 526fdd85f6 Bug 1224973 - Part 5: Implement suspend decoding for background video. r=cpearce,jwwang,jya
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
2016-05-12 09:54:15 +10:00

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