diff --git a/content/media/mediasource/SourceBuffer.cpp b/content/media/mediasource/SourceBuffer.cpp index c854dd855c04..c474f46234bb 100644 --- a/content/media/mediasource/SourceBuffer.cpp +++ b/content/media/mediasource/SourceBuffer.cpp @@ -490,6 +490,15 @@ SourceBuffer::Evict(double aStart, double aEnd) } } +bool +SourceBuffer::ContainsTime(double aTime) +{ + double start = 0.0; + double end = 0.0; + GetBufferedStartEndTime(&start, &end); + return aTime >= start && aTime <= end; +} + NS_IMPL_CYCLE_COLLECTION_INHERITED_1(SourceBuffer, DOMEventTargetHelper, mMediaSource) diff --git a/content/media/mediasource/SourceBuffer.h b/content/media/mediasource/SourceBuffer.h index 94262a276a24..1c10312ec1a4 100644 --- a/content/media/mediasource/SourceBuffer.h +++ b/content/media/mediasource/SourceBuffer.h @@ -109,6 +109,9 @@ public: // Evict data in the source buffer in the given time range. void Evict(double aStart, double aEnd); + // Returns true if the data in the source buffer contains the given time. + bool ContainsTime(double aTime); + private: SourceBuffer(MediaSource* aMediaSource, const nsACString& aType); diff --git a/content/media/mediasource/SourceBufferList.cpp b/content/media/mediasource/SourceBufferList.cpp index f3c813d67057..bede8edde48d 100644 --- a/content/media/mediasource/SourceBufferList.cpp +++ b/content/media/mediasource/SourceBufferList.cpp @@ -111,6 +111,17 @@ SourceBufferList::Evict(double aStart, double aEnd) } } +bool +SourceBufferList::ContainsTime(double aTime) +{ + for (uint32_t i = 0; i < mSourceBuffers.Length(); ++i) { + if (!mSourceBuffers[i]->ContainsTime(aTime)) { + return false; + } + } + return true; +} + void SourceBufferList::Ended() { diff --git a/content/media/mediasource/SourceBufferList.h b/content/media/mediasource/SourceBufferList.h index 02ffaf80f485..d64bfaf1853d 100644 --- a/content/media/mediasource/SourceBufferList.h +++ b/content/media/mediasource/SourceBufferList.h @@ -77,6 +77,9 @@ public: // Evicts data for the given time range from each SourceBuffer in the list. void Evict(double aStart, double aEnd); + // Returns true if all SourceBuffers in the list contain data for the given time. + bool ContainsTime(double aTime); + private: friend class AsyncEventRunner; void DispatchSimpleEvent(const char* aName);