| OLD | NEW |
| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 bus->Zero(); | 245 bus->Zero(); |
| 246 for (int i = 0; i < bus->channels(); ++i) { | 246 for (int i = 0; i < bus->channels(); ++i) { |
| 247 SCOPED_TRACE("All Zero"); | 247 SCOPED_TRACE("All Zero"); |
| 248 VerifyValue(bus->channel(i), bus->frames(), 0); | 248 VerifyValue(bus->channel(i), bus->frames(), 0); |
| 249 } | 249 } |
| 250 EXPECT_TRUE(bus->AreFramesZero()); | 250 EXPECT_TRUE(bus->AreFramesZero()); |
| 251 } | 251 } |
| 252 | 252 |
| 253 // Each test vector represents two channels of data in the following arbitrary | 253 // Each test vector represents two channels of data in the following arbitrary |
| 254 // layout: <min, zero, max, min, max / 2, min / 2, zero, max, zero, zero>. | 254 // layout: <min, zero, max, min, max / 2, min / 2, zero, max, zero, zero>. |
| 255 // The max / 2 values have 0.5 added to them to round them to the nearest int. |
| 255 static const int kTestVectorSize = 10; | 256 static const int kTestVectorSize = 10; |
| 256 static const uint8_t kTestVectorUint8[kTestVectorSize] = { | 257 static const uint8_t kTestVectorUint8[kTestVectorSize] = { |
| 257 0, -INT8_MIN, UINT8_MAX, | 258 0, |
| 258 0, INT8_MAX / 2 + 128, INT8_MIN / 2 + 128, | 259 -INT8_MIN, |
| 259 -INT8_MIN, UINT8_MAX, -INT8_MIN, | 260 UINT8_MAX, |
| 261 0, |
| 262 (INT8_MAX / 2.0 + 0.5) + 128, |
| 263 (INT8_MIN / 2.0) + 128, |
| 264 -INT8_MIN, |
| 265 UINT8_MAX, |
| 266 -INT8_MIN, |
| 260 -INT8_MIN}; | 267 -INT8_MIN}; |
| 261 static const int16_t kTestVectorInt16[kTestVectorSize] = { | 268 static const int16_t kTestVectorInt16[kTestVectorSize] = { |
| 262 INT16_MIN, 0, INT16_MAX, INT16_MIN, INT16_MAX / 2, | 269 INT16_MIN, 0, INT16_MAX, INT16_MIN, INT16_MAX / 2.0 + 0.5, |
| 263 INT16_MIN / 2, 0, INT16_MAX, 0, 0}; | 270 INT16_MIN / 2.0, 0, INT16_MAX, 0, 0}; |
| 264 static const int32_t kTestVectorInt32[kTestVectorSize] = { | 271 static const int32_t kTestVectorInt32[kTestVectorSize] = { |
| 265 INT32_MIN, 0, INT32_MAX, INT32_MIN, INT32_MAX / 2, | 272 INT32_MIN, 0, INT32_MAX, INT32_MIN, INT32_MAX / 2.0 + 0.5, |
| 266 INT32_MIN / 2, 0, INT32_MAX, 0, 0}; | 273 INT32_MIN / 2.0, 0, INT32_MAX, 0, 0}; |
| 267 | 274 |
| 268 // Expected results. | 275 // Expected results. |
| 269 static const int kTestVectorFrames = kTestVectorSize / 2; | 276 static const int kTestVectorFrames = kTestVectorSize / 2; |
| 270 static const float kTestVectorResult[][kTestVectorFrames] = { | 277 static const float kTestVectorResult[][kTestVectorFrames] = { |
| 271 { -1, 1, 0.5, 0, 0 }, { 0, -1, -0.5, 1, 0 }}; | 278 { -1, 1, 0.5, 0, 0 }, { 0, -1, -0.5, 1, 0 }}; |
| 272 static const int kTestVectorChannels = arraysize(kTestVectorResult); | 279 static const int kTestVectorChannels = arraysize(kTestVectorResult); |
| 273 | 280 |
| 274 // Verify FromInterleaved() deinterleaves audio in supported formats correctly. | 281 // Verify FromInterleaved() deinterleaves audio in supported formats correctly. |
| 275 TEST_F(AudioBusTest, FromInterleaved) { | 282 TEST_F(AudioBusTest, FromInterleaved) { |
| 276 scoped_ptr<AudioBus> bus = AudioBus::Create( | 283 scoped_ptr<AudioBus> bus = AudioBus::Create( |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 } | 366 } |
| 360 { | 367 { |
| 361 SCOPED_TRACE("int32_t"); | 368 SCOPED_TRACE("int32_t"); |
| 362 int32_t test_array[arraysize(kTestVectorInt32)]; | 369 int32_t test_array[arraysize(kTestVectorInt32)]; |
| 363 bus->ToInterleaved(bus->frames(), sizeof(*kTestVectorInt32), test_array); | 370 bus->ToInterleaved(bus->frames(), sizeof(*kTestVectorInt32), test_array); |
| 364 | 371 |
| 365 // Some compilers get better precision than others on the half-max test, so | 372 // Some compilers get better precision than others on the half-max test, so |
| 366 // let the test pass with an off by one check on the half-max. | 373 // let the test pass with an off by one check on the half-max. |
| 367 int32_t fixed_test_array[arraysize(kTestVectorInt32)]; | 374 int32_t fixed_test_array[arraysize(kTestVectorInt32)]; |
| 368 memcpy(fixed_test_array, kTestVectorInt32, sizeof(kTestVectorInt32)); | 375 memcpy(fixed_test_array, kTestVectorInt32, sizeof(kTestVectorInt32)); |
| 369 ASSERT_EQ(fixed_test_array[4], std::numeric_limits<int32_t>::max() / 2); | 376 ASSERT_EQ( |
| 377 fixed_test_array[4], |
| 378 round(static_cast<double>(std::numeric_limits<int32_t>::max() / 2.0))); |
| 370 fixed_test_array[4]++; | 379 fixed_test_array[4]++; |
| 371 | 380 |
| 372 ASSERT_TRUE( | 381 ASSERT_TRUE( |
| 373 memcmp(test_array, kTestVectorInt32, sizeof(kTestVectorInt32)) == 0 || | 382 memcmp(test_array, kTestVectorInt32, sizeof(kTestVectorInt32)) == 0 || |
| 374 memcmp(test_array, fixed_test_array, sizeof(fixed_test_array)) == 0); | 383 memcmp(test_array, fixed_test_array, sizeof(fixed_test_array)) == 0); |
| 375 } | 384 } |
| 376 } | 385 } |
| 377 | 386 |
| 378 // Verify ToInterleavedPartial() interleaves audio correctly. | 387 // Verify ToInterleavedPartial() interleaves audio correctly. |
| 379 TEST_F(AudioBusTest, ToInterleavedPartial) { | 388 TEST_F(AudioBusTest, ToInterleavedPartial) { |
| 380 // Only interleave the middle two frames in each channel. | 389 // Only interleave the middle two frames in each channel. |
| 381 static const int kPartialStart = 1; | 390 static const int kPartialStart = 1; |
| 382 static const int kPartialFrames = 2; | 391 static const int kPartialFrames = 2; |
| 383 ASSERT_LE(kPartialStart + kPartialFrames, kTestVectorFrames); | 392 ASSERT_LE(kPartialStart + kPartialFrames, kTestVectorFrames); |
| 384 | 393 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 | 431 |
| 423 // Verify zero volume case. | 432 // Verify zero volume case. |
| 424 bus->Scale(0); | 433 bus->Scale(0); |
| 425 for (int i = 0; i < bus->channels(); ++i) { | 434 for (int i = 0; i < bus->channels(); ++i) { |
| 426 SCOPED_TRACE("Zero Scale"); | 435 SCOPED_TRACE("Zero Scale"); |
| 427 VerifyValue(bus->channel(i), bus->frames(), 0); | 436 VerifyValue(bus->channel(i), bus->frames(), 0); |
| 428 } | 437 } |
| 429 } | 438 } |
| 430 | 439 |
| 431 } // namespace media | 440 } // namespace media |
| OLD | NEW |