summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-22 20:01:43 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-22 20:01:43 +0000
commit0d92efc52adfb443008c15a9947a887dd62c71b1 (patch)
tree821664c9db25c35326384a0ea6aef06dff498887 /media
parent86238d216a68a97f4ae49795b4a18ffd7c9e43b4 (diff)
downloadchromium_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.cc26
-rw-r--r--media/filters/chunk_demuxer_unittest.cc12
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_;