| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <cstdlib> | 5 #include <cstdlib> |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "media/base/data_buffer.h" | 10 #include "media/base/data_buffer.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 // Create random test data samples. | 34 // Create random test data samples. |
| 35 for (int i = 0; i < kDataSize; i++) | 35 for (int i = 0; i < kDataSize; i++) |
| 36 data_[i] = static_cast<char>(rand()); | 36 data_[i] = static_cast<char>(rand()); |
| 37 } | 37 } |
| 38 | 38 |
| 39 int GetRandomInt(int maximum) { | 39 int GetRandomInt(int maximum) { |
| 40 return rand() % (maximum + 1); | 40 return rand() % (maximum + 1); |
| 41 } | 41 } |
| 42 | 42 |
| 43 SeekableBuffer buffer_; | 43 SeekableBuffer buffer_; |
| 44 uint8 data_[kDataSize]; | 44 uint8_t data_[kDataSize]; |
| 45 uint8 write_buffer_[kDataSize]; | 45 uint8_t write_buffer_[kDataSize]; |
| 46 }; | 46 }; |
| 47 | 47 |
| 48 TEST_F(SeekableBufferTest, RandomReadWrite) { | 48 TEST_F(SeekableBufferTest, RandomReadWrite) { |
| 49 int write_position = 0; | 49 int write_position = 0; |
| 50 int read_position = 0; | 50 int read_position = 0; |
| 51 while (read_position < kDataSize) { | 51 while (read_position < kDataSize) { |
| 52 // Write a random amount of data. | 52 // Write a random amount of data. |
| 53 int write_size = GetRandomInt(kBufferSize); | 53 int write_size = GetRandomInt(kBufferSize); |
| 54 write_size = std::min(write_size, kDataSize - write_position); | 54 write_size = std::min(write_size, kDataSize - write_position); |
| 55 bool should_append = buffer_.Append(data_ + write_position, write_size); | 55 bool should_append = buffer_.Append(data_ + write_position, write_size); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); | 112 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); |
| 113 | 113 |
| 114 // Read. | 114 // Read. |
| 115 EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize)); | 115 EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize)); |
| 116 forward_bytes -= kReadSize; | 116 forward_bytes -= kReadSize; |
| 117 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); | 117 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
| 118 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); | 118 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); |
| 119 read_position += kReadSize; | 119 read_position += kReadSize; |
| 120 | 120 |
| 121 // Seek backward. | 121 // Seek backward. |
| 122 EXPECT_TRUE(buffer_.Seek(-3 * static_cast<int32>(kReadSize))); | 122 EXPECT_TRUE(buffer_.Seek(-3 * static_cast<int32_t>(kReadSize))); |
| 123 forward_bytes += 3 * kReadSize; | 123 forward_bytes += 3 * kReadSize; |
| 124 read_position -= 3 * kReadSize; | 124 read_position -= 3 * kReadSize; |
| 125 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); | 125 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
| 126 | 126 |
| 127 // Copy. | 127 // Copy. |
| 128 EXPECT_EQ(kReadSize, buffer_.Peek(write_buffer_, kReadSize)); | 128 EXPECT_EQ(kReadSize, buffer_.Peek(write_buffer_, kReadSize)); |
| 129 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); | 129 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
| 130 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); | 130 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); |
| 131 | 131 |
| 132 // Read. | 132 // Read. |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 buffer_.Append(data_ + i, kWriteSize); | 209 buffer_.Append(data_ + i, kWriteSize); |
| 210 } | 210 } |
| 211 | 211 |
| 212 // Read until buffer is empty. | 212 // Read until buffer is empty. |
| 213 for (int i = 0; i < kBufferSize; i += kReadSize) { | 213 for (int i = 0; i < kBufferSize; i += kReadSize) { |
| 214 EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize)); | 214 EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize)); |
| 215 EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize)); | 215 EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize)); |
| 216 } | 216 } |
| 217 | 217 |
| 218 // Seek backward. | 218 // Seek backward. |
| 219 EXPECT_TRUE(buffer_.Seek(-static_cast<int32>(kBufferSize))); | 219 EXPECT_TRUE(buffer_.Seek(-static_cast<int32_t>(kBufferSize))); |
| 220 EXPECT_FALSE(buffer_.Seek(-1)); | 220 EXPECT_FALSE(buffer_.Seek(-1)); |
| 221 | 221 |
| 222 // Read again. | 222 // Read again. |
| 223 for (int i = 0; i < kBufferSize; i += kReadSize) { | 223 for (int i = 0; i < kBufferSize; i += kReadSize) { |
| 224 EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize)); | 224 EXPECT_EQ(kReadSize, buffer_.Read(write_buffer_, kReadSize)); |
| 225 EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize)); | 225 EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize)); |
| 226 } | 226 } |
| 227 } | 227 } |
| 228 | 228 |
| 229 TEST_F(SeekableBufferTest, GetCurrentChunk) { | 229 TEST_F(SeekableBufferTest, GetCurrentChunk) { |
| 230 const int kSeekSize = kWriteSize / 3; | 230 const int kSeekSize = kWriteSize / 3; |
| 231 | 231 |
| 232 scoped_refptr<DataBuffer> buffer = DataBuffer::CopyFrom(data_, kWriteSize); | 232 scoped_refptr<DataBuffer> buffer = DataBuffer::CopyFrom(data_, kWriteSize); |
| 233 | 233 |
| 234 const uint8* data; | 234 const uint8_t* data; |
| 235 int size; | 235 int size; |
| 236 EXPECT_FALSE(buffer_.GetCurrentChunk(&data, &size)); | 236 EXPECT_FALSE(buffer_.GetCurrentChunk(&data, &size)); |
| 237 | 237 |
| 238 buffer_.Append(buffer.get()); | 238 buffer_.Append(buffer.get()); |
| 239 EXPECT_TRUE(buffer_.GetCurrentChunk(&data, &size)); | 239 EXPECT_TRUE(buffer_.GetCurrentChunk(&data, &size)); |
| 240 EXPECT_EQ(data, buffer->data()); | 240 EXPECT_EQ(data, buffer->data()); |
| 241 EXPECT_EQ(size, buffer->data_size()); | 241 EXPECT_EQ(size, buffer->data_size()); |
| 242 | 242 |
| 243 buffer_.Seek(kSeekSize); | 243 buffer_.Seek(kSeekSize); |
| 244 EXPECT_TRUE(buffer_.GetCurrentChunk(&data, &size)); | 244 EXPECT_TRUE(buffer_.GetCurrentChunk(&data, &size)); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 EXPECT_EQ(0, buffer_.Read(write_buffer_, 0)); | 285 EXPECT_EQ(0, buffer_.Read(write_buffer_, 0)); |
| 286 EXPECT_EQ(0, buffer_.Read(write_buffer_, 1)); | 286 EXPECT_EQ(0, buffer_.Read(write_buffer_, 1)); |
| 287 EXPECT_TRUE(buffer_.Seek(0)); | 287 EXPECT_TRUE(buffer_.Seek(0)); |
| 288 EXPECT_FALSE(buffer_.Seek(-1)); | 288 EXPECT_FALSE(buffer_.Seek(-1)); |
| 289 EXPECT_FALSE(buffer_.Seek(1)); | 289 EXPECT_FALSE(buffer_.Seek(1)); |
| 290 EXPECT_EQ(0, buffer_.forward_bytes()); | 290 EXPECT_EQ(0, buffer_.forward_bytes()); |
| 291 EXPECT_EQ(0, buffer_.backward_bytes()); | 291 EXPECT_EQ(0, buffer_.backward_bytes()); |
| 292 } | 292 } |
| 293 | 293 |
| 294 TEST_F(SeekableBufferTest, GetTime) { | 294 TEST_F(SeekableBufferTest, GetTime) { |
| 295 const int64 kNoTS = kNoTimestamp().ToInternalValue(); | 295 const int64_t kNoTS = kNoTimestamp().ToInternalValue(); |
| 296 const struct { | 296 const struct { |
| 297 int64 first_time_useconds; | 297 int64_t first_time_useconds; |
| 298 int64 duration_useconds; | 298 int64_t duration_useconds; |
| 299 int consume_bytes; | 299 int consume_bytes; |
| 300 int64 expected_time; | 300 int64_t expected_time; |
| 301 } tests[] = { | 301 } tests[] = { |
| 302 { kNoTS, 1000000, 0, kNoTS }, | 302 { kNoTS, 1000000, 0, kNoTS }, |
| 303 { kNoTS, 4000000, 0, kNoTS }, | 303 { kNoTS, 4000000, 0, kNoTS }, |
| 304 { kNoTS, 8000000, 0, kNoTS }, | 304 { kNoTS, 8000000, 0, kNoTS }, |
| 305 { kNoTS, 1000000, kWriteSize / 2, kNoTS }, | 305 { kNoTS, 1000000, kWriteSize / 2, kNoTS }, |
| 306 { kNoTS, 4000000, kWriteSize / 2, kNoTS }, | 306 { kNoTS, 4000000, kWriteSize / 2, kNoTS }, |
| 307 { kNoTS, 8000000, kWriteSize / 2, kNoTS }, | 307 { kNoTS, 8000000, kWriteSize / 2, kNoTS }, |
| 308 { kNoTS, 1000000, kWriteSize, kNoTS }, | 308 { kNoTS, 1000000, kWriteSize, kNoTS }, |
| 309 { kNoTS, 4000000, kWriteSize, kNoTS }, | 309 { kNoTS, 4000000, kWriteSize, kNoTS }, |
| 310 { kNoTS, 8000000, kWriteSize, kNoTS }, | 310 { kNoTS, 8000000, kWriteSize, kNoTS }, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 335 scoped_refptr<DataBuffer> buffer = DataBuffer::CopyFrom(data_, kWriteSize); | 335 scoped_refptr<DataBuffer> buffer = DataBuffer::CopyFrom(data_, kWriteSize); |
| 336 | 336 |
| 337 for (size_t i = 0; i < arraysize(tests); ++i) { | 337 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 338 buffer->set_timestamp(base::TimeDelta::FromMicroseconds( | 338 buffer->set_timestamp(base::TimeDelta::FromMicroseconds( |
| 339 tests[i].first_time_useconds)); | 339 tests[i].first_time_useconds)); |
| 340 buffer->set_duration(base::TimeDelta::FromMicroseconds( | 340 buffer->set_duration(base::TimeDelta::FromMicroseconds( |
| 341 tests[i].duration_useconds)); | 341 tests[i].duration_useconds)); |
| 342 buffer_.Append(buffer.get()); | 342 buffer_.Append(buffer.get()); |
| 343 EXPECT_TRUE(buffer_.Seek(tests[i].consume_bytes)); | 343 EXPECT_TRUE(buffer_.Seek(tests[i].consume_bytes)); |
| 344 | 344 |
| 345 int64 actual = buffer_.current_time().ToInternalValue(); | 345 int64_t actual = buffer_.current_time().ToInternalValue(); |
| 346 | 346 |
| 347 EXPECT_EQ(tests[i].expected_time, actual) << "With test = { start:" | 347 EXPECT_EQ(tests[i].expected_time, actual) << "With test = { start:" |
| 348 << tests[i].first_time_useconds << ", duration:" | 348 << tests[i].first_time_useconds << ", duration:" |
| 349 << tests[i].duration_useconds << ", consumed:" | 349 << tests[i].duration_useconds << ", consumed:" |
| 350 << tests[i].consume_bytes << " }\n"; | 350 << tests[i].consume_bytes << " }\n"; |
| 351 | 351 |
| 352 buffer_.Clear(); | 352 buffer_.Clear(); |
| 353 } | 353 } |
| 354 } | 354 } |
| 355 | 355 |
| 356 } // namespace media | 356 } // namespace media |
| OLD | NEW |