From a22aa76f5d717fb2e3e9d0acc5679f9dd74b2964 Mon Sep 17 00:00:00 2001 From: cajbir Date: Wed, 23 Apr 2014 19:45:00 +1200 Subject: [PATCH] Bug 1000608 - Allow querying source buffers to see if they contain data for a given time - r=kinetik --- content/media/mediasource/SourceBuffer.cpp | 9 +++++++++ content/media/mediasource/SourceBuffer.h | 3 +++ content/media/mediasource/SourceBufferList.cpp | 11 +++++++++++ content/media/mediasource/SourceBufferList.h | 3 +++ 4 files changed, 26 insertions(+) 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);