summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-11 16:15:53 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-11 16:15:53 +0000
commitc6273ea47189ed9740d1561770316475002a71a4 (patch)
tree804d1e8800eabb1e2de86b1305e79059fa4ef6ba /media
parent7acfaf93b62799f99c8ba228d621ee79449e139d (diff)
downloadchromium_src-c6273ea47189ed9740d1561770316475002a71a4.zip
chromium_src-c6273ea47189ed9740d1561770316475002a71a4.tar.gz
chromium_src-c6273ea47189ed9740d1561770316475002a71a4.tar.bz2
Fix buffered range reporting for ChunkDemuxer
BUG=None TEST=PipelineIntegrationTest, BasicPlayback_MediaSource Review URL: https://chromiumcodereview.appspot.com/10701130 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146127 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/base/pipeline.cc4
-rw-r--r--media/filters/chunk_demuxer.cc14
-rw-r--r--media/filters/pipeline_integration_test.cc17
3 files changed, 25 insertions, 10 deletions
diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
index 9c456bb..b585355 100644
--- a/media/base/pipeline.cc
+++ b/media/base/pipeline.cc
@@ -202,12 +202,12 @@ TimeDelta Pipeline::GetCurrentTime_Locked() const {
Ranges<TimeDelta> Pipeline::GetBufferedTimeRanges() {
base::AutoLock auto_lock(lock_);
Ranges<TimeDelta> time_ranges;
- if (clock_->Duration() == TimeDelta() || total_bytes_ == 0)
- return time_ranges;
for (size_t i = 0; i < buffered_time_ranges_.size(); ++i) {
time_ranges.Add(buffered_time_ranges_.start(i),
buffered_time_ranges_.end(i));
}
+ if (clock_->Duration() == TimeDelta() || total_bytes_ == 0)
+ return time_ranges;
for (size_t i = 0; i < buffered_byte_ranges_.size(); ++i) {
TimeDelta start = TimeForByteOffset_Locked(buffered_byte_ranges_.start(i));
TimeDelta end = TimeForByteOffset_Locked(buffered_byte_ranges_.end(i));
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index d4e5ce9..ead7956 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -723,14 +723,12 @@ bool ChunkDemuxer::AppendData(const std::string& id,
std::swap(cb, seek_cb_);
}
- if (duration_ > TimeDelta() && duration_ != kInfiniteDuration()) {
- if (audio_ && !video_) {
- ranges = audio_->GetBufferedRanges();
- } else if (!audio_ && video_) {
- ranges = video_->GetBufferedRanges();
- } else {
- ranges = ComputeIntersection();
- }
+ if (audio_ && !video_) {
+ ranges = audio_->GetBufferedRanges();
+ } else if (!audio_ && video_) {
+ ranges = video_->GetBufferedRanges();
+ } else {
+ ranges = ComputeIntersection();
}
}
diff --git a/media/filters/pipeline_integration_test.cc b/media/filters/pipeline_integration_test.cc
index 6817505..c207858 100644
--- a/media/filters/pipeline_integration_test.cc
+++ b/media/filters/pipeline_integration_test.cc
@@ -263,6 +263,23 @@ TEST_F(PipelineIntegrationTest, BasicPlaybackHashed) {
EXPECT_EQ(GetAudioHash(), "6138555be3389e6aba4c8e6f70195d50");
}
+TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource) {
+ MockMediaSource source("bear-320x240.webm", 219229, true, true);
+ StartPipelineWithMediaSource(&source);
+ source.EndOfStream();
+ ASSERT_EQ(pipeline_status_, PIPELINE_OK);
+
+ EXPECT_EQ(pipeline_->GetBufferedTimeRanges().size(), 1u);
+ EXPECT_EQ(pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds(), 0);
+ EXPECT_EQ(pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds(), 2737);
+
+ Play();
+
+ ASSERT_TRUE(WaitUntilOnEnded());
+ source.Abort();
+ Stop();
+}
+
TEST_F(PipelineIntegrationTest, EncryptedPlayback) {
MockMediaSource source("bear-320x240-encrypted.webm", 219726, true, true);
FakeDecryptorClient encrypted_media;