| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include <algorithm> | 11 #include <algorithm> |
| 12 #include <sstream> | 12 #include <sstream> |
| 13 | 13 |
| 14 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" | 14 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" |
| 15 #include "webrtc/test/gtest.h" | 15 #include "webrtc/test/gtest.h" |
| 16 | 16 |
| 17 static const size_t kVector16Size = 9; | 17 static const size_t kVector16Size = 9; |
| 18 static const int16_t vector16[kVector16Size] = {1, -15511, 4323, 1963, | 18 static const int16_t vector16[kVector16Size] = {1, -15511, 4323, 1963, |
| 19 WEBRTC_SPL_WORD16_MAX, 0, WEBRTC_SPL_WORD16_MIN + 5, -3333, 345}; | 19 WEBRTC_SPL_WORD16_MAX, 0, WEBRTC_SPL_WORD16_MIN + 5, -3333, 345}; |
| 20 | 20 |
| 21 class SplTest : public testing::Test { | 21 class SplTest : public testing::Test { |
| 22 protected: | 22 protected: |
| 23 SplTest() { | 23 SplTest() { |
| 24 WebRtcSpl_Init(); | 24 WebRtcSpl_Init(); |
| 25 } | 25 } |
| 26 virtual ~SplTest() { | 26 virtual ~SplTest() { |
| 27 } | 27 } |
| 28 }; | 28 }; |
| 29 | 29 |
| 30 TEST_F(SplTest, MacroTest) { | 30 TEST_F(SplTest, MacroTest) { |
| 31 // Macros with inputs. | 31 // Macros with inputs. |
| 32 int A = 10; | 32 int A = 10; |
| 33 int B = 21; | 33 int B = 21; |
| 34 int a = -3; | 34 int a = -3; |
| 35 int b = WEBRTC_SPL_WORD32_MAX; | 35 int b = WEBRTC_SPL_WORD32_MAX; |
| 36 | 36 |
| 37 EXPECT_EQ(10, WEBRTC_SPL_MIN(A, B)); | 37 EXPECT_EQ(10, WEBRTC_SPL_MIN(A, B)); |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 | 321 |
| 322 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 322 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 323 a16[kk] = B[kk]; | 323 a16[kk] = B[kk]; |
| 324 b16[kk] = B[kk]; | 324 b16[kk] = B[kk]; |
| 325 } | 325 } |
| 326 | 326 |
| 327 WebRtcSpl_AffineTransformVector(bTmp16, b16, 3, 7, 2, kVectorSize); | 327 WebRtcSpl_AffineTransformVector(bTmp16, b16, 3, 7, 2, kVectorSize); |
| 328 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 328 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 329 EXPECT_EQ((B[kk]*3+7)>>2, bTmp16[kk]); | 329 EXPECT_EQ((B[kk]*3+7)>>2, bTmp16[kk]); |
| 330 } | 330 } |
| 331 WebRtcSpl_ScaleAndAddVectorsWithRound(b16, 3, b16, 2, 2, bTmp16, | 331 WebRtcSpl_ScaleAndAddVectorsWithRound(b16, 3, b16, 2, 2, bTmp16, kVectorSize
); |
| 332 kVectorSize); | |
| 333 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 332 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 334 EXPECT_EQ((B[kk]*3+B[kk]*2+2)>>2, bTmp16[kk]); | 333 EXPECT_EQ((B[kk]*3+B[kk]*2+2)>>2, bTmp16[kk]); |
| 335 } | 334 } |
| 336 | 335 |
| 337 WebRtcSpl_AddAffineVectorToVector(bTmp16, b16, 3, 7, 2, kVectorSize); | 336 WebRtcSpl_AddAffineVectorToVector(bTmp16, b16, 3, 7, 2, kVectorSize); |
| 338 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 337 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 339 EXPECT_EQ(((B[kk]*3+B[kk]*2+2)>>2)+((b16[kk]*3+7)>>2), bTmp16[kk]); | 338 EXPECT_EQ(((B[kk]*3+B[kk]*2+2)>>2)+((b16[kk]*3+7)>>2), bTmp16[kk]); |
| 340 } | 339 } |
| 341 | 340 |
| 342 WebRtcSpl_ScaleVector(b16, bTmp16, 13, kVectorSize, 2); | 341 WebRtcSpl_ScaleVector(b16, bTmp16, 13, kVectorSize, 2); |
| 343 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 342 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 344 EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); | 343 EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); |
| 345 } | 344 } |
| 346 WebRtcSpl_ScaleVectorWithSat(b16, bTmp16, 13, kVectorSize, 2); | 345 WebRtcSpl_ScaleVectorWithSat(b16, bTmp16, 13, kVectorSize, 2); |
| 347 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 346 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 348 EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); | 347 EXPECT_EQ((b16[kk]*13)>>2, bTmp16[kk]); |
| 349 } | 348 } |
| 350 WebRtcSpl_ScaleAndAddVectors(a16, 13, 2, b16, 7, 2, bTmp16, kVectorSize); | 349 WebRtcSpl_ScaleAndAddVectors(a16, 13, 2, b16, 7, 2, bTmp16, kVectorSize); |
| 351 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 350 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 352 EXPECT_EQ(((a16[kk]*13)>>2)+((b16[kk]*7)>>2), bTmp16[kk]); | 351 EXPECT_EQ(((a16[kk]*13)>>2)+((b16[kk]*7)>>2), bTmp16[kk]); |
| 353 } | 352 } |
| 354 | 353 |
| 355 WebRtcSpl_AddVectorsAndShift(bTmp16, a16, b16, kVectorSize, 2); | 354 WebRtcSpl_AddVectorsAndShift(bTmp16, a16, b16, kVectorSize, 2); |
| 356 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 355 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 357 EXPECT_EQ(B[kk] >> 1, bTmp16[kk]); | 356 EXPECT_EQ(B[kk] >> 1, bTmp16[kk]); |
| 358 } | 357 } |
| 359 WebRtcSpl_ReverseOrderMultArrayElements(bTmp16, a16, &b16[3], | 358 WebRtcSpl_ReverseOrderMultArrayElements(bTmp16, a16, &b16[3], kVectorSize, 2
); |
| 360 kVectorSize, 2); | |
| 361 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 359 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 362 EXPECT_EQ((a16[kk]*b16[3-kk])>>2, bTmp16[kk]); | 360 EXPECT_EQ((a16[kk]*b16[3-kk])>>2, bTmp16[kk]); |
| 363 } | 361 } |
| 364 WebRtcSpl_ElementwiseVectorMult(bTmp16, a16, b16, kVectorSize, 6); | 362 WebRtcSpl_ElementwiseVectorMult(bTmp16, a16, b16, kVectorSize, 6); |
| 365 for (size_t kk = 0; kk < kVectorSize; ++kk) { | 363 for (size_t kk = 0; kk < kVectorSize; ++kk) { |
| 366 EXPECT_EQ((a16[kk]*b16[kk])>>6, bTmp16[kk]); | 364 EXPECT_EQ((a16[kk]*b16[kk])>>6, bTmp16[kk]); |
| 367 } | 365 } |
| 368 | 366 |
| 369 WebRtcSpl_SqrtOfOneMinusXSquared(b16, kVectorSize, bTmp16); | 367 WebRtcSpl_SqrtOfOneMinusXSquared(b16, kVectorSize, bTmp16); |
| 370 for (size_t kk = 0; kk < kVectorSize - 1; ++kk) { | 368 for (size_t kk = 0; kk < kVectorSize - 1; ++kk) { |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 EXPECT_EQ(0, WebRtcSpl_ComplexFFT(B, 3, 1)); | 551 EXPECT_EQ(0, WebRtcSpl_ComplexFFT(B, 3, 1)); |
| 554 // for (int kk = 0; kk < 16; ++kk) { | 552 // for (int kk = 0; kk < 16; ++kk) { |
| 555 // EXPECT_EQ(A[kk], B[kk]); | 553 // EXPECT_EQ(A[kk], B[kk]); |
| 556 // } | 554 // } |
| 557 EXPECT_EQ(0, WebRtcSpl_ComplexIFFT(B, 3, 1)); | 555 EXPECT_EQ(0, WebRtcSpl_ComplexIFFT(B, 3, 1)); |
| 558 // for (int kk = 0; kk < 16; ++kk) { | 556 // for (int kk = 0; kk < 16; ++kk) { |
| 559 // EXPECT_EQ(A[kk], B[kk]); | 557 // EXPECT_EQ(A[kk], B[kk]); |
| 560 // } | 558 // } |
| 561 WebRtcSpl_ComplexBitReverse(B, 3); | 559 WebRtcSpl_ComplexBitReverse(B, 3); |
| 562 for (int kk = 0; kk < 16; ++kk) { | 560 for (int kk = 0; kk < 16; ++kk) { |
| 563 // EXPECT_EQ(A[kk], B[kk]); | 561 //EXPECT_EQ(A[kk], B[kk]); |
| 564 } | 562 } |
| 565 } | 563 } |
| 566 | 564 |
| 567 TEST_F(SplTest, Resample48WithSaturationTest) { | 565 TEST_F(SplTest, Resample48WithSaturationTest) { |
| 568 // The test resamples 3*kBlockSize number of samples to 2*kBlockSize number | 566 // The test resamples 3*kBlockSize number of samples to 2*kBlockSize number |
| 569 // of samples. | 567 // of samples. |
| 570 const size_t kBlockSize = 16; | 568 const size_t kBlockSize = 16; |
| 571 | 569 |
| 572 // Saturated input vector of 48 samples. | 570 // Saturated input vector of 48 samples. |
| 573 const int32_t kVectorSaturated[3 * kBlockSize + 7] = { | 571 const int32_t kVectorSaturated[3 * kBlockSize + 7] = { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 600 // 12-15 are skipped to account for the filter lag. | 598 // 12-15 are skipped to account for the filter lag. |
| 601 for (size_t i = 0; i < 12; ++i) { | 599 for (size_t i = 0; i < 12; ++i) { |
| 602 EXPECT_EQ(kRefValue32kHz1, out_vector[i]); | 600 EXPECT_EQ(kRefValue32kHz1, out_vector[i]); |
| 603 EXPECT_EQ(kRefValue16kHz1, out_vector_w16[i]); | 601 EXPECT_EQ(kRefValue16kHz1, out_vector_w16[i]); |
| 604 } | 602 } |
| 605 for (size_t i = 16; i < 2 * kBlockSize; ++i) { | 603 for (size_t i = 16; i < 2 * kBlockSize; ++i) { |
| 606 EXPECT_EQ(kRefValue32kHz2, out_vector[i]); | 604 EXPECT_EQ(kRefValue32kHz2, out_vector[i]); |
| 607 EXPECT_EQ(kRefValue16kHz2, out_vector_w16[i]); | 605 EXPECT_EQ(kRefValue16kHz2, out_vector_w16[i]); |
| 608 } | 606 } |
| 609 } | 607 } |
| OLD | NEW |