Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Unified Diff: media/base/audio_buffer_queue_unittest.cc

Issue 261533002: Remove AudioBuffer::set_duration(), instead base on frames. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix content decryptor Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/base/audio_buffer_queue_unittest.cc
diff --git a/media/base/audio_buffer_queue_unittest.cc b/media/base/audio_buffer_queue_unittest.cc
index fc048573e10a3d50bd4749f52858cc24407f0c18..e6a148ae21bba7940e71e12a70989b4451f1cfdf 100644
--- a/media/base/audio_buffer_queue_unittest.cc
+++ b/media/base/audio_buffer_queue_unittest.cc
@@ -5,7 +5,6 @@
#include "base/basictypes.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
-#include "base/strings/stringprintf.h"
#include "base/time/time.h"
#include "media/base/audio_buffer.h"
#include "media/base/audio_buffer_queue.h"
@@ -18,15 +17,18 @@ namespace media {
const int kSampleRate = 44100;
-static void VerifyResult(float* channel_data,
- int frames,
- float start,
- float increment) {
- for (int i = 0; i < frames; ++i) {
- SCOPED_TRACE(base::StringPrintf(
- "i=%d/%d start=%f, increment=%f", i, frames, start, increment));
- ASSERT_EQ(start, channel_data[i]);
- start += increment;
+static void VerifyBus(AudioBus* bus,
+ int offset,
+ int frames,
+ int buffer_size,
+ float start,
+ float increment) {
+ for (int ch = 0; ch < bus->channels(); ++ch) {
+ const float v = start + ch * buffer_size * increment;
+ for (int i = offset; i < frames; ++i) {
+ ASSERT_FLOAT_EQ(v + (i - offset) * increment, bus->channel(ch)[i])
+ << "i=" << i << ", ch=" << ch;
+ }
}
}
@@ -34,18 +36,16 @@ template <typename T>
static scoped_refptr<AudioBuffer> MakeTestBuffer(SampleFormat format,
ChannelLayout channel_layout,
T start,
- T end,
+ T step,
int frames) {
- const base::TimeDelta kNoTime = kNoTimestamp();
return MakeAudioBuffer<T>(format,
channel_layout,
ChannelLayoutToChannelCount(channel_layout),
kSampleRate,
start,
- end,
+ step,
frames,
- kNoTime,
- kNoTime);
+ kNoTimestamp());
}
TEST(AudioBufferQueueTest, AppendAndClear) {
@@ -96,7 +96,7 @@ TEST(AudioBufferQueueTest, IteratorCheck) {
EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get()));
EXPECT_EQ(4, buffer.frames());
- VerifyResult(bus->channel(0), 4, 10.0f, 1.0f);
+ VerifyBus(bus.get(), 0, 4, bus->frames(), 10, 1);
buffer.Append(MakeTestBuffer<float>(
kSampleFormatF32, channel_layout, 20.0f, 1.0f, 8));
@@ -108,7 +108,7 @@ TEST(AudioBufferQueueTest, IteratorCheck) {
buffer.SeekFrames(16);
EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get()));
EXPECT_EQ(0, buffer.frames());
- VerifyResult(bus->channel(0), 4, 34.0f, 1.0f);
+ VerifyBus(bus.get(), 0, 4, bus->frames(), 34, 1);
buffer.Append(MakeTestBuffer<float>(
kSampleFormatF32, channel_layout, 40.0f, 1.0f, 8));
@@ -118,13 +118,13 @@ TEST(AudioBufferQueueTest, IteratorCheck) {
EXPECT_EQ(16, buffer.frames());
EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get()));
- VerifyResult(bus->channel(0), 4, 40.0f, 1.0f);
+ VerifyBus(bus.get(), 0, 4, bus->frames(), 40, 1);
// Read off the end of the buffer.
EXPECT_EQ(12, buffer.frames());
buffer.SeekFrames(8);
EXPECT_EQ(4, buffer.ReadFrames(100, 0, bus.get()));
- VerifyResult(bus->channel(0), 4, 54.0f, 1.0f);
+ VerifyBus(bus.get(), 0, 4, bus->frames(), 54, 1);
}
TEST(AudioBufferQueueTest, Seek) {
@@ -162,19 +162,17 @@ TEST(AudioBufferQueueTest, ReadF32) {
MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 33.0f, 1.0f, 60));
EXPECT_EQ(76, buffer.frames());
- // Read 3 frames from the buffer. F32 is interleaved, so ch[0] should be
- // 1, 3, 5, and ch[1] should be 2, 4, 6.
+ // Read 3 frames from the buffer.
scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
EXPECT_EQ(3, buffer.ReadFrames(3, 0, bus.get()));
EXPECT_EQ(73, buffer.frames());
- VerifyResult(bus->channel(0), 3, 1.0f, 2.0f);
- VerifyResult(bus->channel(1), 3, 2.0f, 2.0f);
+ VerifyBus(bus.get(), 0, 3, 6, 1, 1);
// Now read 5 frames, which will span buffers. Append the data into AudioBus.
EXPECT_EQ(5, buffer.ReadFrames(5, 3, bus.get()));
EXPECT_EQ(68, buffer.frames());
- VerifyResult(bus->channel(0), 8, 1.0f, 2.0f);
- VerifyResult(bus->channel(1), 8, 2.0f, 2.0f);
+ VerifyBus(bus.get(), 0, 6, 6, 1, 1);
+ VerifyBus(bus.get(), 6, 2, 10, 13, 1);
// Now skip into the third buffer.
buffer.SeekFrames(20);
@@ -182,30 +180,24 @@ TEST(AudioBufferQueueTest, ReadF32) {
// Now read 2 frames, which are in the third buffer.
EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get()));
- VerifyResult(bus->channel(0), 2, 57.0f, 2.0f);
- VerifyResult(bus->channel(1), 2, 58.0f, 2.0f);
+ VerifyBus(bus.get(), 0, 2, 60, 45, 1);
}
TEST(AudioBufferQueueTest, ReadU8) {
const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
const int channels = ChannelLayoutToChannelCount(channel_layout);
+ const int frames = 4;
AudioBufferQueue buffer;
// Add 4 frames of data.
buffer.Append(
- MakeTestBuffer<uint8>(kSampleFormatU8, channel_layout, 128, 1, 4));
+ MakeTestBuffer<uint8>(kSampleFormatU8, channel_layout, 128, 1, frames));
- // Read all 4 frames from the buffer. Data is interleaved, so ch[0] should be
- // 128, 132, 136, 140, other channels similar. However, values are converted
- // from [0, 255] to [-1.0, 1.0] with a bias of 128. Thus the first buffer
- // value should be 0.0, then 1/127, 2/127, etc.
- scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
- EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get()));
+ // Read all 4 frames from the buffer.
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
+ EXPECT_EQ(frames, buffer.ReadFrames(frames, 0, bus.get()));
EXPECT_EQ(0, buffer.frames());
- VerifyResult(bus->channel(0), 4, 0.0f, 4.0f / 127.0f);
- VerifyResult(bus->channel(1), 4, 1.0f / 127.0f, 4.0f / 127.0f);
- VerifyResult(bus->channel(2), 4, 2.0f / 127.0f, 4.0f / 127.0f);
- VerifyResult(bus->channel(3), 4, 3.0f / 127.0f, 4.0f / 127.0f);
+ VerifyBus(bus.get(), 0, frames, bus->frames(), 0, 1.0f / 127.0f);
}
TEST(AudioBufferQueueTest, ReadS16) {
@@ -220,14 +212,13 @@ TEST(AudioBufferQueueTest, ReadS16) {
MakeTestBuffer<int16>(kSampleFormatS16, channel_layout, 9, 1, 20));
EXPECT_EQ(24, buffer.frames());
- // Read 6 frames from the buffer. Data is interleaved, so ch[0] should be
- // 1, 3, 5, 7, 9, 11, and ch[1] should be 2, 4, 6, 8, 10, 12.
- // Data is converted to float from -1.0 to 1.0 based on int16 range.
- scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
- EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get()));
+ // Read 6 frames from the buffer.
+ const int frames = 6;
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, buffer.frames());
+ EXPECT_EQ(frames, buffer.ReadFrames(frames, 0, bus.get()));
EXPECT_EQ(18, buffer.frames());
- VerifyResult(bus->channel(0), 6, 1.0f / kint16max, 2.0f / kint16max);
- VerifyResult(bus->channel(1), 6, 2.0f / kint16max, 2.0f / kint16max);
+ VerifyBus(bus.get(), 0, 4, 4, 1.0f / kint16max, 1.0f / kint16max);
+ VerifyBus(bus.get(), 4, 2, 20, 9.0f / kint16max, 1.0f / kint16max);
}
TEST(AudioBufferQueueTest, ReadS32) {
@@ -242,20 +233,17 @@ TEST(AudioBufferQueueTest, ReadS32) {
MakeTestBuffer<int32>(kSampleFormatS32, channel_layout, 9, 1, 20));
EXPECT_EQ(24, buffer.frames());
- // Read 6 frames from the buffer. Data is interleaved, so ch[0] should be
- // 1, 3, 5, 7, 100, 106, and ch[1] should be 2, 4, 6, 8, 103, 109.
- // Data is converted to float from -1.0 to 1.0 based on int32 range.
+ // Read 6 frames from the buffer.
scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get()));
EXPECT_EQ(18, buffer.frames());
- VerifyResult(bus->channel(0), 6, 1.0f / kint32max, 2.0f / kint32max);
- VerifyResult(bus->channel(1), 6, 2.0f / kint32max, 2.0f / kint32max);
+ VerifyBus(bus.get(), 0, 4, 4, 1.0f / kint32max, 1.0f / kint32max);
+ VerifyBus(bus.get(), 4, 2, 20, 9.0f / kint32max, 1.0f / kint32max);
// Read the next 2 frames.
EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get()));
EXPECT_EQ(16, buffer.frames());
- VerifyResult(bus->channel(0), 2, 13.0f / kint32max, 2.0f / kint32max);
- VerifyResult(bus->channel(1), 2, 14.0f / kint32max, 2.0f / kint32max);
+ VerifyBus(bus.get(), 0, 2, 20, 11.0f / kint32max, 1.0f / kint32max);
}
TEST(AudioBufferQueueTest, ReadF32Planar) {
@@ -270,15 +258,12 @@ TEST(AudioBufferQueueTest, ReadF32Planar) {
kSampleFormatPlanarF32, channel_layout, 50.0f, 1.0f, 10));
EXPECT_EQ(14, buffer.frames());
- // Read 6 frames from the buffer. F32 is planar, so ch[0] should be
- // 1, 2, 3, 4, 50, 51, and ch[1] should be 5, 6, 7, 8, 60, 61.
+ // Read 6 frames from the buffer.
scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get()));
EXPECT_EQ(8, buffer.frames());
- VerifyResult(bus->channel(0), 4, 1.0f, 1.0f);
- VerifyResult(bus->channel(0) + 4, 2, 50.0f, 1.0f);
- VerifyResult(bus->channel(1), 4, 5.0f, 1.0f);
- VerifyResult(bus->channel(1) + 4, 2, 60.0f, 1.0f);
+ VerifyBus(bus.get(), 0, 4, 4, 1, 1);
+ VerifyBus(bus.get(), 4, 2, 10, 50, 1);
}
TEST(AudioBufferQueueTest, ReadS16Planar) {
@@ -293,16 +278,12 @@ TEST(AudioBufferQueueTest, ReadS16Planar) {
kSampleFormatPlanarS16, channel_layout, 100, 5, 20));
EXPECT_EQ(24, buffer.frames());
- // Read 6 frames from the buffer. Data is planar, so ch[0] should be
- // 1, 2, 3, 4, 100, 105, and ch[1] should be 5, 6, 7, 8, 200, 205.
- // Data is converted to float from -1.0 to 1.0 based on int16 range.
+ // Read 6 frames from the buffer.
scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get()));
EXPECT_EQ(18, buffer.frames());
- VerifyResult(bus->channel(0), 4, 1.0f / kint16max, 1.0f / kint16max);
- VerifyResult(bus->channel(0) + 4, 2, 100.0f / kint16max, 5.0f / kint16max);
- VerifyResult(bus->channel(1), 4, 5.0f / kint16max, 1.0f / kint16max);
- VerifyResult(bus->channel(1) + 4, 2, 200.0f / kint16max, 5.0f / kint16max);
+ VerifyBus(bus.get(), 0, 4, 4, 1.0f / kint16max, 1.0f / kint16max);
+ VerifyBus(bus.get(), 4, 2, 20, 5.0f / kint16max, 1.0f / kint16max);
}
TEST(AudioBufferQueueTest, ReadManyChannels) {
@@ -319,14 +300,13 @@ TEST(AudioBufferQueueTest, ReadManyChannels) {
kSampleFormatF32, channel_layout, 16.0f * channels, 1.0f, 60));
EXPECT_EQ(76, buffer.frames());
- // Read 3 frames from the buffer. F32 is interleaved, so ch[0] should be
- // 1, 17, 33, and ch[1] should be 2, 18, 34. Just check a few channels.
+ // Read 3 frames from the buffer.
scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
EXPECT_EQ(30, buffer.ReadFrames(30, 0, bus.get()));
EXPECT_EQ(46, buffer.frames());
- for (int i = 0; i < channels; ++i) {
- VerifyResult(bus->channel(i), 30, static_cast<float>(i), 8.0f);
- }
+ VerifyBus(bus.get(), 0, 6, 6, 0, 1);
+ VerifyBus(bus.get(), 6, 10, 10, 6 * channels, 1);
+ VerifyBus(bus.get(), 16, 14, 60, 16 * channels, 1);
}
TEST(AudioBufferQueueTest, Peek) {
@@ -335,43 +315,32 @@ TEST(AudioBufferQueueTest, Peek) {
AudioBufferQueue buffer;
// Add 60 frames of data.
- buffer.Append(
- MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 0.0f, 1.0f, 60));
- EXPECT_EQ(60, buffer.frames());
+ const int frames = 60;
+ buffer.Append(MakeTestBuffer<float>(
+ kSampleFormatF32, channel_layout, 0.0f, 1.0f, frames));
+ EXPECT_EQ(frames, buffer.frames());
// Peek at the first 30 frames.
- scoped_ptr<AudioBus> bus1 = AudioBus::Create(channels, 100);
- EXPECT_EQ(60, buffer.frames());
- EXPECT_EQ(60, buffer.PeekFrames(100, 0, 0, bus1.get()));
+ scoped_ptr<AudioBus> bus1 = AudioBus::Create(channels, frames);
+ EXPECT_EQ(frames, buffer.frames());
+ EXPECT_EQ(frames, buffer.PeekFrames(60, 0, 0, bus1.get()));
EXPECT_EQ(30, buffer.PeekFrames(30, 0, 0, bus1.get()));
- EXPECT_EQ(60, buffer.frames());
+ EXPECT_EQ(frames, buffer.frames());
+ VerifyBus(bus1.get(), 0, 30, bus1->frames(), 0, 1);
// Now read the next 30 frames (which should be the same as those peeked at).
- scoped_ptr<AudioBus> bus2 = AudioBus::Create(channels, 100);
+ scoped_ptr<AudioBus> bus2 = AudioBus::Create(channels, frames);
EXPECT_EQ(30, buffer.ReadFrames(30, 0, bus2.get()));
- for (int i = 0; i < channels; ++i) {
- VerifyResult(bus1->channel(i),
- 30,
- static_cast<float>(i),
- static_cast<float>(channels));
- VerifyResult(bus2->channel(i),
- 30,
- static_cast<float>(i),
- static_cast<float>(channels));
- }
+ VerifyBus(bus2.get(), 0, 30, bus2->frames(), 0, 1);
// Peek 10 frames forward
+ bus1->Zero();
EXPECT_EQ(5, buffer.PeekFrames(5, 10, 0, bus1.get()));
- for (int i = 0; i < channels; ++i) {
- VerifyResult(bus1->channel(i),
- 5,
- static_cast<float>(i + 40 * channels),
- static_cast<float>(channels));
- }
+ VerifyBus(bus1.get(), 0, 5, bus1->frames(), 40, 1);
// Peek to the end of the buffer.
EXPECT_EQ(30, buffer.frames());
- EXPECT_EQ(30, buffer.PeekFrames(100, 0, 0, bus1.get()));
+ EXPECT_EQ(30, buffer.PeekFrames(60, 0, 0, bus1.get()));
EXPECT_EQ(30, buffer.PeekFrames(30, 0, 0, bus1.get()));
}
@@ -380,36 +349,43 @@ TEST(AudioBufferQueueTest, Time) {
const int channels = ChannelLayoutToChannelCount(channel_layout);
const base::TimeDelta start_time1;
const base::TimeDelta start_time2 = base::TimeDelta::FromSeconds(30);
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(10);
AudioBufferQueue buffer;
scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
+ scoped_refptr<AudioBuffer> audio_buffer =
+ MakeAudioBuffer<int16>(kSampleFormatS16,
+ channel_layout,
+ channels,
+ kSampleRate,
+ 1,
+ 1,
+ 10,
+ start_time1);
+
// Add two buffers (second one added later):
// first: start=0s, duration=10s
// second: start=30s, duration=10s
- buffer.Append(MakeAudioBuffer<int16>(kSampleFormatS16,
- channel_layout,
- channels,
- kSampleRate,
- 1,
- 1,
- 10,
- start_time1,
- duration));
+ buffer.Append(audio_buffer);
EXPECT_EQ(10, buffer.frames());
// Check starting time.
EXPECT_EQ(start_time1, buffer.current_time());
// Read 2 frames, should be 2s in (since duration is 1s per sample).
- EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get()));
- EXPECT_EQ(start_time1 + base::TimeDelta::FromSeconds(2),
- buffer.current_time());
+ int frames_read = 2;
+ EXPECT_EQ(frames_read, buffer.ReadFrames(frames_read, 0, bus.get()));
+ EXPECT_EQ(
+ start_time1 +
+ frames_read * audio_buffer->duration() / audio_buffer->frame_count(),
+ buffer.current_time());
// Skip 2 frames.
buffer.SeekFrames(2);
- EXPECT_EQ(start_time1 + base::TimeDelta::FromSeconds(4),
- buffer.current_time());
+ frames_read += 2;
+ EXPECT_EQ(
+ start_time1 +
+ frames_read * audio_buffer->duration() / audio_buffer->frame_count(),
+ buffer.current_time());
// Add second buffer for more data.
buffer.Append(MakeAudioBuffer<int16>(kSampleFormatS16,
@@ -419,28 +395,32 @@ TEST(AudioBufferQueueTest, Time) {
1,
1,
10,
- start_time2,
- duration));
+ start_time2));
EXPECT_EQ(16, buffer.frames());
// Read until almost the end of buffer1.
+ frames_read += 5;
EXPECT_EQ(5, buffer.ReadFrames(5, 0, bus.get()));
- EXPECT_EQ(start_time1 + base::TimeDelta::FromSeconds(9),
- buffer.current_time());
+ EXPECT_EQ(
+ start_time1 +
+ frames_read * audio_buffer->duration() / audio_buffer->frame_count(),
+ buffer.current_time());
// Read 1 value, so time moved to buffer2.
EXPECT_EQ(1, buffer.ReadFrames(1, 0, bus.get()));
EXPECT_EQ(start_time2, buffer.current_time());
// Read all 10 frames in buffer2, timestamp should be last time from buffer2.
+ frames_read = 10;
EXPECT_EQ(10, buffer.ReadFrames(10, 0, bus.get()));
- EXPECT_EQ(start_time2 + base::TimeDelta::FromSeconds(10),
- buffer.current_time());
+ const base::TimeDelta expected_current_time =
+ start_time2 +
+ frames_read * audio_buffer->duration() / audio_buffer->frame_count();
+ EXPECT_EQ(expected_current_time, buffer.current_time());
// Try to read more frames (which don't exist), timestamp should remain.
EXPECT_EQ(0, buffer.ReadFrames(5, 0, bus.get()));
- EXPECT_EQ(start_time2 + base::TimeDelta::FromSeconds(10),
- buffer.current_time());
+ EXPECT_EQ(expected_current_time, buffer.current_time());
}
TEST(AudioBufferQueueTest, NoTime) {

Powered by Google App Engine
This is Rietveld 408576698