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

Side by Side 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, 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/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/strings/stringprintf.h"
9 #include "base/time/time.h" 8 #include "base/time/time.h"
10 #include "media/base/audio_buffer.h" 9 #include "media/base/audio_buffer.h"
11 #include "media/base/audio_buffer_queue.h" 10 #include "media/base/audio_buffer_queue.h"
12 #include "media/base/audio_bus.h" 11 #include "media/base/audio_bus.h"
13 #include "media/base/buffers.h" 12 #include "media/base/buffers.h"
14 #include "media/base/test_helpers.h" 13 #include "media/base/test_helpers.h"
15 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
16 15
17 namespace media { 16 namespace media {
18 17
19 const int kSampleRate = 44100; 18 const int kSampleRate = 44100;
20 19
21 static void VerifyResult(float* channel_data, 20 static void VerifyBus(AudioBus* bus,
22 int frames, 21 int offset,
23 float start, 22 int frames,
24 float increment) { 23 int buffer_size,
25 for (int i = 0; i < frames; ++i) { 24 float start,
26 SCOPED_TRACE(base::StringPrintf( 25 float increment) {
27 "i=%d/%d start=%f, increment=%f", i, frames, start, increment)); 26 for (int ch = 0; ch < bus->channels(); ++ch) {
28 ASSERT_EQ(start, channel_data[i]); 27 const float v = start + ch * buffer_size * increment;
29 start += increment; 28 for (int i = offset; i < frames; ++i) {
29 ASSERT_FLOAT_EQ(v + (i - offset) * increment, bus->channel(ch)[i])
30 << "i=" << i << ", ch=" << ch;
31 }
30 } 32 }
31 } 33 }
32 34
33 template <typename T> 35 template <typename T>
34 static scoped_refptr<AudioBuffer> MakeTestBuffer(SampleFormat format, 36 static scoped_refptr<AudioBuffer> MakeTestBuffer(SampleFormat format,
35 ChannelLayout channel_layout, 37 ChannelLayout channel_layout,
36 T start, 38 T start,
37 T end, 39 T step,
38 int frames) { 40 int frames) {
39 const base::TimeDelta kNoTime = kNoTimestamp();
40 return MakeAudioBuffer<T>(format, 41 return MakeAudioBuffer<T>(format,
41 channel_layout, 42 channel_layout,
42 ChannelLayoutToChannelCount(channel_layout), 43 ChannelLayoutToChannelCount(channel_layout),
43 kSampleRate, 44 kSampleRate,
44 start, 45 start,
45 end, 46 step,
46 frames, 47 frames,
47 kNoTime, 48 kNoTimestamp());
48 kNoTime);
49 } 49 }
50 50
51 TEST(AudioBufferQueueTest, AppendAndClear) { 51 TEST(AudioBufferQueueTest, AppendAndClear) {
52 const ChannelLayout channel_layout = CHANNEL_LAYOUT_MONO; 52 const ChannelLayout channel_layout = CHANNEL_LAYOUT_MONO;
53 AudioBufferQueue buffer; 53 AudioBufferQueue buffer;
54 EXPECT_EQ(0, buffer.frames()); 54 EXPECT_EQ(0, buffer.frames());
55 buffer.Append( 55 buffer.Append(
56 MakeTestBuffer<uint8>(kSampleFormatU8, channel_layout, 10, 1, 8)); 56 MakeTestBuffer<uint8>(kSampleFormatU8, channel_layout, 10, 1, 8));
57 EXPECT_EQ(8, buffer.frames()); 57 EXPECT_EQ(8, buffer.frames());
58 buffer.Clear(); 58 buffer.Clear();
(...skipping 30 matching lines...) Expand all
89 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 89 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
90 90
91 // Append 40 frames in 5 buffers. Intersperse ReadFrames() to make the 91 // Append 40 frames in 5 buffers. Intersperse ReadFrames() to make the
92 // iterator is pointing to the correct position. 92 // iterator is pointing to the correct position.
93 buffer.Append(MakeTestBuffer<float>( 93 buffer.Append(MakeTestBuffer<float>(
94 kSampleFormatF32, channel_layout, 10.0f, 1.0f, 8)); 94 kSampleFormatF32, channel_layout, 10.0f, 1.0f, 8));
95 EXPECT_EQ(8, buffer.frames()); 95 EXPECT_EQ(8, buffer.frames());
96 96
97 EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get())); 97 EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get()));
98 EXPECT_EQ(4, buffer.frames()); 98 EXPECT_EQ(4, buffer.frames());
99 VerifyResult(bus->channel(0), 4, 10.0f, 1.0f); 99 VerifyBus(bus.get(), 0, 4, bus->frames(), 10, 1);
100 100
101 buffer.Append(MakeTestBuffer<float>( 101 buffer.Append(MakeTestBuffer<float>(
102 kSampleFormatF32, channel_layout, 20.0f, 1.0f, 8)); 102 kSampleFormatF32, channel_layout, 20.0f, 1.0f, 8));
103 EXPECT_EQ(12, buffer.frames()); 103 EXPECT_EQ(12, buffer.frames());
104 buffer.Append(MakeTestBuffer<float>( 104 buffer.Append(MakeTestBuffer<float>(
105 kSampleFormatF32, channel_layout, 30.0f, 1.0f, 8)); 105 kSampleFormatF32, channel_layout, 30.0f, 1.0f, 8));
106 EXPECT_EQ(20, buffer.frames()); 106 EXPECT_EQ(20, buffer.frames());
107 107
108 buffer.SeekFrames(16); 108 buffer.SeekFrames(16);
109 EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get())); 109 EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get()));
110 EXPECT_EQ(0, buffer.frames()); 110 EXPECT_EQ(0, buffer.frames());
111 VerifyResult(bus->channel(0), 4, 34.0f, 1.0f); 111 VerifyBus(bus.get(), 0, 4, bus->frames(), 34, 1);
112 112
113 buffer.Append(MakeTestBuffer<float>( 113 buffer.Append(MakeTestBuffer<float>(
114 kSampleFormatF32, channel_layout, 40.0f, 1.0f, 8)); 114 kSampleFormatF32, channel_layout, 40.0f, 1.0f, 8));
115 EXPECT_EQ(8, buffer.frames()); 115 EXPECT_EQ(8, buffer.frames());
116 buffer.Append(MakeTestBuffer<float>( 116 buffer.Append(MakeTestBuffer<float>(
117 kSampleFormatF32, channel_layout, 50.0f, 1.0f, 8)); 117 kSampleFormatF32, channel_layout, 50.0f, 1.0f, 8));
118 EXPECT_EQ(16, buffer.frames()); 118 EXPECT_EQ(16, buffer.frames());
119 119
120 EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get())); 120 EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get()));
121 VerifyResult(bus->channel(0), 4, 40.0f, 1.0f); 121 VerifyBus(bus.get(), 0, 4, bus->frames(), 40, 1);
122 122
123 // Read off the end of the buffer. 123 // Read off the end of the buffer.
124 EXPECT_EQ(12, buffer.frames()); 124 EXPECT_EQ(12, buffer.frames());
125 buffer.SeekFrames(8); 125 buffer.SeekFrames(8);
126 EXPECT_EQ(4, buffer.ReadFrames(100, 0, bus.get())); 126 EXPECT_EQ(4, buffer.ReadFrames(100, 0, bus.get()));
127 VerifyResult(bus->channel(0), 4, 54.0f, 1.0f); 127 VerifyBus(bus.get(), 0, 4, bus->frames(), 54, 1);
128 } 128 }
129 129
130 TEST(AudioBufferQueueTest, Seek) { 130 TEST(AudioBufferQueueTest, Seek) {
131 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 131 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
132 AudioBufferQueue buffer; 132 AudioBufferQueue buffer;
133 133
134 // Add 6 frames of data. 134 // Add 6 frames of data.
135 buffer.Append(MakeTestBuffer<float>( 135 buffer.Append(MakeTestBuffer<float>(
136 kSampleFormatF32, channel_layout, 1.0f, 1.0f, 6)); 136 kSampleFormatF32, channel_layout, 1.0f, 1.0f, 6));
137 EXPECT_EQ(6, buffer.frames()); 137 EXPECT_EQ(6, buffer.frames());
(...skipping 17 matching lines...) Expand all
155 155
156 // Add 76 frames of data. 156 // Add 76 frames of data.
157 buffer.Append( 157 buffer.Append(
158 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 1.0f, 1.0f, 6)); 158 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 1.0f, 1.0f, 6));
159 buffer.Append( 159 buffer.Append(
160 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 13.0f, 1.0f, 10)); 160 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 13.0f, 1.0f, 10));
161 buffer.Append( 161 buffer.Append(
162 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 33.0f, 1.0f, 60)); 162 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 33.0f, 1.0f, 60));
163 EXPECT_EQ(76, buffer.frames()); 163 EXPECT_EQ(76, buffer.frames());
164 164
165 // Read 3 frames from the buffer. F32 is interleaved, so ch[0] should be 165 // Read 3 frames from the buffer.
166 // 1, 3, 5, and ch[1] should be 2, 4, 6.
167 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 166 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
168 EXPECT_EQ(3, buffer.ReadFrames(3, 0, bus.get())); 167 EXPECT_EQ(3, buffer.ReadFrames(3, 0, bus.get()));
169 EXPECT_EQ(73, buffer.frames()); 168 EXPECT_EQ(73, buffer.frames());
170 VerifyResult(bus->channel(0), 3, 1.0f, 2.0f); 169 VerifyBus(bus.get(), 0, 3, 6, 1, 1);
171 VerifyResult(bus->channel(1), 3, 2.0f, 2.0f);
172 170
173 // Now read 5 frames, which will span buffers. Append the data into AudioBus. 171 // Now read 5 frames, which will span buffers. Append the data into AudioBus.
174 EXPECT_EQ(5, buffer.ReadFrames(5, 3, bus.get())); 172 EXPECT_EQ(5, buffer.ReadFrames(5, 3, bus.get()));
175 EXPECT_EQ(68, buffer.frames()); 173 EXPECT_EQ(68, buffer.frames());
176 VerifyResult(bus->channel(0), 8, 1.0f, 2.0f); 174 VerifyBus(bus.get(), 0, 6, 6, 1, 1);
177 VerifyResult(bus->channel(1), 8, 2.0f, 2.0f); 175 VerifyBus(bus.get(), 6, 2, 10, 13, 1);
178 176
179 // Now skip into the third buffer. 177 // Now skip into the third buffer.
180 buffer.SeekFrames(20); 178 buffer.SeekFrames(20);
181 EXPECT_EQ(48, buffer.frames()); 179 EXPECT_EQ(48, buffer.frames());
182 180
183 // Now read 2 frames, which are in the third buffer. 181 // Now read 2 frames, which are in the third buffer.
184 EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get())); 182 EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get()));
185 VerifyResult(bus->channel(0), 2, 57.0f, 2.0f); 183 VerifyBus(bus.get(), 0, 2, 60, 45, 1);
186 VerifyResult(bus->channel(1), 2, 58.0f, 2.0f);
187 } 184 }
188 185
189 TEST(AudioBufferQueueTest, ReadU8) { 186 TEST(AudioBufferQueueTest, ReadU8) {
190 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 187 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
191 const int channels = ChannelLayoutToChannelCount(channel_layout); 188 const int channels = ChannelLayoutToChannelCount(channel_layout);
189 const int frames = 4;
192 AudioBufferQueue buffer; 190 AudioBufferQueue buffer;
193 191
194 // Add 4 frames of data. 192 // Add 4 frames of data.
195 buffer.Append( 193 buffer.Append(
196 MakeTestBuffer<uint8>(kSampleFormatU8, channel_layout, 128, 1, 4)); 194 MakeTestBuffer<uint8>(kSampleFormatU8, channel_layout, 128, 1, frames));
197 195
198 // Read all 4 frames from the buffer. Data is interleaved, so ch[0] should be 196 // Read all 4 frames from the buffer.
199 // 128, 132, 136, 140, other channels similar. However, values are converted 197 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
200 // from [0, 255] to [-1.0, 1.0] with a bias of 128. Thus the first buffer 198 EXPECT_EQ(frames, buffer.ReadFrames(frames, 0, bus.get()));
201 // value should be 0.0, then 1/127, 2/127, etc.
202 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
203 EXPECT_EQ(4, buffer.ReadFrames(4, 0, bus.get()));
204 EXPECT_EQ(0, buffer.frames()); 199 EXPECT_EQ(0, buffer.frames());
205 VerifyResult(bus->channel(0), 4, 0.0f, 4.0f / 127.0f); 200 VerifyBus(bus.get(), 0, frames, bus->frames(), 0, 1.0f / 127.0f);
206 VerifyResult(bus->channel(1), 4, 1.0f / 127.0f, 4.0f / 127.0f);
207 VerifyResult(bus->channel(2), 4, 2.0f / 127.0f, 4.0f / 127.0f);
208 VerifyResult(bus->channel(3), 4, 3.0f / 127.0f, 4.0f / 127.0f);
209 } 201 }
210 202
211 TEST(AudioBufferQueueTest, ReadS16) { 203 TEST(AudioBufferQueueTest, ReadS16) {
212 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 204 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
213 const int channels = ChannelLayoutToChannelCount(channel_layout); 205 const int channels = ChannelLayoutToChannelCount(channel_layout);
214 AudioBufferQueue buffer; 206 AudioBufferQueue buffer;
215 207
216 // Add 24 frames of data. 208 // Add 24 frames of data.
217 buffer.Append( 209 buffer.Append(
218 MakeTestBuffer<int16>(kSampleFormatS16, channel_layout, 1, 1, 4)); 210 MakeTestBuffer<int16>(kSampleFormatS16, channel_layout, 1, 1, 4));
219 buffer.Append( 211 buffer.Append(
220 MakeTestBuffer<int16>(kSampleFormatS16, channel_layout, 9, 1, 20)); 212 MakeTestBuffer<int16>(kSampleFormatS16, channel_layout, 9, 1, 20));
221 EXPECT_EQ(24, buffer.frames()); 213 EXPECT_EQ(24, buffer.frames());
222 214
223 // Read 6 frames from the buffer. Data is interleaved, so ch[0] should be 215 // Read 6 frames from the buffer.
224 // 1, 3, 5, 7, 9, 11, and ch[1] should be 2, 4, 6, 8, 10, 12. 216 const int frames = 6;
225 // Data is converted to float from -1.0 to 1.0 based on int16 range. 217 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, buffer.frames());
226 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 218 EXPECT_EQ(frames, buffer.ReadFrames(frames, 0, bus.get()));
227 EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get()));
228 EXPECT_EQ(18, buffer.frames()); 219 EXPECT_EQ(18, buffer.frames());
229 VerifyResult(bus->channel(0), 6, 1.0f / kint16max, 2.0f / kint16max); 220 VerifyBus(bus.get(), 0, 4, 4, 1.0f / kint16max, 1.0f / kint16max);
230 VerifyResult(bus->channel(1), 6, 2.0f / kint16max, 2.0f / kint16max); 221 VerifyBus(bus.get(), 4, 2, 20, 9.0f / kint16max, 1.0f / kint16max);
231 } 222 }
232 223
233 TEST(AudioBufferQueueTest, ReadS32) { 224 TEST(AudioBufferQueueTest, ReadS32) {
234 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 225 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
235 const int channels = ChannelLayoutToChannelCount(channel_layout); 226 const int channels = ChannelLayoutToChannelCount(channel_layout);
236 AudioBufferQueue buffer; 227 AudioBufferQueue buffer;
237 228
238 // Add 24 frames of data. 229 // Add 24 frames of data.
239 buffer.Append( 230 buffer.Append(
240 MakeTestBuffer<int32>(kSampleFormatS32, channel_layout, 1, 1, 4)); 231 MakeTestBuffer<int32>(kSampleFormatS32, channel_layout, 1, 1, 4));
241 buffer.Append( 232 buffer.Append(
242 MakeTestBuffer<int32>(kSampleFormatS32, channel_layout, 9, 1, 20)); 233 MakeTestBuffer<int32>(kSampleFormatS32, channel_layout, 9, 1, 20));
243 EXPECT_EQ(24, buffer.frames()); 234 EXPECT_EQ(24, buffer.frames());
244 235
245 // Read 6 frames from the buffer. Data is interleaved, so ch[0] should be 236 // Read 6 frames from the buffer.
246 // 1, 3, 5, 7, 100, 106, and ch[1] should be 2, 4, 6, 8, 103, 109.
247 // Data is converted to float from -1.0 to 1.0 based on int32 range.
248 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 237 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
249 EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get())); 238 EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get()));
250 EXPECT_EQ(18, buffer.frames()); 239 EXPECT_EQ(18, buffer.frames());
251 VerifyResult(bus->channel(0), 6, 1.0f / kint32max, 2.0f / kint32max); 240 VerifyBus(bus.get(), 0, 4, 4, 1.0f / kint32max, 1.0f / kint32max);
252 VerifyResult(bus->channel(1), 6, 2.0f / kint32max, 2.0f / kint32max); 241 VerifyBus(bus.get(), 4, 2, 20, 9.0f / kint32max, 1.0f / kint32max);
253 242
254 // Read the next 2 frames. 243 // Read the next 2 frames.
255 EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get())); 244 EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get()));
256 EXPECT_EQ(16, buffer.frames()); 245 EXPECT_EQ(16, buffer.frames());
257 VerifyResult(bus->channel(0), 2, 13.0f / kint32max, 2.0f / kint32max); 246 VerifyBus(bus.get(), 0, 2, 20, 11.0f / kint32max, 1.0f / kint32max);
258 VerifyResult(bus->channel(1), 2, 14.0f / kint32max, 2.0f / kint32max);
259 } 247 }
260 248
261 TEST(AudioBufferQueueTest, ReadF32Planar) { 249 TEST(AudioBufferQueueTest, ReadF32Planar) {
262 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 250 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
263 const int channels = ChannelLayoutToChannelCount(channel_layout); 251 const int channels = ChannelLayoutToChannelCount(channel_layout);
264 AudioBufferQueue buffer; 252 AudioBufferQueue buffer;
265 253
266 // Add 14 frames of data. 254 // Add 14 frames of data.
267 buffer.Append(MakeTestBuffer<float>( 255 buffer.Append(MakeTestBuffer<float>(
268 kSampleFormatPlanarF32, channel_layout, 1.0f, 1.0f, 4)); 256 kSampleFormatPlanarF32, channel_layout, 1.0f, 1.0f, 4));
269 buffer.Append(MakeTestBuffer<float>( 257 buffer.Append(MakeTestBuffer<float>(
270 kSampleFormatPlanarF32, channel_layout, 50.0f, 1.0f, 10)); 258 kSampleFormatPlanarF32, channel_layout, 50.0f, 1.0f, 10));
271 EXPECT_EQ(14, buffer.frames()); 259 EXPECT_EQ(14, buffer.frames());
272 260
273 // Read 6 frames from the buffer. F32 is planar, so ch[0] should be 261 // Read 6 frames from the buffer.
274 // 1, 2, 3, 4, 50, 51, and ch[1] should be 5, 6, 7, 8, 60, 61.
275 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 262 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
276 EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get())); 263 EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get()));
277 EXPECT_EQ(8, buffer.frames()); 264 EXPECT_EQ(8, buffer.frames());
278 VerifyResult(bus->channel(0), 4, 1.0f, 1.0f); 265 VerifyBus(bus.get(), 0, 4, 4, 1, 1);
279 VerifyResult(bus->channel(0) + 4, 2, 50.0f, 1.0f); 266 VerifyBus(bus.get(), 4, 2, 10, 50, 1);
280 VerifyResult(bus->channel(1), 4, 5.0f, 1.0f);
281 VerifyResult(bus->channel(1) + 4, 2, 60.0f, 1.0f);
282 } 267 }
283 268
284 TEST(AudioBufferQueueTest, ReadS16Planar) { 269 TEST(AudioBufferQueueTest, ReadS16Planar) {
285 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 270 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
286 const int channels = ChannelLayoutToChannelCount(channel_layout); 271 const int channels = ChannelLayoutToChannelCount(channel_layout);
287 AudioBufferQueue buffer; 272 AudioBufferQueue buffer;
288 273
289 // Add 24 frames of data. 274 // Add 24 frames of data.
290 buffer.Append( 275 buffer.Append(
291 MakeTestBuffer<int16>(kSampleFormatPlanarS16, channel_layout, 1, 1, 4)); 276 MakeTestBuffer<int16>(kSampleFormatPlanarS16, channel_layout, 1, 1, 4));
292 buffer.Append(MakeTestBuffer<int16>( 277 buffer.Append(MakeTestBuffer<int16>(
293 kSampleFormatPlanarS16, channel_layout, 100, 5, 20)); 278 kSampleFormatPlanarS16, channel_layout, 100, 5, 20));
294 EXPECT_EQ(24, buffer.frames()); 279 EXPECT_EQ(24, buffer.frames());
295 280
296 // Read 6 frames from the buffer. Data is planar, so ch[0] should be 281 // Read 6 frames from the buffer.
297 // 1, 2, 3, 4, 100, 105, and ch[1] should be 5, 6, 7, 8, 200, 205.
298 // Data is converted to float from -1.0 to 1.0 based on int16 range.
299 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 282 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
300 EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get())); 283 EXPECT_EQ(6, buffer.ReadFrames(6, 0, bus.get()));
301 EXPECT_EQ(18, buffer.frames()); 284 EXPECT_EQ(18, buffer.frames());
302 VerifyResult(bus->channel(0), 4, 1.0f / kint16max, 1.0f / kint16max); 285 VerifyBus(bus.get(), 0, 4, 4, 1.0f / kint16max, 1.0f / kint16max);
303 VerifyResult(bus->channel(0) + 4, 2, 100.0f / kint16max, 5.0f / kint16max); 286 VerifyBus(bus.get(), 4, 2, 20, 5.0f / kint16max, 1.0f / kint16max);
304 VerifyResult(bus->channel(1), 4, 5.0f / kint16max, 1.0f / kint16max);
305 VerifyResult(bus->channel(1) + 4, 2, 200.0f / kint16max, 5.0f / kint16max);
306 } 287 }
307 288
308 TEST(AudioBufferQueueTest, ReadManyChannels) { 289 TEST(AudioBufferQueueTest, ReadManyChannels) {
309 const ChannelLayout channel_layout = CHANNEL_LAYOUT_OCTAGONAL; 290 const ChannelLayout channel_layout = CHANNEL_LAYOUT_OCTAGONAL;
310 const int channels = ChannelLayoutToChannelCount(channel_layout); 291 const int channels = ChannelLayoutToChannelCount(channel_layout);
311 AudioBufferQueue buffer; 292 AudioBufferQueue buffer;
312 293
313 // Add 76 frames of data. 294 // Add 76 frames of data.
314 buffer.Append( 295 buffer.Append(
315 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 0.0f, 1.0f, 6)); 296 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 0.0f, 1.0f, 6));
316 buffer.Append(MakeTestBuffer<float>( 297 buffer.Append(MakeTestBuffer<float>(
317 kSampleFormatF32, channel_layout, 6.0f * channels, 1.0f, 10)); 298 kSampleFormatF32, channel_layout, 6.0f * channels, 1.0f, 10));
318 buffer.Append(MakeTestBuffer<float>( 299 buffer.Append(MakeTestBuffer<float>(
319 kSampleFormatF32, channel_layout, 16.0f * channels, 1.0f, 60)); 300 kSampleFormatF32, channel_layout, 16.0f * channels, 1.0f, 60));
320 EXPECT_EQ(76, buffer.frames()); 301 EXPECT_EQ(76, buffer.frames());
321 302
322 // Read 3 frames from the buffer. F32 is interleaved, so ch[0] should be 303 // Read 3 frames from the buffer.
323 // 1, 17, 33, and ch[1] should be 2, 18, 34. Just check a few channels.
324 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 304 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
325 EXPECT_EQ(30, buffer.ReadFrames(30, 0, bus.get())); 305 EXPECT_EQ(30, buffer.ReadFrames(30, 0, bus.get()));
326 EXPECT_EQ(46, buffer.frames()); 306 EXPECT_EQ(46, buffer.frames());
327 for (int i = 0; i < channels; ++i) { 307 VerifyBus(bus.get(), 0, 6, 6, 0, 1);
328 VerifyResult(bus->channel(i), 30, static_cast<float>(i), 8.0f); 308 VerifyBus(bus.get(), 6, 10, 10, 6 * channels, 1);
329 } 309 VerifyBus(bus.get(), 16, 14, 60, 16 * channels, 1);
330 } 310 }
331 311
332 TEST(AudioBufferQueueTest, Peek) { 312 TEST(AudioBufferQueueTest, Peek) {
333 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 313 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
334 const int channels = ChannelLayoutToChannelCount(channel_layout); 314 const int channels = ChannelLayoutToChannelCount(channel_layout);
335 AudioBufferQueue buffer; 315 AudioBufferQueue buffer;
336 316
337 // Add 60 frames of data. 317 // Add 60 frames of data.
338 buffer.Append( 318 const int frames = 60;
339 MakeTestBuffer<float>(kSampleFormatF32, channel_layout, 0.0f, 1.0f, 60)); 319 buffer.Append(MakeTestBuffer<float>(
340 EXPECT_EQ(60, buffer.frames()); 320 kSampleFormatF32, channel_layout, 0.0f, 1.0f, frames));
321 EXPECT_EQ(frames, buffer.frames());
341 322
342 // Peek at the first 30 frames. 323 // Peek at the first 30 frames.
343 scoped_ptr<AudioBus> bus1 = AudioBus::Create(channels, 100); 324 scoped_ptr<AudioBus> bus1 = AudioBus::Create(channels, frames);
344 EXPECT_EQ(60, buffer.frames()); 325 EXPECT_EQ(frames, buffer.frames());
345 EXPECT_EQ(60, buffer.PeekFrames(100, 0, 0, bus1.get())); 326 EXPECT_EQ(frames, buffer.PeekFrames(60, 0, 0, bus1.get()));
346 EXPECT_EQ(30, buffer.PeekFrames(30, 0, 0, bus1.get())); 327 EXPECT_EQ(30, buffer.PeekFrames(30, 0, 0, bus1.get()));
347 EXPECT_EQ(60, buffer.frames()); 328 EXPECT_EQ(frames, buffer.frames());
329 VerifyBus(bus1.get(), 0, 30, bus1->frames(), 0, 1);
348 330
349 // Now read the next 30 frames (which should be the same as those peeked at). 331 // Now read the next 30 frames (which should be the same as those peeked at).
350 scoped_ptr<AudioBus> bus2 = AudioBus::Create(channels, 100); 332 scoped_ptr<AudioBus> bus2 = AudioBus::Create(channels, frames);
351 EXPECT_EQ(30, buffer.ReadFrames(30, 0, bus2.get())); 333 EXPECT_EQ(30, buffer.ReadFrames(30, 0, bus2.get()));
352 for (int i = 0; i < channels; ++i) { 334 VerifyBus(bus2.get(), 0, 30, bus2->frames(), 0, 1);
353 VerifyResult(bus1->channel(i),
354 30,
355 static_cast<float>(i),
356 static_cast<float>(channels));
357 VerifyResult(bus2->channel(i),
358 30,
359 static_cast<float>(i),
360 static_cast<float>(channels));
361 }
362 335
363 // Peek 10 frames forward 336 // Peek 10 frames forward
337 bus1->Zero();
364 EXPECT_EQ(5, buffer.PeekFrames(5, 10, 0, bus1.get())); 338 EXPECT_EQ(5, buffer.PeekFrames(5, 10, 0, bus1.get()));
365 for (int i = 0; i < channels; ++i) { 339 VerifyBus(bus1.get(), 0, 5, bus1->frames(), 40, 1);
366 VerifyResult(bus1->channel(i),
367 5,
368 static_cast<float>(i + 40 * channels),
369 static_cast<float>(channels));
370 }
371 340
372 // Peek to the end of the buffer. 341 // Peek to the end of the buffer.
373 EXPECT_EQ(30, buffer.frames()); 342 EXPECT_EQ(30, buffer.frames());
374 EXPECT_EQ(30, buffer.PeekFrames(100, 0, 0, bus1.get())); 343 EXPECT_EQ(30, buffer.PeekFrames(60, 0, 0, bus1.get()));
375 EXPECT_EQ(30, buffer.PeekFrames(30, 0, 0, bus1.get())); 344 EXPECT_EQ(30, buffer.PeekFrames(30, 0, 0, bus1.get()));
376 } 345 }
377 346
378 TEST(AudioBufferQueueTest, Time) { 347 TEST(AudioBufferQueueTest, Time) {
379 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 348 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
380 const int channels = ChannelLayoutToChannelCount(channel_layout); 349 const int channels = ChannelLayoutToChannelCount(channel_layout);
381 const base::TimeDelta start_time1; 350 const base::TimeDelta start_time1;
382 const base::TimeDelta start_time2 = base::TimeDelta::FromSeconds(30); 351 const base::TimeDelta start_time2 = base::TimeDelta::FromSeconds(30);
383 const base::TimeDelta duration = base::TimeDelta::FromSeconds(10);
384 AudioBufferQueue buffer; 352 AudioBufferQueue buffer;
385 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 353 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
386 354
355 scoped_refptr<AudioBuffer> audio_buffer =
356 MakeAudioBuffer<int16>(kSampleFormatS16,
357 channel_layout,
358 channels,
359 kSampleRate,
360 1,
361 1,
362 10,
363 start_time1);
364
387 // Add two buffers (second one added later): 365 // Add two buffers (second one added later):
388 // first: start=0s, duration=10s 366 // first: start=0s, duration=10s
389 // second: start=30s, duration=10s 367 // second: start=30s, duration=10s
390 buffer.Append(MakeAudioBuffer<int16>(kSampleFormatS16, 368 buffer.Append(audio_buffer);
391 channel_layout,
392 channels,
393 kSampleRate,
394 1,
395 1,
396 10,
397 start_time1,
398 duration));
399 EXPECT_EQ(10, buffer.frames()); 369 EXPECT_EQ(10, buffer.frames());
400 370
401 // Check starting time. 371 // Check starting time.
402 EXPECT_EQ(start_time1, buffer.current_time()); 372 EXPECT_EQ(start_time1, buffer.current_time());
403 373
404 // Read 2 frames, should be 2s in (since duration is 1s per sample). 374 // Read 2 frames, should be 2s in (since duration is 1s per sample).
405 EXPECT_EQ(2, buffer.ReadFrames(2, 0, bus.get())); 375 int frames_read = 2;
406 EXPECT_EQ(start_time1 + base::TimeDelta::FromSeconds(2), 376 EXPECT_EQ(frames_read, buffer.ReadFrames(frames_read, 0, bus.get()));
407 buffer.current_time()); 377 EXPECT_EQ(
378 start_time1 +
379 frames_read * audio_buffer->duration() / audio_buffer->frame_count(),
380 buffer.current_time());
408 381
409 // Skip 2 frames. 382 // Skip 2 frames.
410 buffer.SeekFrames(2); 383 buffer.SeekFrames(2);
411 EXPECT_EQ(start_time1 + base::TimeDelta::FromSeconds(4), 384 frames_read += 2;
412 buffer.current_time()); 385 EXPECT_EQ(
386 start_time1 +
387 frames_read * audio_buffer->duration() / audio_buffer->frame_count(),
388 buffer.current_time());
413 389
414 // Add second buffer for more data. 390 // Add second buffer for more data.
415 buffer.Append(MakeAudioBuffer<int16>(kSampleFormatS16, 391 buffer.Append(MakeAudioBuffer<int16>(kSampleFormatS16,
416 channel_layout, 392 channel_layout,
417 channels, 393 channels,
418 kSampleRate, 394 kSampleRate,
419 1, 395 1,
420 1, 396 1,
421 10, 397 10,
422 start_time2, 398 start_time2));
423 duration));
424 EXPECT_EQ(16, buffer.frames()); 399 EXPECT_EQ(16, buffer.frames());
425 400
426 // Read until almost the end of buffer1. 401 // Read until almost the end of buffer1.
402 frames_read += 5;
427 EXPECT_EQ(5, buffer.ReadFrames(5, 0, bus.get())); 403 EXPECT_EQ(5, buffer.ReadFrames(5, 0, bus.get()));
428 EXPECT_EQ(start_time1 + base::TimeDelta::FromSeconds(9), 404 EXPECT_EQ(
429 buffer.current_time()); 405 start_time1 +
406 frames_read * audio_buffer->duration() / audio_buffer->frame_count(),
407 buffer.current_time());
430 408
431 // Read 1 value, so time moved to buffer2. 409 // Read 1 value, so time moved to buffer2.
432 EXPECT_EQ(1, buffer.ReadFrames(1, 0, bus.get())); 410 EXPECT_EQ(1, buffer.ReadFrames(1, 0, bus.get()));
433 EXPECT_EQ(start_time2, buffer.current_time()); 411 EXPECT_EQ(start_time2, buffer.current_time());
434 412
435 // Read all 10 frames in buffer2, timestamp should be last time from buffer2. 413 // Read all 10 frames in buffer2, timestamp should be last time from buffer2.
414 frames_read = 10;
436 EXPECT_EQ(10, buffer.ReadFrames(10, 0, bus.get())); 415 EXPECT_EQ(10, buffer.ReadFrames(10, 0, bus.get()));
437 EXPECT_EQ(start_time2 + base::TimeDelta::FromSeconds(10), 416 const base::TimeDelta expected_current_time =
438 buffer.current_time()); 417 start_time2 +
418 frames_read * audio_buffer->duration() / audio_buffer->frame_count();
419 EXPECT_EQ(expected_current_time, buffer.current_time());
439 420
440 // Try to read more frames (which don't exist), timestamp should remain. 421 // Try to read more frames (which don't exist), timestamp should remain.
441 EXPECT_EQ(0, buffer.ReadFrames(5, 0, bus.get())); 422 EXPECT_EQ(0, buffer.ReadFrames(5, 0, bus.get()));
442 EXPECT_EQ(start_time2 + base::TimeDelta::FromSeconds(10), 423 EXPECT_EQ(expected_current_time, buffer.current_time());
443 buffer.current_time());
444 } 424 }
445 425
446 TEST(AudioBufferQueueTest, NoTime) { 426 TEST(AudioBufferQueueTest, NoTime) {
447 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 427 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
448 const int channels = ChannelLayoutToChannelCount(channel_layout); 428 const int channels = ChannelLayoutToChannelCount(channel_layout);
449 const base::TimeDelta kNoTime = kNoTimestamp(); 429 const base::TimeDelta kNoTime = kNoTimestamp();
450 AudioBufferQueue buffer; 430 AudioBufferQueue buffer;
451 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 431 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
452 432
453 // Add two buffers with no timestamps. Time should always be unknown. 433 // Add two buffers with no timestamps. Time should always be unknown.
(...skipping 25 matching lines...) Expand all
479 // Read all 10 frames in buffer2. 459 // Read all 10 frames in buffer2.
480 EXPECT_EQ(10, buffer.ReadFrames(10, 0, bus.get())); 460 EXPECT_EQ(10, buffer.ReadFrames(10, 0, bus.get()));
481 EXPECT_EQ(kNoTime, buffer.current_time()); 461 EXPECT_EQ(kNoTime, buffer.current_time());
482 462
483 // Try to read more frames (which don't exist), timestamp should remain. 463 // Try to read more frames (which don't exist), timestamp should remain.
484 EXPECT_EQ(0, buffer.ReadFrames(5, 0, bus.get())); 464 EXPECT_EQ(0, buffer.ReadFrames(5, 0, bus.get()));
485 EXPECT_EQ(kNoTime, buffer.current_time()); 465 EXPECT_EQ(kNoTime, buffer.current_time());
486 } 466 }
487 467
488 } // namespace media 468 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698