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

Side by Side Diff: media/base/audio_buffer_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, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/strings/string_util.h"
6 #include "base/strings/stringprintf.h"
7 #include "media/base/audio_buffer.h" 5 #include "media/base/audio_buffer.h"
8 #include "media/base/audio_bus.h" 6 #include "media/base/audio_bus.h"
9 #include "media/base/test_helpers.h" 7 #include "media/base/test_helpers.h"
10 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
11 9
12 namespace media { 10 namespace media {
13 11
14 const static int kSampleRate = 44100; 12 static const int kSampleRate = 48000;
15 13
16 static void VerifyResult(float* channel_data, 14 static void VerifyBus(AudioBus* bus, int frames, float start, float increment) {
17 int frames, 15 for (int ch = 0; ch < bus->channels(); ++ch) {
18 float start, 16 const float v = start + ch * bus->frames() * increment;
19 float increment) { 17 for (int i = 0; i < frames; ++i) {
20 for (int i = 0; i < frames; ++i) { 18 ASSERT_FLOAT_EQ(v + i * increment, bus->channel(ch)[i]) << "i=" << i
21 SCOPED_TRACE(base::StringPrintf( 19 << ", ch=" << ch;
22 "i=%d/%d start=%f, increment=%f", i, frames, start, increment)); 20 }
23 ASSERT_EQ(channel_data[i], start);
24 start += increment;
25 } 21 }
26 } 22 }
27 23
28 TEST(AudioBufferTest, CopyFrom) { 24 TEST(AudioBufferTest, CopyFrom) {
29 const ChannelLayout channel_layout = CHANNEL_LAYOUT_MONO; 25 const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO;
30 const int frames = 8; 26 scoped_refptr<AudioBuffer> original_buffer =
31 const base::TimeDelta start_time;
32 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
33 scoped_refptr<AudioBuffer> buffer =
34 MakeAudioBuffer<uint8>(kSampleFormatU8, 27 MakeAudioBuffer<uint8>(kSampleFormatU8,
35 channel_layout, 28 kChannelLayout,
36 ChannelLayoutToChannelCount(channel_layout), 29 ChannelLayoutToChannelCount(kChannelLayout),
37 kSampleRate, 30 kSampleRate,
38 1, 31 1,
39 1, 32 1,
40 frames, 33 kSampleRate / 100,
41 start_time, 34 base::TimeDelta());
42 duration); 35 scoped_refptr<AudioBuffer> new_buffer =
43 EXPECT_EQ(frames, buffer->frame_count()); 36 AudioBuffer::CopyFrom(kSampleFormatU8,
44 EXPECT_EQ(buffer->timestamp(), start_time); 37 original_buffer->channel_layout(),
45 EXPECT_EQ(buffer->duration().InSeconds(), frames); 38 original_buffer->channel_count(),
46 EXPECT_FALSE(buffer->end_of_stream()); 39 original_buffer->sample_rate(),
40 original_buffer->frame_count(),
41 &original_buffer->channel_data()[0],
42 original_buffer->timestamp());
43 EXPECT_EQ(original_buffer->frame_count(), new_buffer->frame_count());
44 EXPECT_EQ(original_buffer->timestamp(), new_buffer->timestamp());
45 EXPECT_EQ(original_buffer->duration(), new_buffer->duration());
46 EXPECT_EQ(original_buffer->sample_rate(), new_buffer->sample_rate());
47 EXPECT_EQ(original_buffer->channel_count(), new_buffer->channel_count());
48 EXPECT_EQ(original_buffer->channel_layout(), new_buffer->channel_layout());
49 EXPECT_FALSE(original_buffer->end_of_stream());
47 } 50 }
48 51
49 TEST(AudioBufferTest, CreateEOSBuffer) { 52 TEST(AudioBufferTest, CreateEOSBuffer) {
50 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEOSBuffer(); 53 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEOSBuffer();
51 EXPECT_TRUE(buffer->end_of_stream()); 54 EXPECT_TRUE(buffer->end_of_stream());
52 } 55 }
53 56
54 TEST(AudioBufferTest, FrameSize) { 57 TEST(AudioBufferTest, FrameSize) {
55 const uint8 kTestData[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 58 const uint8 kTestData[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
56 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 59 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
57 27, 28, 29, 30, 31 }; 60 27, 28, 29, 30, 31 };
58 const base::TimeDelta kTimestampA = base::TimeDelta::FromMicroseconds(1337); 61 const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337);
59 const base::TimeDelta kTimestampB = base::TimeDelta::FromMicroseconds(1234);
60 62
61 const uint8* const data[] = { kTestData }; 63 const uint8* const data[] = { kTestData };
62 scoped_refptr<AudioBuffer> buffer = 64 scoped_refptr<AudioBuffer> buffer =
63 AudioBuffer::CopyFrom(kSampleFormatU8, 65 AudioBuffer::CopyFrom(kSampleFormatU8,
64 CHANNEL_LAYOUT_STEREO, 66 CHANNEL_LAYOUT_STEREO,
65 2, 67 2,
66 kSampleRate, 68 kSampleRate,
67 16, 69 16,
68 data, 70 data,
69 kTimestampA, 71 kTimestamp);
70 kTimestampB);
71 EXPECT_EQ(16, buffer->frame_count()); // 2 channels of 8-bit data 72 EXPECT_EQ(16, buffer->frame_count()); // 2 channels of 8-bit data
72 73
73 buffer = AudioBuffer::CopyFrom(kSampleFormatF32, 74 buffer = AudioBuffer::CopyFrom(kSampleFormatF32,
74 CHANNEL_LAYOUT_4_0, 75 CHANNEL_LAYOUT_4_0,
75 4, 76 4,
76 kSampleRate, 77 kSampleRate,
77 2, 78 2,
78 data, 79 data,
79 kTimestampA, 80 kTimestamp);
80 kTimestampB);
81 EXPECT_EQ(2, buffer->frame_count()); // now 4 channels of 32-bit data 81 EXPECT_EQ(2, buffer->frame_count()); // now 4 channels of 32-bit data
82 } 82 }
83 83
84 TEST(AudioBufferTest, ReadU8) { 84 TEST(AudioBufferTest, ReadU8) {
85 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 85 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
86 const int channels = ChannelLayoutToChannelCount(channel_layout); 86 const int channels = ChannelLayoutToChannelCount(channel_layout);
87 const int frames = 4; 87 const int frames = 10;
88 const base::TimeDelta start_time; 88 const base::TimeDelta start_time;
89 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
90 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<uint8>(kSampleFormatU8, 89 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<uint8>(kSampleFormatU8,
91 channel_layout, 90 channel_layout,
92 channels, 91 channels,
93 kSampleRate, 92 kSampleRate,
94 128, 93 128,
95 1, 94 1,
96 frames, 95 frames,
97 start_time, 96 start_time);
98 duration); 97 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
98 buffer->ReadFrames(frames, 0, 0, bus.get());
99 VerifyBus(bus.get(), frames, 0, 1.0f / 127.0f);
99 100
100 // Read all 4 frames from the buffer. Data is interleaved, so ch[0] should be 101 // Now read the same data one frame at a time.
101 // 128, 132, 136, 140, other channels similar. However, values are converted 102 bus->Zero();
102 // from [0, 255] to [-1.0, 1.0] with a bias of 128. Thus the first buffer 103 for (int i = 0; i < frames; ++i)
103 // value should be 0.0, then 1/127, 2/127, etc. 104 buffer->ReadFrames(1, i, i, bus.get());
104 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 105 VerifyBus(bus.get(), frames, 0, 1.0f / 127.0f);
105 buffer->ReadFrames(frames, 0, 0, bus.get());
106 VerifyResult(bus->channel(0), frames, 0.0f, 4.0f / 127.0f);
107 VerifyResult(bus->channel(1), frames, 1.0f / 127.0f, 4.0f / 127.0f);
108 VerifyResult(bus->channel(2), frames, 2.0f / 127.0f, 4.0f / 127.0f);
109 VerifyResult(bus->channel(3), frames, 3.0f / 127.0f, 4.0f / 127.0f);
110 } 106 }
111 107
112 TEST(AudioBufferTest, ReadS16) { 108 TEST(AudioBufferTest, ReadS16) {
113 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 109 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
114 const int channels = ChannelLayoutToChannelCount(channel_layout); 110 const int channels = ChannelLayoutToChannelCount(channel_layout);
115 const int frames = 10; 111 const int frames = 10;
116 const base::TimeDelta start_time; 112 const base::TimeDelta start_time;
117 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
118 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int16>(kSampleFormatS16, 113 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int16>(kSampleFormatS16,
119 channel_layout, 114 channel_layout,
120 channels, 115 channels,
121 kSampleRate, 116 kSampleRate,
122 1, 117 1,
123 1, 118 1,
124 frames, 119 frames,
125 start_time, 120 start_time);
126 duration); 121 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
127 122 buffer->ReadFrames(frames, 0, 0, bus.get());
128 // Read 6 frames from the buffer. Data is interleaved, so ch[0] should be 1, 123 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max);
129 // 3, 5, 7, 9, 11, and ch[1] should be 2, 4, 6, 8, 10, 12. Data is converted
130 // to float from -1.0 to 1.0 based on int16 range.
131 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
132 buffer->ReadFrames(6, 0, 0, bus.get());
133 VerifyResult(bus->channel(0), 6, 1.0f / kint16max, 2.0f / kint16max);
134 VerifyResult(bus->channel(1), 6, 2.0f / kint16max, 2.0f / kint16max);
135 124
136 // Now read the same data one frame at a time. 125 // Now read the same data one frame at a time.
137 bus = AudioBus::Create(channels, 100); 126 bus->Zero();
138 for (int i = 0; i < frames; ++i) { 127 for (int i = 0; i < frames; ++i)
139 buffer->ReadFrames(1, i, i, bus.get()); 128 buffer->ReadFrames(1, i, i, bus.get());
140 } 129 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max);
141 VerifyResult(bus->channel(0), frames, 1.0f / kint16max, 2.0f / kint16max);
142 VerifyResult(bus->channel(1), frames, 2.0f / kint16max, 2.0f / kint16max);
143 } 130 }
144 131
145 TEST(AudioBufferTest, ReadS32) { 132 TEST(AudioBufferTest, ReadS32) {
146 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 133 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
147 const int channels = ChannelLayoutToChannelCount(channel_layout); 134 const int channels = ChannelLayoutToChannelCount(channel_layout);
148 const int frames = 6; 135 const int frames = 20;
149 const base::TimeDelta start_time; 136 const base::TimeDelta start_time;
150 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
151 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int32>(kSampleFormatS32, 137 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int32>(kSampleFormatS32,
152 channel_layout, 138 channel_layout,
153 channels, 139 channels,
154 kSampleRate, 140 kSampleRate,
155 1, 141 1,
156 1, 142 1,
157 frames, 143 frames,
158 start_time, 144 start_time);
159 duration); 145 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
146 buffer->ReadFrames(frames, 0, 0, bus.get());
147 VerifyBus(bus.get(), frames, 1.0f / kint32max, 1.0f / kint32max);
160 148
161 // Read 6 frames from the buffer. Data is interleaved, so ch[0] should be 1, 149 // Read second 10 frames.
162 // 3, 5, 7, 9, 11, and ch[1] should be 2, 4, 6, 8, 10, 12. Data is converted 150 bus->Zero();
163 // to float from -1.0 to 1.0 based on int32 range. 151 buffer->ReadFrames(10, 10, 0, bus.get());
164 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 152 VerifyBus(bus.get(), 10, 11.0f / kint32max, 1.0f / kint32max);
165 buffer->ReadFrames(frames, 0, 0, bus.get());
166 VerifyResult(bus->channel(0), frames, 1.0f / kint32max, 2.0f / kint32max);
167 VerifyResult(bus->channel(1), frames, 2.0f / kint32max, 2.0f / kint32max);
168
169 // Now read 2 frames starting at frame offset 3. ch[0] should be 7, 9, and
170 // ch[1] should be 8, 10.
171 buffer->ReadFrames(2, 3, 0, bus.get());
172 VerifyResult(bus->channel(0), 2, 7.0f / kint32max, 2.0f / kint32max);
173 VerifyResult(bus->channel(1), 2, 8.0f / kint32max, 2.0f / kint32max);
174 } 153 }
175 154
176 TEST(AudioBufferTest, ReadF32) { 155 TEST(AudioBufferTest, ReadF32) {
177 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 156 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
178 const int channels = ChannelLayoutToChannelCount(channel_layout); 157 const int channels = ChannelLayoutToChannelCount(channel_layout);
179 const int frames = 20; 158 const int frames = 20;
180 const base::TimeDelta start_time; 159 const base::TimeDelta start_time;
181 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
182 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<float>(kSampleFormatF32, 160 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<float>(kSampleFormatF32,
183 channel_layout, 161 channel_layout,
184 channels, 162 channels,
185 kSampleRate, 163 kSampleRate,
186 1.0f, 164 1.0f,
187 1.0f, 165 1.0f,
188 frames, 166 frames,
189 start_time, 167 start_time);
190 duration); 168 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
191
192 // Read first 10 frames from the buffer. F32 is interleaved, so ch[0] should
193 // be 1, 3, 5, ... and ch[1] should be 2, 4, 6, ...
194 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
195 buffer->ReadFrames(10, 0, 0, bus.get()); 169 buffer->ReadFrames(10, 0, 0, bus.get());
196 VerifyResult(bus->channel(0), 10, 1.0f, 2.0f); 170 VerifyBus(bus.get(), 10, 1, 1);
197 VerifyResult(bus->channel(1), 10, 2.0f, 2.0f);
198 171
199 // Read second 10 frames. 172 // Read second 10 frames.
200 bus = AudioBus::Create(channels, 100); 173 bus->Zero();
201 buffer->ReadFrames(10, 10, 0, bus.get()); 174 buffer->ReadFrames(10, 10, 0, bus.get());
202 VerifyResult(bus->channel(0), 10, 21.0f, 2.0f); 175 VerifyBus(bus.get(), 10, 11, 1);
203 VerifyResult(bus->channel(1), 10, 22.0f, 2.0f);
204 } 176 }
205 177
206 TEST(AudioBufferTest, ReadS16Planar) { 178 TEST(AudioBufferTest, ReadS16Planar) {
207 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 179 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
208 const int channels = ChannelLayoutToChannelCount(channel_layout); 180 const int channels = ChannelLayoutToChannelCount(channel_layout);
209 const int frames = 20; 181 const int frames = 20;
210 const base::TimeDelta start_time; 182 const base::TimeDelta start_time;
211 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
212 scoped_refptr<AudioBuffer> buffer = 183 scoped_refptr<AudioBuffer> buffer =
213 MakeAudioBuffer<int16>(kSampleFormatPlanarS16, 184 MakeAudioBuffer<int16>(kSampleFormatPlanarS16,
214 channel_layout, 185 channel_layout,
215 channels, 186 channels,
216 kSampleRate, 187 kSampleRate,
217 1, 188 1,
218 1, 189 1,
219 frames, 190 frames,
220 start_time, 191 start_time);
221 duration); 192 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
222 193 buffer->ReadFrames(10, 0, 0, bus.get());
223 // Read 6 frames from the buffer. Data is planar, so ch[0] should be 1, 2, 3, 194 VerifyBus(bus.get(), 10, 1.0f / kint16max, 1.0f / kint16max);
224 // 4, 5, 6, and ch[1] should be 21, 22, 23, 24, 25, 26. Data is converted to
225 // float from -1.0 to 1.0 based on int16 range.
226 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
227 buffer->ReadFrames(6, 0, 0, bus.get());
228 VerifyResult(bus->channel(0), 6, 1.0f / kint16max, 1.0f / kint16max);
229 VerifyResult(bus->channel(1), 6, 21.0f / kint16max, 1.0f / kint16max);
230 195
231 // Read all the frames backwards, one by one. ch[0] should be 20, 19, ... 196 // Read all the frames backwards, one by one. ch[0] should be 20, 19, ...
232 bus = AudioBus::Create(channels, 100); 197 bus->Zero();
233 for (int i = 0; i < frames; ++i) { 198 for (int i = frames - 1; i >= 0; --i)
234 buffer->ReadFrames(1, frames - i - 1, i, bus.get()); 199 buffer->ReadFrames(1, i, i, bus.get());
235 } 200 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max);
236 VerifyResult(bus->channel(0), frames, 20.0f / kint16max, -1.0f / kint16max);
237 VerifyResult(bus->channel(1), frames, 40.0f / kint16max, -1.0f / kint16max);
238 201
239 // Read 0 frames with different offsets. Existing data in AudioBus should be 202 // Read 0 frames with different offsets. Existing data in AudioBus should be
240 // unchanged. 203 // unchanged.
241 buffer->ReadFrames(0, 0, 0, bus.get()); 204 buffer->ReadFrames(0, 0, 0, bus.get());
205 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max);
242 buffer->ReadFrames(0, 0, 10, bus.get()); 206 buffer->ReadFrames(0, 0, 10, bus.get());
207 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max);
243 buffer->ReadFrames(0, 10, 0, bus.get()); 208 buffer->ReadFrames(0, 10, 0, bus.get());
244 VerifyResult(bus->channel(0), frames, 20.0f / kint16max, -1.0f / kint16max); 209 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max);
245 VerifyResult(bus->channel(1), frames, 40.0f / kint16max, -1.0f / kint16max);
246 } 210 }
247 211
248 TEST(AudioBufferTest, ReadF32Planar) { 212 TEST(AudioBufferTest, ReadF32Planar) {
249 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 213 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
250 const int channels = ChannelLayoutToChannelCount(channel_layout); 214 const int channels = ChannelLayoutToChannelCount(channel_layout);
251 const int frames = 100; 215 const int frames = 100;
252 const base::TimeDelta start_time; 216 const base::TimeDelta start_time;
253 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
254 scoped_refptr<AudioBuffer> buffer = 217 scoped_refptr<AudioBuffer> buffer =
255 MakeAudioBuffer<float>(kSampleFormatPlanarF32, 218 MakeAudioBuffer<float>(kSampleFormatPlanarF32,
256 channel_layout, 219 channel_layout,
257 channels, 220 channels,
258 kSampleRate, 221 kSampleRate,
259 1.0f, 222 1.0f,
260 1.0f, 223 1.0f,
261 frames, 224 frames,
262 start_time, 225 start_time);
263 duration);
264 226
265 // Read all 100 frames from the buffer. F32 is planar, so ch[0] should be 1, 227 // Read all 100 frames from the buffer. F32 is planar, so ch[0] should be 1,
266 // 2, 3, 4, ..., ch[1] should be 101, 102, 103, ..., and so on for all 4 228 // 2, 3, 4, ..., ch[1] should be 101, 102, 103, ..., and so on for all 4
267 // channels. 229 // channels.
268 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 230 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
269 buffer->ReadFrames(frames, 0, 0, bus.get()); 231 buffer->ReadFrames(frames, 0, 0, bus.get());
270 VerifyResult(bus->channel(0), frames, 1.0f, 1.0f); 232 VerifyBus(bus.get(), frames, 1, 1);
271 VerifyResult(bus->channel(1), frames, 101.0f, 1.0f);
272 VerifyResult(bus->channel(2), frames, 201.0f, 1.0f);
273 VerifyResult(bus->channel(3), frames, 301.0f, 1.0f);
274 233
275 // Now read 20 frames from the middle of the buffer. 234 // Now read 20 frames from the middle of the buffer.
276 bus = AudioBus::Create(channels, 100); 235 bus->Zero();
277 buffer->ReadFrames(20, 50, 0, bus.get()); 236 buffer->ReadFrames(20, 50, 0, bus.get());
278 VerifyResult(bus->channel(0), 20, 51.0f, 1.0f); 237 VerifyBus(bus.get(), 20, 51, 1);
279 VerifyResult(bus->channel(1), 20, 151.0f, 1.0f);
280 VerifyResult(bus->channel(2), 20, 251.0f, 1.0f);
281 VerifyResult(bus->channel(3), 20, 351.0f, 1.0f);
282 } 238 }
283 239
284 TEST(AudioBufferTest, EmptyBuffer) { 240 TEST(AudioBufferTest, EmptyBuffer) {
285 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 241 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
286 const int channels = ChannelLayoutToChannelCount(channel_layout); 242 const int channels = ChannelLayoutToChannelCount(channel_layout);
287 const int frames = 100; 243 const int frames = kSampleRate / 100;
288 const base::TimeDelta start_time; 244 const base::TimeDelta start_time;
289 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
290 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEmptyBuffer( 245 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEmptyBuffer(
291 channel_layout, channels, kSampleRate, frames, start_time, duration); 246 channel_layout, channels, kSampleRate, frames, start_time);
292 EXPECT_EQ(frames, buffer->frame_count()); 247 EXPECT_EQ(frames, buffer->frame_count());
293 EXPECT_EQ(start_time, buffer->timestamp()); 248 EXPECT_EQ(start_time, buffer->timestamp());
294 EXPECT_EQ(frames, buffer->duration().InSeconds()); 249 EXPECT_EQ(base::TimeDelta::FromMilliseconds(10), buffer->duration());
295 EXPECT_FALSE(buffer->end_of_stream()); 250 EXPECT_FALSE(buffer->end_of_stream());
296 251
297 // Read all 100 frames from the buffer. All data should be 0. 252 // Read all 100 frames from the buffer. All data should be 0.
298 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 253 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
299 buffer->ReadFrames(frames, 0, 0, bus.get()); 254 buffer->ReadFrames(frames, 0, 0, bus.get());
300 VerifyResult(bus->channel(0), frames, 0.0f, 0.0f); 255 VerifyBus(bus.get(), frames, 0, 0);
301 VerifyResult(bus->channel(1), frames, 0.0f, 0.0f);
302 VerifyResult(bus->channel(2), frames, 0.0f, 0.0f);
303 VerifyResult(bus->channel(3), frames, 0.0f, 0.0f);
304 } 256 }
305 257
306 TEST(AudioBufferTest, Trim) { 258 TEST(AudioBufferTest, Trim) {
307 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 259 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
308 const int channels = ChannelLayoutToChannelCount(channel_layout); 260 const int channels = ChannelLayoutToChannelCount(channel_layout);
309 const int frames = 100; 261 const int frames = kSampleRate / 10;
310 const base::TimeDelta start_time; 262 const base::TimeDelta start_time;
311 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames); 263 const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100);
312 scoped_refptr<AudioBuffer> buffer = 264 scoped_refptr<AudioBuffer> buffer =
313 MakeAudioBuffer<float>(kSampleFormatPlanarF32, 265 MakeAudioBuffer<float>(kSampleFormatPlanarF32,
314 channel_layout, 266 channel_layout,
315 channels, 267 channels,
316 kSampleRate, 268 kSampleRate,
317 1.0f, 269 0.0f,
318 1.0f, 270 1.0f,
319 frames, 271 frames,
320 start_time, 272 start_time);
321 duration);
322 EXPECT_EQ(frames, buffer->frame_count()); 273 EXPECT_EQ(frames, buffer->frame_count());
323 EXPECT_EQ(start_time, buffer->timestamp()); 274 EXPECT_EQ(start_time, buffer->timestamp());
324 EXPECT_EQ(frames, buffer->duration().InSeconds()); 275 EXPECT_EQ(duration, buffer->duration());
325 276
326 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 277 const int ten_ms_of_frames = kSampleRate / 100;
327 buffer->ReadFrames(20, 0, 0, bus.get()); 278 const base::TimeDelta ten_ms = base::TimeDelta::FromMilliseconds(10);
328 VerifyResult(bus->channel(0), 20, 1.0f, 1.0f);
329 279
330 // Trim off 10 frames from the start. 280 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
331 buffer->TrimStart(10); 281 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
332 EXPECT_EQ(buffer->frame_count(), frames - 10); 282 VerifyBus(bus.get(), buffer->frame_count(), 0.0f, 1.0f);
333 EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(10));
334 EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(90));
335 buffer->ReadFrames(20, 0, 0, bus.get());
336 VerifyResult(bus->channel(0), 20, 11.0f, 1.0f);
337 283
338 // Trim off 10 frames from the end. 284 // Trim off 10ms of frames from the start.
339 buffer->TrimEnd(10); 285 buffer->TrimStart(ten_ms_of_frames);
340 EXPECT_EQ(buffer->frame_count(), frames - 20); 286 EXPECT_EQ(start_time + ten_ms, buffer->timestamp());
341 EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(10)); 287 EXPECT_EQ(frames - ten_ms_of_frames, buffer->frame_count());
342 EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(80)); 288 EXPECT_EQ(duration - ten_ms, buffer->duration());
343 buffer->ReadFrames(20, 0, 0, bus.get()); 289 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
344 VerifyResult(bus->channel(0), 20, 11.0f, 1.0f); 290 VerifyBus(bus.get(), buffer->frame_count(), ten_ms_of_frames, 1.0f);
345 291
346 // Trim off 50 more from the start. 292 // Trim off 10ms of frames from the end.
347 buffer->TrimStart(50); 293 buffer->TrimEnd(ten_ms_of_frames);
348 EXPECT_EQ(buffer->frame_count(), frames - 70); 294 EXPECT_EQ(start_time + ten_ms, buffer->timestamp());
349 EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(60)); 295 EXPECT_EQ(frames - 2 * ten_ms_of_frames, buffer->frame_count());
350 EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(30)); 296 EXPECT_EQ(duration - 2 * ten_ms, buffer->duration());
351 buffer->ReadFrames(10, 0, 0, bus.get()); 297 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
352 VerifyResult(bus->channel(0), 10, 61.0f, 1.0f); 298 VerifyBus(bus.get(), buffer->frame_count(), ten_ms_of_frames, 1.0f);
353 299
354 // Trim off the last 30 frames. 300 // Trim off 40ms more from the start.
355 buffer->TrimEnd(30); 301 buffer->TrimStart(4 * ten_ms_of_frames);
356 EXPECT_EQ(buffer->frame_count(), 0); 302 EXPECT_EQ(start_time + 5 * ten_ms, buffer->timestamp());
357 EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(60)); 303 EXPECT_EQ(frames - 6 * ten_ms_of_frames, buffer->frame_count());
358 EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(0)); 304 EXPECT_EQ(duration - 6 * ten_ms, buffer->duration());
305 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
306 VerifyBus(bus.get(), buffer->frame_count(), 5 * ten_ms_of_frames, 1.0f);
307
308 // Trim off the final 40ms from the end.
309 buffer->TrimEnd(4 * ten_ms_of_frames);
310 EXPECT_EQ(0, buffer->frame_count());
311 EXPECT_EQ(start_time + 5 * ten_ms, buffer->timestamp());
312 EXPECT_EQ(base::TimeDelta(), buffer->duration());
359 } 313 }
360 314
361 } // namespace media 315 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698