Index: media/base/audio_buffer_unittest.cc |
diff --git a/media/base/audio_buffer_unittest.cc b/media/base/audio_buffer_unittest.cc |
index c40c076bd5e8ee73c224df4db6b972f0c00fea84..55ff4edcfe7dcdf6fb7bba84b5993ab848734fcd 100644 |
--- a/media/base/audio_buffer_unittest.cc |
+++ b/media/base/audio_buffer_unittest.cc |
@@ -2,8 +2,6 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "base/strings/string_util.h" |
-#include "base/strings/stringprintf.h" |
#include "media/base/audio_buffer.h" |
#include "media/base/audio_bus.h" |
#include "media/base/test_helpers.h" |
@@ -11,39 +9,44 @@ |
namespace media { |
-const static 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(channel_data[i], start); |
- start += increment; |
+static const int kSampleRate = 48000; |
+ |
+static void VerifyBus(AudioBus* bus, int frames, float start, float increment) { |
+ for (int ch = 0; ch < bus->channels(); ++ch) { |
+ const float v = start + ch * bus->frames() * increment; |
+ for (int i = 0; i < frames; ++i) { |
+ ASSERT_FLOAT_EQ(v + i * increment, bus->channel(ch)[i]) << "i=" << i |
+ << ", ch=" << ch; |
+ } |
} |
} |
TEST(AudioBufferTest, CopyFrom) { |
- const ChannelLayout channel_layout = CHANNEL_LAYOUT_MONO; |
- const int frames = 8; |
- const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
- scoped_refptr<AudioBuffer> buffer = |
+ const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO; |
+ scoped_refptr<AudioBuffer> original_buffer = |
MakeAudioBuffer<uint8>(kSampleFormatU8, |
- channel_layout, |
- ChannelLayoutToChannelCount(channel_layout), |
+ kChannelLayout, |
+ ChannelLayoutToChannelCount(kChannelLayout), |
kSampleRate, |
1, |
1, |
- frames, |
- start_time, |
- duration); |
- EXPECT_EQ(frames, buffer->frame_count()); |
- EXPECT_EQ(buffer->timestamp(), start_time); |
- EXPECT_EQ(buffer->duration().InSeconds(), frames); |
- EXPECT_FALSE(buffer->end_of_stream()); |
+ kSampleRate / 100, |
+ base::TimeDelta()); |
+ scoped_refptr<AudioBuffer> new_buffer = |
+ AudioBuffer::CopyFrom(kSampleFormatU8, |
+ original_buffer->channel_layout(), |
+ original_buffer->channel_count(), |
+ original_buffer->sample_rate(), |
+ original_buffer->frame_count(), |
+ &original_buffer->channel_data()[0], |
+ original_buffer->timestamp()); |
+ EXPECT_EQ(original_buffer->frame_count(), new_buffer->frame_count()); |
+ EXPECT_EQ(original_buffer->timestamp(), new_buffer->timestamp()); |
+ EXPECT_EQ(original_buffer->duration(), new_buffer->duration()); |
+ EXPECT_EQ(original_buffer->sample_rate(), new_buffer->sample_rate()); |
+ EXPECT_EQ(original_buffer->channel_count(), new_buffer->channel_count()); |
+ EXPECT_EQ(original_buffer->channel_layout(), new_buffer->channel_layout()); |
+ EXPECT_FALSE(original_buffer->end_of_stream()); |
} |
TEST(AudioBufferTest, CreateEOSBuffer) { |
@@ -55,8 +58,7 @@ TEST(AudioBufferTest, FrameSize) { |
const uint8 kTestData[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, |
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, |
27, 28, 29, 30, 31 }; |
- const base::TimeDelta kTimestampA = base::TimeDelta::FromMicroseconds(1337); |
- const base::TimeDelta kTimestampB = base::TimeDelta::FromMicroseconds(1234); |
+ const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337); |
const uint8* const data[] = { kTestData }; |
scoped_refptr<AudioBuffer> buffer = |
@@ -66,8 +68,7 @@ TEST(AudioBufferTest, FrameSize) { |
kSampleRate, |
16, |
data, |
- kTimestampA, |
- kTimestampB); |
+ kTimestamp); |
EXPECT_EQ(16, buffer->frame_count()); // 2 channels of 8-bit data |
buffer = AudioBuffer::CopyFrom(kSampleFormatF32, |
@@ -76,17 +77,15 @@ TEST(AudioBufferTest, FrameSize) { |
kSampleRate, |
2, |
data, |
- kTimestampA, |
- kTimestampB); |
+ kTimestamp); |
EXPECT_EQ(2, buffer->frame_count()); // now 4 channels of 32-bit data |
} |
TEST(AudioBufferTest, ReadU8) { |
const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; |
const int channels = ChannelLayoutToChannelCount(channel_layout); |
- const int frames = 4; |
+ const int frames = 10; |
const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<uint8>(kSampleFormatU8, |
channel_layout, |
channels, |
@@ -94,19 +93,16 @@ TEST(AudioBufferTest, ReadU8) { |
128, |
1, |
frames, |
- start_time, |
- duration); |
- |
- // 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); |
+ start_time); |
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); |
buffer->ReadFrames(frames, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), frames, 0.0f, 4.0f / 127.0f); |
- VerifyResult(bus->channel(1), frames, 1.0f / 127.0f, 4.0f / 127.0f); |
- VerifyResult(bus->channel(2), frames, 2.0f / 127.0f, 4.0f / 127.0f); |
- VerifyResult(bus->channel(3), frames, 3.0f / 127.0f, 4.0f / 127.0f); |
+ VerifyBus(bus.get(), frames, 0, 1.0f / 127.0f); |
+ |
+ // Now read the same data one frame at a time. |
+ bus->Zero(); |
+ for (int i = 0; i < frames; ++i) |
+ buffer->ReadFrames(1, i, i, bus.get()); |
+ VerifyBus(bus.get(), frames, 0, 1.0f / 127.0f); |
} |
TEST(AudioBufferTest, ReadS16) { |
@@ -114,7 +110,6 @@ TEST(AudioBufferTest, ReadS16) { |
const int channels = ChannelLayoutToChannelCount(channel_layout); |
const int frames = 10; |
const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int16>(kSampleFormatS16, |
channel_layout, |
channels, |
@@ -122,32 +117,23 @@ TEST(AudioBufferTest, ReadS16) { |
1, |
1, |
frames, |
- start_time, |
- duration); |
- |
- // 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); |
- buffer->ReadFrames(6, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), 6, 1.0f / kint16max, 2.0f / kint16max); |
- VerifyResult(bus->channel(1), 6, 2.0f / kint16max, 2.0f / kint16max); |
+ start_time); |
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); |
+ buffer->ReadFrames(frames, 0, 0, bus.get()); |
+ VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); |
// Now read the same data one frame at a time. |
- bus = AudioBus::Create(channels, 100); |
- for (int i = 0; i < frames; ++i) { |
+ bus->Zero(); |
+ for (int i = 0; i < frames; ++i) |
buffer->ReadFrames(1, i, i, bus.get()); |
- } |
- VerifyResult(bus->channel(0), frames, 1.0f / kint16max, 2.0f / kint16max); |
- VerifyResult(bus->channel(1), frames, 2.0f / kint16max, 2.0f / kint16max); |
+ VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); |
} |
TEST(AudioBufferTest, ReadS32) { |
const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; |
const int channels = ChannelLayoutToChannelCount(channel_layout); |
- const int frames = 6; |
+ const int frames = 20; |
const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int32>(kSampleFormatS32, |
channel_layout, |
channels, |
@@ -155,22 +141,15 @@ TEST(AudioBufferTest, ReadS32) { |
1, |
1, |
frames, |
- start_time, |
- duration); |
- |
- // 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 int32 range. |
- scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); |
+ start_time); |
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); |
buffer->ReadFrames(frames, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), frames, 1.0f / kint32max, 2.0f / kint32max); |
- VerifyResult(bus->channel(1), frames, 2.0f / kint32max, 2.0f / kint32max); |
- |
- // Now read 2 frames starting at frame offset 3. ch[0] should be 7, 9, and |
- // ch[1] should be 8, 10. |
- buffer->ReadFrames(2, 3, 0, bus.get()); |
- VerifyResult(bus->channel(0), 2, 7.0f / kint32max, 2.0f / kint32max); |
- VerifyResult(bus->channel(1), 2, 8.0f / kint32max, 2.0f / kint32max); |
+ VerifyBus(bus.get(), frames, 1.0f / kint32max, 1.0f / kint32max); |
+ |
+ // Read second 10 frames. |
+ bus->Zero(); |
+ buffer->ReadFrames(10, 10, 0, bus.get()); |
+ VerifyBus(bus.get(), 10, 11.0f / kint32max, 1.0f / kint32max); |
} |
TEST(AudioBufferTest, ReadF32) { |
@@ -178,7 +157,6 @@ TEST(AudioBufferTest, ReadF32) { |
const int channels = ChannelLayoutToChannelCount(channel_layout); |
const int frames = 20; |
const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<float>(kSampleFormatF32, |
channel_layout, |
channels, |
@@ -186,21 +164,15 @@ TEST(AudioBufferTest, ReadF32) { |
1.0f, |
1.0f, |
frames, |
- start_time, |
- duration); |
- |
- // Read first 10 frames from the buffer. F32 is interleaved, so ch[0] should |
- // be 1, 3, 5, ... and ch[1] should be 2, 4, 6, ... |
- scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); |
+ start_time); |
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); |
buffer->ReadFrames(10, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), 10, 1.0f, 2.0f); |
- VerifyResult(bus->channel(1), 10, 2.0f, 2.0f); |
+ VerifyBus(bus.get(), 10, 1, 1); |
// Read second 10 frames. |
- bus = AudioBus::Create(channels, 100); |
+ bus->Zero(); |
buffer->ReadFrames(10, 10, 0, bus.get()); |
- VerifyResult(bus->channel(0), 10, 21.0f, 2.0f); |
- VerifyResult(bus->channel(1), 10, 22.0f, 2.0f); |
+ VerifyBus(bus.get(), 10, 11, 1); |
} |
TEST(AudioBufferTest, ReadS16Planar) { |
@@ -208,7 +180,6 @@ TEST(AudioBufferTest, ReadS16Planar) { |
const int channels = ChannelLayoutToChannelCount(channel_layout); |
const int frames = 20; |
const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
scoped_refptr<AudioBuffer> buffer = |
MakeAudioBuffer<int16>(kSampleFormatPlanarS16, |
channel_layout, |
@@ -217,32 +188,25 @@ TEST(AudioBufferTest, ReadS16Planar) { |
1, |
1, |
frames, |
- start_time, |
- duration); |
- |
- // Read 6 frames from the buffer. Data is planar, so ch[0] should be 1, 2, 3, |
- // 4, 5, 6, and ch[1] should be 21, 22, 23, 24, 25, 26. Data is converted to |
- // float from -1.0 to 1.0 based on int16 range. |
- scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); |
- buffer->ReadFrames(6, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), 6, 1.0f / kint16max, 1.0f / kint16max); |
- VerifyResult(bus->channel(1), 6, 21.0f / kint16max, 1.0f / kint16max); |
+ start_time); |
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); |
+ buffer->ReadFrames(10, 0, 0, bus.get()); |
+ VerifyBus(bus.get(), 10, 1.0f / kint16max, 1.0f / kint16max); |
// Read all the frames backwards, one by one. ch[0] should be 20, 19, ... |
- bus = AudioBus::Create(channels, 100); |
- for (int i = 0; i < frames; ++i) { |
- buffer->ReadFrames(1, frames - i - 1, i, bus.get()); |
- } |
- VerifyResult(bus->channel(0), frames, 20.0f / kint16max, -1.0f / kint16max); |
- VerifyResult(bus->channel(1), frames, 40.0f / kint16max, -1.0f / kint16max); |
+ bus->Zero(); |
+ for (int i = frames - 1; i >= 0; --i) |
+ buffer->ReadFrames(1, i, i, bus.get()); |
+ VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); |
// Read 0 frames with different offsets. Existing data in AudioBus should be |
// unchanged. |
buffer->ReadFrames(0, 0, 0, bus.get()); |
+ VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); |
buffer->ReadFrames(0, 0, 10, bus.get()); |
+ VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); |
buffer->ReadFrames(0, 10, 0, bus.get()); |
- VerifyResult(bus->channel(0), frames, 20.0f / kint16max, -1.0f / kint16max); |
- VerifyResult(bus->channel(1), frames, 40.0f / kint16max, -1.0f / kint16max); |
+ VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); |
} |
TEST(AudioBufferTest, ReadF32Planar) { |
@@ -250,7 +214,6 @@ TEST(AudioBufferTest, ReadF32Planar) { |
const int channels = ChannelLayoutToChannelCount(channel_layout); |
const int frames = 100; |
const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
scoped_refptr<AudioBuffer> buffer = |
MakeAudioBuffer<float>(kSampleFormatPlanarF32, |
channel_layout, |
@@ -259,103 +222,94 @@ TEST(AudioBufferTest, ReadF32Planar) { |
1.0f, |
1.0f, |
frames, |
- start_time, |
- duration); |
+ start_time); |
// Read all 100 frames from the buffer. F32 is planar, so ch[0] should be 1, |
// 2, 3, 4, ..., ch[1] should be 101, 102, 103, ..., and so on for all 4 |
// channels. |
scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); |
buffer->ReadFrames(frames, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), frames, 1.0f, 1.0f); |
- VerifyResult(bus->channel(1), frames, 101.0f, 1.0f); |
- VerifyResult(bus->channel(2), frames, 201.0f, 1.0f); |
- VerifyResult(bus->channel(3), frames, 301.0f, 1.0f); |
+ VerifyBus(bus.get(), frames, 1, 1); |
// Now read 20 frames from the middle of the buffer. |
- bus = AudioBus::Create(channels, 100); |
+ bus->Zero(); |
buffer->ReadFrames(20, 50, 0, bus.get()); |
- VerifyResult(bus->channel(0), 20, 51.0f, 1.0f); |
- VerifyResult(bus->channel(1), 20, 151.0f, 1.0f); |
- VerifyResult(bus->channel(2), 20, 251.0f, 1.0f); |
- VerifyResult(bus->channel(3), 20, 351.0f, 1.0f); |
+ VerifyBus(bus.get(), 20, 51, 1); |
} |
TEST(AudioBufferTest, EmptyBuffer) { |
const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; |
const int channels = ChannelLayoutToChannelCount(channel_layout); |
- const int frames = 100; |
+ const int frames = kSampleRate / 100; |
const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEmptyBuffer( |
- channel_layout, channels, kSampleRate, frames, start_time, duration); |
+ channel_layout, channels, kSampleRate, frames, start_time); |
EXPECT_EQ(frames, buffer->frame_count()); |
EXPECT_EQ(start_time, buffer->timestamp()); |
- EXPECT_EQ(frames, buffer->duration().InSeconds()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(10), buffer->duration()); |
EXPECT_FALSE(buffer->end_of_stream()); |
// Read all 100 frames from the buffer. All data should be 0. |
- scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); |
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); |
buffer->ReadFrames(frames, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), frames, 0.0f, 0.0f); |
- VerifyResult(bus->channel(1), frames, 0.0f, 0.0f); |
- VerifyResult(bus->channel(2), frames, 0.0f, 0.0f); |
- VerifyResult(bus->channel(3), frames, 0.0f, 0.0f); |
+ VerifyBus(bus.get(), frames, 0, 0); |
} |
TEST(AudioBufferTest, Trim) { |
const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; |
const int channels = ChannelLayoutToChannelCount(channel_layout); |
- const int frames = 100; |
+ const int frames = kSampleRate / 10; |
const base::TimeDelta start_time; |
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); |
+ const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100); |
scoped_refptr<AudioBuffer> buffer = |
MakeAudioBuffer<float>(kSampleFormatPlanarF32, |
channel_layout, |
channels, |
kSampleRate, |
- 1.0f, |
+ 0.0f, |
1.0f, |
frames, |
- start_time, |
- duration); |
+ start_time); |
EXPECT_EQ(frames, buffer->frame_count()); |
EXPECT_EQ(start_time, buffer->timestamp()); |
- EXPECT_EQ(frames, buffer->duration().InSeconds()); |
- |
- scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); |
- buffer->ReadFrames(20, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), 20, 1.0f, 1.0f); |
- |
- // Trim off 10 frames from the start. |
- buffer->TrimStart(10); |
- EXPECT_EQ(buffer->frame_count(), frames - 10); |
- EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(10)); |
- EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(90)); |
- buffer->ReadFrames(20, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), 20, 11.0f, 1.0f); |
- |
- // Trim off 10 frames from the end. |
- buffer->TrimEnd(10); |
- EXPECT_EQ(buffer->frame_count(), frames - 20); |
- EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(10)); |
- EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(80)); |
- buffer->ReadFrames(20, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), 20, 11.0f, 1.0f); |
- |
- // Trim off 50 more from the start. |
- buffer->TrimStart(50); |
- EXPECT_EQ(buffer->frame_count(), frames - 70); |
- EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(60)); |
- EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(30)); |
- buffer->ReadFrames(10, 0, 0, bus.get()); |
- VerifyResult(bus->channel(0), 10, 61.0f, 1.0f); |
- |
- // Trim off the last 30 frames. |
- buffer->TrimEnd(30); |
- EXPECT_EQ(buffer->frame_count(), 0); |
- EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(60)); |
- EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(0)); |
+ EXPECT_EQ(duration, buffer->duration()); |
+ |
+ const int ten_ms_of_frames = kSampleRate / 100; |
+ const base::TimeDelta ten_ms = base::TimeDelta::FromMilliseconds(10); |
+ |
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); |
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get()); |
+ VerifyBus(bus.get(), buffer->frame_count(), 0.0f, 1.0f); |
+ |
+ // Trim off 10ms of frames from the start. |
+ buffer->TrimStart(ten_ms_of_frames); |
+ EXPECT_EQ(start_time + ten_ms, buffer->timestamp()); |
+ EXPECT_EQ(frames - ten_ms_of_frames, buffer->frame_count()); |
+ EXPECT_EQ(duration - ten_ms, buffer->duration()); |
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get()); |
+ VerifyBus(bus.get(), buffer->frame_count(), ten_ms_of_frames, 1.0f); |
+ |
+ // Trim off 10ms of frames from the end. |
+ buffer->TrimEnd(ten_ms_of_frames); |
+ EXPECT_EQ(start_time + ten_ms, buffer->timestamp()); |
+ EXPECT_EQ(frames - 2 * ten_ms_of_frames, buffer->frame_count()); |
+ EXPECT_EQ(duration - 2 * ten_ms, buffer->duration()); |
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get()); |
+ VerifyBus(bus.get(), buffer->frame_count(), ten_ms_of_frames, 1.0f); |
+ |
+ // Trim off 40ms more from the start. |
+ buffer->TrimStart(4 * ten_ms_of_frames); |
+ EXPECT_EQ(start_time + 5 * ten_ms, buffer->timestamp()); |
+ EXPECT_EQ(frames - 6 * ten_ms_of_frames, buffer->frame_count()); |
+ EXPECT_EQ(duration - 6 * ten_ms, buffer->duration()); |
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get()); |
+ VerifyBus(bus.get(), buffer->frame_count(), 5 * ten_ms_of_frames, 1.0f); |
+ |
+ // Trim off the final 40ms from the end. |
+ buffer->TrimEnd(4 * ten_ms_of_frames); |
+ EXPECT_EQ(0, buffer->frame_count()); |
+ EXPECT_EQ(start_time + 5 * ten_ms, buffer->timestamp()); |
+ EXPECT_EQ(base::TimeDelta(), buffer->duration()); |
} |
} // namespace media |