diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-11 16:15:53 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-11 16:15:53 +0000 |
commit | c6273ea47189ed9740d1561770316475002a71a4 (patch) | |
tree | 804d1e8800eabb1e2de86b1305e79059fa4ef6ba /media | |
parent | 7acfaf93b62799f99c8ba228d621ee79449e139d (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | media/filters/chunk_demuxer.cc | 14 | ||||
-rw-r--r-- | media/filters/pipeline_integration_test.cc | 17 |
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; |