author | Jean-Yves Avenard <jyavenard@mozilla.com> |
Thu, 27 Apr 2017 19:53:53 +0200 | |
changeset 357205 | 23327af4c4c70b3d096029721414b2ba7ad9a0c7 |
parent 357204 | f0e461394f7e1ebce5c902fe42ef1e7269c64b76 |
child 357206 | 59427954226419a1cc7de7a0b0ed1babd7372aaf |
push id | 31788 |
push user | kwierso@gmail.com |
push date | Tue, 09 May 2017 20:48:49 +0000 |
treeherder | mozilla-central@2b6f6881a24a [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | gerald |
bugs | 1357040 |
milestone | 55.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/media/mediasource/MediaSourceDecoder.cpp +++ b/dom/media/mediasource/MediaSourceDecoder.cpp @@ -348,12 +348,22 @@ MediaSourceDecoder::ClampIntervalToEnd(c if (duration < aInterval.mStart) { return aInterval; } return TimeInterval(aInterval.mStart, std::min(aInterval.mEnd, duration), aInterval.mFuzz); } +void +MediaSourceDecoder::NotifyInitDataArrived() +{ + MOZ_ASSERT(NS_IsMainThread()); + + if (mDemuxer) { + mDemuxer->NotifyInitDataArrived(); + } +} + #undef MSE_DEBUG #undef MSE_DEBUGV } // namespace mozilla
--- a/dom/media/mediasource/MediaSourceDecoder.h +++ b/dom/media/mediasource/MediaSourceDecoder.h @@ -73,16 +73,18 @@ public: bool CanPlayThrough() override; void NotifyWaitingForKey() override; MediaEventSource<void>* WaitingForKeyEvent() override; bool IsMSE() const override { return true; } + void NotifyInitDataArrived(); + private: void DoSetMediaSourceDuration(double aDuration); media::TimeInterval ClampIntervalToEnd(const media::TimeInterval& aInterval); // The owning MediaSource holds a strong reference to this decoder, and // calls Attach/DetachMediaSource on this decoder to set and clear // mMediaSource. dom::MediaSource* mMediaSource;
--- a/dom/media/mediasource/MediaSourceDemuxer.cpp +++ b/dom/media/mediasource/MediaSourceDemuxer.cpp @@ -61,28 +61,27 @@ MediaSourceDemuxer::AddSizeOfResources( for (TrackBuffersManager* manager : self->mSourceBuffers) { manager->AddSizeOfResources(sizes); } }); GetTaskQueue()->Dispatch(task.forget()); } -void MediaSourceDemuxer::NotifyDataArrived() +void MediaSourceDemuxer::NotifyInitDataArrived() { RefPtr<MediaSourceDemuxer> self = this; - nsCOMPtr<nsIRunnable> task = - NS_NewRunnableFunction([self] () { - if (self->mInitPromise.IsEmpty()) { - return; - } - if (self->ScanSourceBuffersForContent()) { - self->mInitPromise.ResolveIfExists(NS_OK, __func__); - } - }); + nsCOMPtr<nsIRunnable> task = NS_NewRunnableFunction([self]() { + if (self->mInitPromise.IsEmpty()) { + return; + } + if (self->ScanSourceBuffersForContent()) { + self->mInitPromise.ResolveIfExists(NS_OK, __func__); + } + }); GetTaskQueue()->Dispatch(task.forget()); } bool MediaSourceDemuxer::ScanSourceBuffersForContent() { MOZ_ASSERT(OnTaskQueue());
--- a/dom/media/mediasource/MediaSourceDemuxer.h +++ b/dom/media/mediasource/MediaSourceDemuxer.h @@ -39,22 +39,21 @@ public: GetTrackDemuxer(TrackInfo::TrackType aType, uint32_t aTrackNumber) override; bool IsSeekable() const override; UniquePtr<EncryptionInfo> GetCrypto() override; bool ShouldComputeStartTime() const override { return false; } - void NotifyDataArrived() override; - /* interface for TrackBuffersManager */ void AttachSourceBuffer(TrackBuffersManager* aSourceBuffer); void DetachSourceBuffer(TrackBuffersManager* aSourceBuffer); AutoTaskQueue* GetTaskQueue() { return mTaskQueue; } + void NotifyInitDataArrived(); // Returns a string describing the state of the MediaSource internal // buffered data. Used for debugging purposes. void GetMozDebugReaderData(nsACString& aString); void AddSizeOfResources(MediaSourceDecoder::ResourceSizes* aSizes); // Gap allowed between frames.
--- a/dom/media/mediasource/SourceBuffer.cpp +++ b/dom/media/mediasource/SourceBuffer.cpp @@ -429,16 +429,17 @@ SourceBuffer::AppendDataCompletedWithSuc { MOZ_ASSERT(mUpdating); mPendingAppend.Complete(); if (aResult.first()) { if (!mActive) { mActive = true; mMediaSource->SourceBufferIsActive(this); + mMediaSource->GetDecoder()->NotifyInitDataArrived(); } } if (mActive) { // Tell our parent decoder that we have received new data. mMediaSource->GetDecoder()->NotifyDataArrived(); // Send progress event. mMediaSource->GetDecoder()->NotifyBytesDownloaded(); }