summaryrefslogtreecommitdiffstats
path: root/media/base/seekable_buffer_unittest.cc
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-27 03:48:08 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-27 03:48:08 +0000
commit4b40fccbc3dce6f081cd741b2404d82e02eb7e5b (patch)
tree07d60996c1a317e4ba28bf84beedfdb9e3c7cbc2 /media/base/seekable_buffer_unittest.cc
parent562b222ad53049a87f695e450e8698d3cb2aa1d6 (diff)
downloadchromium_src-4b40fccbc3dce6f081cd741b2404d82e02eb7e5b.zip
chromium_src-4b40fccbc3dce6f081cd741b2404d82e02eb7e5b.tar.gz
chromium_src-4b40fccbc3dce6f081cd741b2404d82e02eb7e5b.tar.bz2
Merging SeekableBuffer and BufferQueue:
1. Removed SeekableBuffer::Buffer. 2. Extended SeekableBuffer to support all the features of BufferQueue. 3. BufferQueue removed and replaced with SeekableBuffer. BUG=28654 TEST=none Review URL: http://codereview.chromium.org/1736012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45669 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/seekable_buffer_unittest.cc')
-rw-r--r--media/base/seekable_buffer_unittest.cc112
1 files changed, 93 insertions, 19 deletions
diff --git a/media/base/seekable_buffer_unittest.cc b/media/base/seekable_buffer_unittest.cc
index 943c179..333833e 100644
--- a/media/base/seekable_buffer_unittest.cc
+++ b/media/base/seekable_buffer_unittest.cc
@@ -1,10 +1,11 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/logging.h"
#include "base/scoped_ptr.h"
#include "base/time.h"
+#include "media/base/data_buffer.h"
#include "media/base/seekable_buffer.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -47,16 +48,22 @@ TEST_F(SeekableBufferTest, RandomReadWrite) {
// Write a random amount of data.
size_t write_size = GetRandomInt(kBufferSize);
write_size = std::min(write_size, kDataSize - write_position);
- bool should_append = buffer_.Append(write_size, data_ + write_position);
+ bool should_append = buffer_.Append(data_ + write_position, write_size);
write_position += write_size;
EXPECT_GE(write_position, read_position);
EXPECT_EQ(write_position - read_position, buffer_.forward_bytes());
EXPECT_EQ(should_append, buffer_.forward_bytes() < kBufferSize)
<< "Incorrect buffer full reported";
+ // Peek a random amount of data.
+ size_t copy_size = GetRandomInt(kBufferSize);
+ size_t bytes_copied = buffer_.Peek(write_buffer_, copy_size);
+ EXPECT_GE(copy_size, bytes_copied);
+ EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_copied));
+
// Read a random amount of data.
size_t read_size = GetRandomInt(kBufferSize);
- size_t bytes_read = buffer_.Read(read_size, write_buffer_);
+ size_t bytes_read = buffer_.Read(write_buffer_, read_size);
EXPECT_GE(read_size, bytes_read);
EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read));
read_position += bytes_read;
@@ -71,7 +78,7 @@ TEST_F(SeekableBufferTest, ReadWriteSeek) {
for (int i = 0; i < 10; ++i) {
// Write until buffer is full.
for (size_t j = 0; j < kBufferSize; j += kWriteSize) {
- bool should_append = buffer_.Append(kWriteSize, data_ + j);
+ bool should_append = buffer_.Append(data_ + j, kWriteSize);
EXPECT_EQ(j < kBufferSize - kWriteSize, should_append)
<< "Incorrect buffer full reported";
EXPECT_EQ(j + kWriteSize, buffer_.forward_bytes());
@@ -83,7 +90,7 @@ TEST_F(SeekableBufferTest, ReadWriteSeek) {
size_t forward_bytes = kBufferSize;
for (size_t j = 0; j < kBufferSize; j += kWriteSize) {
// Read.
- EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
+ EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize));
forward_bytes -= kReadSize;
EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
@@ -95,8 +102,13 @@ TEST_F(SeekableBufferTest, ReadWriteSeek) {
read_position += 2 * kReadSize;
EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
+ // Copy.
+ EXPECT_EQ(kReadSize, buffer_.Peek(write_buffer_, kReadSize));
+ EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
+ EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
+
// Read.
- EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
+ EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize));
forward_bytes -= kReadSize;
EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
@@ -108,15 +120,25 @@ TEST_F(SeekableBufferTest, ReadWriteSeek) {
read_position -= 3 * kReadSize;
EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
+ // Copy.
+ EXPECT_EQ(kReadSize, buffer_.Peek(write_buffer_, kReadSize));
+ EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
+ EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
+
// Read.
- EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
+ EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize));
forward_bytes -= kReadSize;
EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
read_position += kReadSize;
+ // Copy.
+ EXPECT_EQ(kReadSize, buffer_.Peek(write_buffer_, kReadSize));
+ EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
+ EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
+
// Read.
- EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
+ EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize));
forward_bytes -= kReadSize;
EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
@@ -136,14 +158,14 @@ TEST_F(SeekableBufferTest, BufferFull) {
// Write and expect the buffer to be not full.
for (size_t i = 0; i < kBufferSize - kWriteSize; i += kWriteSize) {
- EXPECT_TRUE(buffer_.Append(kWriteSize, data_ + i));
+ EXPECT_TRUE(buffer_.Append(data_ + i, kWriteSize));
EXPECT_EQ(i + kWriteSize, buffer_.forward_bytes());
}
// Write until we have kMaxWriteSize bytes in the buffer. Buffer is full in
// these writes.
for (size_t i = buffer_.forward_bytes(); i < kMaxWriteSize; i += kWriteSize) {
- EXPECT_FALSE(buffer_.Append(kWriteSize, data_ + i));
+ EXPECT_FALSE(buffer_.Append(data_ + i, kWriteSize));
EXPECT_EQ(i + kWriteSize, buffer_.forward_bytes());
}
@@ -153,7 +175,7 @@ TEST_F(SeekableBufferTest, BufferFull) {
// Read a random amount of data.
size_t read_size = GetRandomInt(kBufferSize);
size_t forward_bytes = buffer_.forward_bytes();
- size_t bytes_read = buffer_.Read(read_size, write_buffer_);
+ size_t bytes_read = buffer_.Read(write_buffer_, read_size);
EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read));
if (read_size > forward_bytes)
EXPECT_EQ(forward_bytes, bytes_read);
@@ -166,7 +188,7 @@ TEST_F(SeekableBufferTest, BufferFull) {
// Expects we have no bytes left.
EXPECT_EQ(0u, buffer_.forward_bytes());
- EXPECT_EQ(0u, buffer_.Read(1, write_buffer_));
+ EXPECT_EQ(0u, buffer_.Read(write_buffer_, 1));
}
TEST_F(SeekableBufferTest, SeekBackward) {
@@ -180,12 +202,12 @@ TEST_F(SeekableBufferTest, SeekBackward) {
// Write into buffer until it's full.
for (size_t i = 0; i < kBufferSize; i += kWriteSize) {
// Write a random amount of data.
- buffer_.Append(kWriteSize, data_ + i);
+ buffer_.Append(data_ + i, kWriteSize);
}
// Read until buffer is empty.
for (size_t i = 0; i < kBufferSize; i += kReadSize) {
- EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
+ EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize));
EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize));
}
@@ -195,7 +217,7 @@ TEST_F(SeekableBufferTest, SeekBackward) {
// Read again.
for (size_t i = 0; i < kBufferSize; i += kReadSize) {
- EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
+ EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize));
EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize));
}
}
@@ -209,7 +231,7 @@ TEST_F(SeekableBufferTest, SeekForward) {
size_t write_size = GetRandomInt(kBufferSize);
write_size = std::min(write_size, kDataSize - write_position);
- bool should_append = buffer_.Append(write_size, data_ + write_position);
+ bool should_append = buffer_.Append(data_ + write_position, write_size);
write_position += write_size;
EXPECT_GE(write_position, read_position);
EXPECT_EQ(write_position - read_position, buffer_.forward_bytes());
@@ -226,7 +248,7 @@ TEST_F(SeekableBufferTest, SeekForward) {
// Read a random amount of data.
size_t read_size = GetRandomInt(kBufferSize);
- size_t bytes_read = buffer_.Read(read_size, write_buffer_);
+ size_t bytes_read = buffer_.Read(write_buffer_, read_size);
EXPECT_GE(read_size, bytes_read);
EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read));
read_position += bytes_read;
@@ -236,8 +258,8 @@ TEST_F(SeekableBufferTest, SeekForward) {
}
TEST_F(SeekableBufferTest, AllMethods) {
- EXPECT_EQ(0u, buffer_.Read(0, write_buffer_));
- EXPECT_EQ(0u, buffer_.Read(1, write_buffer_));
+ EXPECT_EQ(0u, buffer_.Read(write_buffer_, 0));
+ EXPECT_EQ(0u, buffer_.Read(write_buffer_, 1));
EXPECT_TRUE(buffer_.Seek(0));
EXPECT_FALSE(buffer_.Seek(-1));
EXPECT_FALSE(buffer_.Seek(1));
@@ -245,4 +267,56 @@ TEST_F(SeekableBufferTest, AllMethods) {
EXPECT_EQ(0u, buffer_.backward_bytes());
}
+
+TEST_F(SeekableBufferTest, GetTime) {
+ const struct {
+ int64 first_time_useconds;
+ int64 duration_useconds;
+ size_t consume_bytes;
+ int64 expected_time;
+ } tests[] = {
+ // Timestamps of 0 are treated as garbage.
+ { 0, 1000000, 0, 0 },
+ { 0, 4000000, 0, 0 },
+ { 0, 8000000, 0, 0 },
+ { 0, 1000000, 4, 0 },
+ { 0, 4000000, 4, 0 },
+ { 0, 8000000, 4, 0 },
+ { 0, 1000000, kWriteSize, 0 },
+ { 0, 4000000, kWriteSize, 0 },
+ { 0, 8000000, kWriteSize, 0 },
+ { 5, 1000000, 0, 5 },
+ { 5, 4000000, 0, 5 },
+ { 5, 8000000, 0, 5 },
+ { 5, 1000000, kWriteSize / 2, 500005 },
+ { 5, 4000000, kWriteSize / 2, 2000005 },
+ { 5, 8000000, kWriteSize / 2, 4000005 },
+ { 5, 1000000, kWriteSize, 1000005 },
+ { 5, 4000000, kWriteSize, 4000005 },
+ { 5, 8000000, kWriteSize, 8000005 },
+ };
+
+ scoped_refptr<media::DataBuffer> buffer = new media::DataBuffer(kWriteSize);
+ memcpy(buffer->GetWritableData(), data_, kWriteSize);
+ buffer->SetDataSize(kWriteSize);
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
+ buffer->SetTimestamp(base::TimeDelta::FromMicroseconds(
+ tests[i].first_time_useconds));
+ buffer->SetDuration(base::TimeDelta::FromMicroseconds(
+ tests[i].duration_useconds));
+ buffer_.Append(buffer.get());
+ EXPECT_TRUE(buffer_.Seek(tests[i].consume_bytes));
+
+ int64 actual = buffer_.current_time().ToInternalValue();
+
+ EXPECT_EQ(tests[i].expected_time, actual) << "With test = { start:"
+ << tests[i].first_time_useconds << ", duration:"
+ << tests[i].duration_useconds << ", consumed:"
+ << tests[i].consume_bytes << "}\n";
+
+ buffer_.Clear();
+ }
+}
+
} // namespace