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

Side by Side Diff: media/base/audio_buffer_queue_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698