Commit c6273ea4 authored by acolwell@chromium.org's avatar acolwell@chromium.org

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
parent 7acfaf93
...@@ -202,12 +202,12 @@ TimeDelta Pipeline::GetCurrentTime_Locked() const { ...@@ -202,12 +202,12 @@ TimeDelta Pipeline::GetCurrentTime_Locked() const {
Ranges<TimeDelta> Pipeline::GetBufferedTimeRanges() { Ranges<TimeDelta> Pipeline::GetBufferedTimeRanges() {
base::AutoLock auto_lock(lock_); base::AutoLock auto_lock(lock_);
Ranges<TimeDelta> time_ranges; 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) { for (size_t i = 0; i < buffered_time_ranges_.size(); ++i) {
time_ranges.Add(buffered_time_ranges_.start(i), time_ranges.Add(buffered_time_ranges_.start(i),
buffered_time_ranges_.end(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) { for (size_t i = 0; i < buffered_byte_ranges_.size(); ++i) {
TimeDelta start = TimeForByteOffset_Locked(buffered_byte_ranges_.start(i)); TimeDelta start = TimeForByteOffset_Locked(buffered_byte_ranges_.start(i));
TimeDelta end = TimeForByteOffset_Locked(buffered_byte_ranges_.end(i)); TimeDelta end = TimeForByteOffset_Locked(buffered_byte_ranges_.end(i));
......
...@@ -723,7 +723,6 @@ bool ChunkDemuxer::AppendData(const std::string& id, ...@@ -723,7 +723,6 @@ bool ChunkDemuxer::AppendData(const std::string& id,
std::swap(cb, seek_cb_); std::swap(cb, seek_cb_);
} }
if (duration_ > TimeDelta() && duration_ != kInfiniteDuration()) {
if (audio_ && !video_) { if (audio_ && !video_) {
ranges = audio_->GetBufferedRanges(); ranges = audio_->GetBufferedRanges();
} else if (!audio_ && video_) { } else if (!audio_ && video_) {
...@@ -732,7 +731,6 @@ bool ChunkDemuxer::AppendData(const std::string& id, ...@@ -732,7 +731,6 @@ bool ChunkDemuxer::AppendData(const std::string& id,
ranges = ComputeIntersection(); ranges = ComputeIntersection();
} }
} }
}
for (size_t i = 0; i < ranges.size(); ++i) for (size_t i = 0; i < ranges.size(); ++i)
host_->AddBufferedTimeRange(ranges.start(i), ranges.end(i)); host_->AddBufferedTimeRange(ranges.start(i), ranges.end(i));
......
...@@ -263,6 +263,23 @@ TEST_F(PipelineIntegrationTest, BasicPlaybackHashed) { ...@@ -263,6 +263,23 @@ TEST_F(PipelineIntegrationTest, BasicPlaybackHashed) {
EXPECT_EQ(GetAudioHash(), "6138555be3389e6aba4c8e6f70195d50"); 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) { TEST_F(PipelineIntegrationTest, EncryptedPlayback) {
MockMediaSource source("bear-320x240-encrypted.webm", 219726, true, true); MockMediaSource source("bear-320x240-encrypted.webm", 219726, true, true);
FakeDecryptorClient encrypted_media; FakeDecryptorClient encrypted_media;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment