Bug 1313497 - Use InvokeAsync with lambda to replace MediaSourceDemuxer::AttemptInit - r?jya
MozReview-Commit-ID: 5qsQ2zQAMV3
--- a/dom/media/mediasource/MediaSourceDemuxer.cpp
+++ b/dom/media/mediasource/MediaSourceDemuxer.cpp
@@ -30,32 +30,27 @@ MediaSourceDemuxer::MediaSourceDemuxer()
// Due to inaccuracies in determining buffer end
// frames (Bug 1065207). This value is based on videos seen in the wild.
const TimeUnit MediaSourceDemuxer::EOS_FUZZ = media::TimeUnit::FromMicroseconds(500000);
RefPtr<MediaSourceDemuxer::InitPromise>
MediaSourceDemuxer::Init()
{
- return InvokeAsync(GetTaskQueue(), this, __func__,
- &MediaSourceDemuxer::AttemptInit);
-}
+ RefPtr<MediaSourceDemuxer> self = this;
+ return InvokeAsync(GetTaskQueue(), __func__,
+ [self](){
+ if (self->ScanSourceBuffersForContent()) {
+ return InitPromise::CreateAndResolve(NS_OK, __func__);
+ }
-RefPtr<MediaSourceDemuxer::InitPromise>
-MediaSourceDemuxer::AttemptInit()
-{
- MOZ_ASSERT(OnTaskQueue());
+ RefPtr<InitPromise> p = self->mInitPromise.Ensure(__func__);
- if (ScanSourceBuffersForContent()) {
- return InitPromise::CreateAndResolve(NS_OK, __func__);
- }
-
- RefPtr<InitPromise> p = mInitPromise.Ensure(__func__);
-
- return p;
+ return p;
+ });
}
void
MediaSourceDemuxer::AddSizeOfResources(MediaSourceDecoder::ResourceSizes* aSizes)
{
MOZ_ASSERT(NS_IsMainThread());
// NB: The track buffers must only be accessed on the TaskQueue.
--- a/dom/media/mediasource/MediaSourceDemuxer.h
+++ b/dom/media/mediasource/MediaSourceDemuxer.h
@@ -59,17 +59,16 @@ public:
// Gap allowed between frames.
static const media::TimeUnit EOS_FUZZ;
private:
~MediaSourceDemuxer();
friend class MediaSourceTrackDemuxer;
// Scan source buffers and update information.
bool ScanSourceBuffersForContent();
- RefPtr<InitPromise> AttemptInit();
TrackBuffersManager* GetManager(TrackInfo::TrackType aType);
TrackInfo* GetTrackInfo(TrackInfo::TrackType);
void DoAttachSourceBuffer(TrackBuffersManager* aSourceBuffer);
void DoDetachSourceBuffer(TrackBuffersManager* aSourceBuffer);
bool OnTaskQueue()
{
return !GetTaskQueue() || GetTaskQueue()->IsCurrentThreadIn();
}