diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-22 20:01:43 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-22 20:01:43 +0000 |
commit | 0d92efc52adfb443008c15a9947a887dd62c71b1 (patch) | |
tree | 821664c9db25c35326384a0ea6aef06dff498887 /media | |
parent | 86238d216a68a97f4ae49795b4a18ffd7c9e43b4 (diff) | |
download | chromium_src-0d92efc52adfb443008c15a9947a887dd62c71b1.zip chromium_src-0d92efc52adfb443008c15a9947a887dd62c71b1.tar.gz chromium_src-0d92efc52adfb443008c15a9947a887dd62c71b1.tar.bz2 |
Fix ChunkDemuxer so appending triggers progress events.
BUG=129037
TEST=ChunkDemuxer.TestAppendingInPieces
Review URL: https://chromiumcodereview.appspot.com/10388216
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138343 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/filters/chunk_demuxer.cc | 26 | ||||
-rw-r--r-- | media/filters/chunk_demuxer_unittest.cc | 12 |
2 files changed, 11 insertions, 27 deletions
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc index ec7cdcb..6af153a 100644 --- a/media/filters/chunk_demuxer.cc +++ b/media/filters/chunk_demuxer.cc @@ -140,8 +140,6 @@ class ChunkDemuxerStream : public DemuxerStream { bool GetBufferedRange(base::TimeDelta* start_out, base::TimeDelta* end_out) const; - bool GetLastBufferTimestamp(base::TimeDelta* timestamp) const; - // DemuxerStream methods. virtual void Read(const ReadCB& read_cb) OVERRIDE; virtual Type type() OVERRIDE; @@ -324,17 +322,6 @@ bool ChunkDemuxerStream::GetBufferedRange( return true; } -bool ChunkDemuxerStream::GetLastBufferTimestamp( - base::TimeDelta* timestamp) const { - base::AutoLock auto_lock(lock_); - - if (buffers_.empty()) - return false; - - *timestamp = buffers_.back()->GetTimestamp(); - return true; -} - // Helper function that makes sure |read_cb| runs on |message_loop|. static void RunOnMessageLoop(const DemuxerStream::ReadCB& read_cb, MessageLoop* message_loop, @@ -667,7 +654,6 @@ bool ChunkDemuxer::AppendData(const std::string& id, DCHECK_GT(length, 0u); int64 buffered_bytes = 0; - base::TimeDelta buffered_ts = base::TimeDelta::FromSeconds(-1); PipelineStatusCB cb; { @@ -709,17 +695,7 @@ bool ChunkDemuxer::AppendData(const std::string& id, std::swap(cb, seek_cb_); } - base::TimeDelta tmp; - if (audio_.get() && audio_->GetLastBufferTimestamp(&tmp) && - tmp > buffered_ts) { - buffered_ts = tmp; - } - - if (video_.get() && video_->GetLastBufferTimestamp(&tmp) && - tmp > buffered_ts) { - buffered_ts = tmp; - } - + buffered_bytes_ += length; buffered_bytes = buffered_bytes_; } diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc index 45c3a7d..61ee9c2 100644 --- a/media/filters/chunk_demuxer_unittest.cc +++ b/media/filters/chunk_demuxer_unittest.cc @@ -16,6 +16,7 @@ using ::testing::AnyNumber; using ::testing::InSequence; using ::testing::NotNull; using ::testing::Return; +using ::testing::SaveArg; using ::testing::SetArgumentPointee; using ::testing::_; @@ -101,7 +102,8 @@ class ChunkDemuxerTest : public testing::Test { }; ChunkDemuxerTest() - : client_(new MockChunkDemuxerClient()), + : buffered_bytes_(0), + client_(new MockChunkDemuxerClient()), demuxer_(new ChunkDemuxer(client_.get())) { } @@ -181,7 +183,9 @@ class ChunkDemuxerTest : public testing::Test { bool AppendData(const uint8* data, size_t length) { CHECK(length); - EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber()); + EXPECT_CALL(host_, SetBufferedBytes(_)) + .Times(AnyNumber()) + .WillRepeatedly(SaveArg<0>(&buffered_bytes_)); EXPECT_CALL(host_, SetNetworkActivity(true)) .Times(AnyNumber()); return demuxer_->AppendData(kSourceId, data, length); @@ -195,11 +199,14 @@ class ChunkDemuxerTest : public testing::Test { const uint8* start = data; const uint8* end = data + length; while (start < end) { + int64 old_buffered_bytes = buffered_bytes_; size_t append_size = std::min(piece_size, static_cast<size_t>(end - start)); if (!AppendData(start, append_size)) return false; start += append_size; + + EXPECT_GT(buffered_bytes_, old_buffered_bytes); } return true; } @@ -405,6 +412,7 @@ class ChunkDemuxerTest : public testing::Test { } MockDemuxerHost host_; + int64 buffered_bytes_; scoped_ptr<MockChunkDemuxerClient> client_; scoped_refptr<ChunkDemuxer> demuxer_; |