diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-20 00:51:52 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-20 00:51:52 +0000 |
commit | c566cb79b77ee9dfe3f287fb930c2e9e419793d3 (patch) | |
tree | e5dc3c731b7d7ca2399d412bcf96825b4de67bcf /media/base/ranges.h | |
parent | 2767ca041af88d18e387d59c12a49fff10443ce8 (diff) | |
download | chromium_src-c566cb79b77ee9dfe3f287fb930c2e9e419793d3.zip chromium_src-c566cb79b77ee9dfe3f287fb930c2e9e419793d3.tar.gz chromium_src-c566cb79b77ee9dfe3f287fb930c2e9e419793d3.tar.bz2 |
Fix ChunkDemuxer so it properly outputs buffered ranges.
BUG=133042
TEST=None. Verified manually by a simple test page that appends some data
and then checks the buffered attribute. I will convert this to a
LayoutTest soon.
Review URL: https://chromiumcodereview.appspot.com/10558011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@143106 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/ranges.h')
-rw-r--r-- | media/base/ranges.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/media/base/ranges.h b/media/base/ranges.h index c412b25..1117ae5 100644 --- a/media/base/ranges.h +++ b/media/base/ranges.h @@ -5,6 +5,7 @@ #ifndef MEDIA_BASE_RANGES_H_ #define MEDIA_BASE_RANGES_H_ +#include <algorithm> #include <ostream> #include <vector> @@ -36,6 +37,9 @@ class Ranges { // Clear all ranges. void clear(); + // Computes the intersection between this range and |other|. + Ranges<T> IntersectionWith(const Ranges<T>& other); + private: // Disjoint, in increasing order of start. std::vector<std::pair<T, T> > ranges_; @@ -115,6 +119,30 @@ void Ranges<T>::clear() { ranges_.clear(); } +template<class T> +Ranges<T> Ranges<T>::IntersectionWith(const Ranges<T>& other) { + Ranges<T> result; + + size_t i = 0; + size_t j = 0; + + while (i < size() && j < other.size()) { + T max_start = std::max(start(i), other.start(j)); + T min_end = std::min(end(i), other.end(j)); + + // Add an intersection range to the result if the ranges overlap. + if (max_start < min_end) + result.Add(max_start, min_end); + + if (end(i) < other.end(j)) + ++i; + else + ++j; + } + + return result; +} + } // namespace media #endif // MEDIA_BASE_RANGES_H_ |