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

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

Issue 1475783002: Remove kint8min, kint8max, and kint16min. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « media/base/audio_bus.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <stdint.h>
6
7 #include <limits>
8
5 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
6 #include "base/time/time.h" 10 #include "base/time/time.h"
7 #include "build/build_config.h" 11 #include "build/build_config.h"
8 #include "media/audio/audio_parameters.h" 12 #include "media/audio/audio_parameters.h"
9 #include "media/base/audio_bus.h" 13 #include "media/base/audio_bus.h"
10 #include "media/base/channel_layout.h" 14 #include "media/base/channel_layout.h"
11 #include "media/base/fake_audio_render_callback.h" 15 #include "media/base/fake_audio_render_callback.h"
12 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
13 17
14 namespace media { 18 namespace media {
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 for (int i = 0; i < bus->channels(); ++i) { 244 for (int i = 0; i < bus->channels(); ++i) {
241 SCOPED_TRACE("All Zero"); 245 SCOPED_TRACE("All Zero");
242 VerifyValue(bus->channel(i), bus->frames(), 0); 246 VerifyValue(bus->channel(i), bus->frames(), 0);
243 } 247 }
244 EXPECT_TRUE(bus->AreFramesZero()); 248 EXPECT_TRUE(bus->AreFramesZero());
245 } 249 }
246 250
247 // Each test vector represents two channels of data in the following arbitrary 251 // Each test vector represents two channels of data in the following arbitrary
248 // layout: <min, zero, max, min, max / 2, min / 2, zero, max, zero, zero>. 252 // layout: <min, zero, max, min, max / 2, min / 2, zero, max, zero, zero>.
249 static const int kTestVectorSize = 10; 253 static const int kTestVectorSize = 10;
250 static const uint8 kTestVectorUint8[kTestVectorSize] = { 254 static const uint8_t kTestVectorUint8[kTestVectorSize] = {
251 0, -kint8min, kuint8max, 0, kint8max / 2 + 128, kint8min / 2 + 128, 255 0, -INT8_MIN, UINT8_MAX,
252 -kint8min, kuint8max, -kint8min, -kint8min }; 256 0, INT8_MAX / 2 + 128, INT8_MIN / 2 + 128,
253 static const int16 kTestVectorInt16[kTestVectorSize] = { 257 -INT8_MIN, UINT8_MAX, -INT8_MIN,
254 kint16min, 0, kint16max, kint16min, kint16max / 2, kint16min / 2, 258 -INT8_MIN};
255 0, kint16max, 0, 0 }; 259 static const int16_t kTestVectorInt16[kTestVectorSize] = {
256 static const int32 kTestVectorInt32[kTestVectorSize] = { 260 INT16_MIN, 0, INT16_MAX, INT16_MIN, INT16_MAX / 2,
257 kint32min, 0, kint32max, kint32min, kint32max / 2, kint32min / 2, 261 INT16_MIN / 2, 0, INT16_MAX, 0, 0};
258 0, kint32max, 0, 0 }; 262 static const int32_t kTestVectorInt32[kTestVectorSize] = {
263 INT32_MIN, 0, INT32_MAX, INT32_MIN, INT32_MAX / 2,
264 INT32_MIN / 2, 0, INT32_MAX, 0, 0};
259 265
260 // Expected results. 266 // Expected results.
261 static const int kTestVectorFrames = kTestVectorSize / 2; 267 static const int kTestVectorFrames = kTestVectorSize / 2;
262 static const float kTestVectorResult[][kTestVectorFrames] = { 268 static const float kTestVectorResult[][kTestVectorFrames] = {
263 { -1, 1, 0.5, 0, 0 }, { 0, -1, -0.5, 1, 0 }}; 269 { -1, 1, 0.5, 0, 0 }, { 0, -1, -0.5, 1, 0 }};
264 static const int kTestVectorChannels = arraysize(kTestVectorResult); 270 static const int kTestVectorChannels = arraysize(kTestVectorResult);
265 271
266 // Verify FromInterleaved() deinterleaves audio in supported formats correctly. 272 // Verify FromInterleaved() deinterleaves audio in supported formats correctly.
267 TEST_F(AudioBusTest, FromInterleaved) { 273 TEST_F(AudioBusTest, FromInterleaved) {
268 scoped_ptr<AudioBus> bus = AudioBus::Create( 274 scoped_ptr<AudioBus> bus = AudioBus::Create(
269 kTestVectorChannels, kTestVectorFrames); 275 kTestVectorChannels, kTestVectorFrames);
270 scoped_ptr<AudioBus> expected = AudioBus::Create( 276 scoped_ptr<AudioBus> expected = AudioBus::Create(
271 kTestVectorChannels, kTestVectorFrames); 277 kTestVectorChannels, kTestVectorFrames);
272 for (int ch = 0; ch < kTestVectorChannels; ++ch) { 278 for (int ch = 0; ch < kTestVectorChannels; ++ch) {
273 memcpy(expected->channel(ch), kTestVectorResult[ch], 279 memcpy(expected->channel(ch), kTestVectorResult[ch],
274 kTestVectorFrames * sizeof(*expected->channel(ch))); 280 kTestVectorFrames * sizeof(*expected->channel(ch)));
275 } 281 }
276 { 282 {
277 SCOPED_TRACE("uint8"); 283 SCOPED_TRACE("uint8");
278 bus->Zero(); 284 bus->Zero();
279 bus->FromInterleaved( 285 bus->FromInterleaved(
280 kTestVectorUint8, kTestVectorFrames, sizeof(*kTestVectorUint8)); 286 kTestVectorUint8, kTestVectorFrames, sizeof(*kTestVectorUint8));
281 // Biased uint8 calculations have poor precision, so the epsilon here is 287 // Biased uint8_t calculations have poor precision, so the epsilon here is
282 // slightly more permissive than int16 and int32 calculations. 288 // slightly more permissive than int16_t and int32_t calculations.
283 VerifyBusWithEpsilon(bus.get(), expected.get(), 1.0f / (kuint8max - 1)); 289 VerifyBusWithEpsilon(bus.get(), expected.get(),
290 1.0f / (std::numeric_limits<uint8_t>::max() - 1));
284 } 291 }
285 { 292 {
286 SCOPED_TRACE("int16"); 293 SCOPED_TRACE("int16");
287 bus->Zero(); 294 bus->Zero();
288 bus->FromInterleaved( 295 bus->FromInterleaved(
289 kTestVectorInt16, kTestVectorFrames, sizeof(*kTestVectorInt16)); 296 kTestVectorInt16, kTestVectorFrames, sizeof(*kTestVectorInt16));
290 VerifyBusWithEpsilon(bus.get(), expected.get(), 1.0f / (kuint16max + 1.0f)); 297 VerifyBusWithEpsilon(bus.get(), expected.get(),
298 1.0f / (std::numeric_limits<uint16_t>::max() + 1.0f));
291 } 299 }
292 { 300 {
293 SCOPED_TRACE("int32"); 301 SCOPED_TRACE("int32");
294 bus->Zero(); 302 bus->Zero();
295 bus->FromInterleaved( 303 bus->FromInterleaved(
296 kTestVectorInt32, kTestVectorFrames, sizeof(*kTestVectorInt32)); 304 kTestVectorInt32, kTestVectorFrames, sizeof(*kTestVectorInt32));
297 VerifyBusWithEpsilon(bus.get(), expected.get(), 1.0f / (kuint32max + 1.0f)); 305 VerifyBusWithEpsilon(bus.get(), expected.get(),
306 1.0f / (std::numeric_limits<uint32_t>::max() + 1.0f));
298 } 307 }
299 } 308 }
300 309
301 // Verify FromInterleavedPartial() deinterleaves audio correctly. 310 // Verify FromInterleavedPartial() deinterleaves audio correctly.
302 TEST_F(AudioBusTest, FromInterleavedPartial) { 311 TEST_F(AudioBusTest, FromInterleavedPartial) {
303 // Only deinterleave the middle two frames in each channel. 312 // Only deinterleave the middle two frames in each channel.
304 static const int kPartialStart = 1; 313 static const int kPartialStart = 1;
305 static const int kPartialFrames = 2; 314 static const int kPartialFrames = 2;
306 ASSERT_LE(kPartialStart + kPartialFrames, kTestVectorFrames); 315 ASSERT_LE(kPartialStart + kPartialFrames, kTestVectorFrames);
307 316
(...skipping 19 matching lines...) Expand all
327 TEST_F(AudioBusTest, ToInterleaved) { 336 TEST_F(AudioBusTest, ToInterleaved) {
328 scoped_ptr<AudioBus> bus = AudioBus::Create( 337 scoped_ptr<AudioBus> bus = AudioBus::Create(
329 kTestVectorChannels, kTestVectorFrames); 338 kTestVectorChannels, kTestVectorFrames);
330 // Fill the bus with our test vector. 339 // Fill the bus with our test vector.
331 for (int ch = 0; ch < bus->channels(); ++ch) { 340 for (int ch = 0; ch < bus->channels(); ++ch) {
332 memcpy(bus->channel(ch), kTestVectorResult[ch], 341 memcpy(bus->channel(ch), kTestVectorResult[ch],
333 kTestVectorFrames * sizeof(*bus->channel(ch))); 342 kTestVectorFrames * sizeof(*bus->channel(ch)));
334 } 343 }
335 { 344 {
336 SCOPED_TRACE("uint8"); 345 SCOPED_TRACE("uint8");
337 uint8 test_array[arraysize(kTestVectorUint8)]; 346 uint8_t test_array[arraysize(kTestVectorUint8)];
338 bus->ToInterleaved(bus->frames(), sizeof(*kTestVectorUint8), test_array); 347 bus->ToInterleaved(bus->frames(), sizeof(*kTestVectorUint8), test_array);
339 ASSERT_EQ(memcmp( 348 ASSERT_EQ(memcmp(
340 test_array, kTestVectorUint8, sizeof(kTestVectorUint8)), 0); 349 test_array, kTestVectorUint8, sizeof(kTestVectorUint8)), 0);
341 } 350 }
342 { 351 {
343 SCOPED_TRACE("int16"); 352 SCOPED_TRACE("int16");
344 int16 test_array[arraysize(kTestVectorInt16)]; 353 int16_t test_array[arraysize(kTestVectorInt16)];
345 bus->ToInterleaved(bus->frames(), sizeof(*kTestVectorInt16), test_array); 354 bus->ToInterleaved(bus->frames(), sizeof(*kTestVectorInt16), test_array);
346 ASSERT_EQ(memcmp( 355 ASSERT_EQ(memcmp(
347 test_array, kTestVectorInt16, sizeof(kTestVectorInt16)), 0); 356 test_array, kTestVectorInt16, sizeof(kTestVectorInt16)), 0);
348 } 357 }
349 { 358 {
350 SCOPED_TRACE("int32"); 359 SCOPED_TRACE("int32");
351 int32 test_array[arraysize(kTestVectorInt32)]; 360 int32_t test_array[arraysize(kTestVectorInt32)];
352 bus->ToInterleaved(bus->frames(), sizeof(*kTestVectorInt32), test_array); 361 bus->ToInterleaved(bus->frames(), sizeof(*kTestVectorInt32), test_array);
353 362
354 // Some compilers get better precision than others on the half-max test, so 363 // Some compilers get better precision than others on the half-max test, so
355 // let the test pass with an off by one check on the half-max. 364 // let the test pass with an off by one check on the half-max.
356 int32 fixed_test_array[arraysize(kTestVectorInt32)]; 365 int32_t fixed_test_array[arraysize(kTestVectorInt32)];
357 memcpy(fixed_test_array, kTestVectorInt32, sizeof(kTestVectorInt32)); 366 memcpy(fixed_test_array, kTestVectorInt32, sizeof(kTestVectorInt32));
358 ASSERT_EQ(fixed_test_array[4], kint32max / 2); 367 ASSERT_EQ(fixed_test_array[4], std::numeric_limits<int32_t>::max() / 2);
359 fixed_test_array[4]++; 368 fixed_test_array[4]++;
360 369
361 ASSERT_TRUE( 370 ASSERT_TRUE(
362 memcmp(test_array, kTestVectorInt32, sizeof(kTestVectorInt32)) == 0 || 371 memcmp(test_array, kTestVectorInt32, sizeof(kTestVectorInt32)) == 0 ||
363 memcmp(test_array, fixed_test_array, sizeof(fixed_test_array)) == 0); 372 memcmp(test_array, fixed_test_array, sizeof(fixed_test_array)) == 0);
364 } 373 }
365 } 374 }
366 375
367 // Verify ToInterleavedPartial() interleaves audio correctly. 376 // Verify ToInterleavedPartial() interleaves audio correctly.
368 TEST_F(AudioBusTest, ToInterleavedPartial) { 377 TEST_F(AudioBusTest, ToInterleavedPartial) {
369 // Only interleave the middle two frames in each channel. 378 // Only interleave the middle two frames in each channel.
370 static const int kPartialStart = 1; 379 static const int kPartialStart = 1;
371 static const int kPartialFrames = 2; 380 static const int kPartialFrames = 2;
372 ASSERT_LE(kPartialStart + kPartialFrames, kTestVectorFrames); 381 ASSERT_LE(kPartialStart + kPartialFrames, kTestVectorFrames);
373 382
374 scoped_ptr<AudioBus> expected = AudioBus::Create( 383 scoped_ptr<AudioBus> expected = AudioBus::Create(
375 kTestVectorChannels, kTestVectorFrames); 384 kTestVectorChannels, kTestVectorFrames);
376 for (int ch = 0; ch < kTestVectorChannels; ++ch) { 385 for (int ch = 0; ch < kTestVectorChannels; ++ch) {
377 memcpy(expected->channel(ch), kTestVectorResult[ch], 386 memcpy(expected->channel(ch), kTestVectorResult[ch],
378 kTestVectorFrames * sizeof(*expected->channel(ch))); 387 kTestVectorFrames * sizeof(*expected->channel(ch)));
379 } 388 }
380 389
381 int16 test_array[arraysize(kTestVectorInt16)]; 390 int16_t test_array[arraysize(kTestVectorInt16)];
382 expected->ToInterleavedPartial( 391 expected->ToInterleavedPartial(
383 kPartialStart, kPartialFrames, sizeof(*kTestVectorInt16), test_array); 392 kPartialStart, kPartialFrames, sizeof(*kTestVectorInt16), test_array);
384 ASSERT_EQ(memcmp( 393 ASSERT_EQ(memcmp(
385 test_array, kTestVectorInt16 + kPartialStart * kTestVectorChannels, 394 test_array, kTestVectorInt16 + kPartialStart * kTestVectorChannels,
386 kPartialFrames * sizeof(*kTestVectorInt16) * kTestVectorChannels), 0); 395 kPartialFrames * sizeof(*kTestVectorInt16) * kTestVectorChannels), 0);
387 } 396 }
388 397
389 TEST_F(AudioBusTest, Scale) { 398 TEST_F(AudioBusTest, Scale) {
390 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, kFrameCount); 399 scoped_ptr<AudioBus> bus = AudioBus::Create(kChannels, kFrameCount);
391 400
(...skipping 19 matching lines...) Expand all
411 420
412 // Verify zero volume case. 421 // Verify zero volume case.
413 bus->Scale(0); 422 bus->Scale(0);
414 for (int i = 0; i < bus->channels(); ++i) { 423 for (int i = 0; i < bus->channels(); ++i) {
415 SCOPED_TRACE("Zero Scale"); 424 SCOPED_TRACE("Zero Scale");
416 VerifyValue(bus->channel(i), bus->frames(), 0); 425 VerifyValue(bus->channel(i), bus->frames(), 0);
417 } 426 }
418 } 427 }
419 428
420 } // namespace media 429 } // namespace media
OLDNEW
« no previous file with comments | « media/base/audio_bus.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698