From c6273ea47189ed9740d1561770316475002a71a4 Mon Sep 17 00:00:00 2001 From: "acolwell@chromium.org" Date: Wed, 11 Jul 2012 16:15:53 +0000 Subject: 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 --- media/base/pipeline.cc | 4 ++-- media/filters/chunk_demuxer.cc | 14 ++++++-------- media/filters/pipeline_integration_test.cc | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 10 deletions(-) (limited to 'media') 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 Pipeline::GetBufferedTimeRanges() { base::AutoLock auto_lock(lock_); Ranges 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; -- cgit v1.1