Index: webrtc/common_audio/audio_util_unittest.cc |
diff --git a/webrtc/common_audio/audio_util_unittest.cc b/webrtc/common_audio/audio_util_unittest.cc |
index 2cdf53813c1bf603c859bd80e6108a6bfee803e5..36eb709dca246a2167e823bd3bd2f703ec9a5dc4 100644 |
--- a/webrtc/common_audio/audio_util_unittest.cc |
+++ b/webrtc/common_audio/audio_util_unittest.cc |
@@ -8,11 +8,15 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
+#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "webrtc/common_audio/include/audio_util.h" |
#include "webrtc/typedefs.h" |
namespace webrtc { |
+namespace { |
+ |
+using ::testing::ElementsAreArray; |
void ExpectArraysEq(const int16_t* ref, const int16_t* test, int length) { |
for (int i = 0; i < length; ++i) { |
@@ -114,4 +118,102 @@ TEST(AudioUtilTest, InterleavingMonoIsIdentical) { |
ExpectArraysEq(mono, interleaved, kSamplesPerChannel); |
} |
+TEST(AudioUtilTest, DownmixInterleavedToMono) { |
+ { |
+ const int kNumMultichannelFrames = 4; |
Andrew MacDonald
2015/07/22 22:47:21
Same here (and possibly elsewhere?) kNumFrames or
mgraczyk
2015/07/23 00:16:54
Done.
|
+ const int kNumChannels = 1; |
+ const int16_t interleaved[kNumChannels * kNumMultichannelFrames] = {1, 2, |
+ -1, -3}; |
+ int16_t deinterleaved[kNumMultichannelFrames]; |
+ |
+ DownmixInterleavedToMono(interleaved, kNumMultichannelFrames, kNumChannels, |
+ deinterleaved); |
+ |
+ EXPECT_THAT(deinterleaved, ElementsAreArray(interleaved)); |
+ } |
+ { |
+ const int kNumMultichannelFrames = 2; |
+ const int kNumChannels = 2; |
+ const int16_t interleaved[kNumChannels * kNumMultichannelFrames] = { |
+ 10, 20, -10, -30}; |
+ int16_t deinterleaved[kNumMultichannelFrames]; |
+ |
+ DownmixInterleavedToMono(interleaved, kNumMultichannelFrames, kNumChannels, |
+ deinterleaved); |
+ const int16_t expected[kNumMultichannelFrames] = {15, -20}; |
+ |
+ EXPECT_THAT(deinterleaved, ElementsAreArray(expected)); |
+ } |
+ { |
+ const int kNumMultichannelFrames = 3; |
+ const int kNumChannels = 3; |
+ const int16_t interleaved[kNumChannels * kNumMultichannelFrames] = { |
+ 30000, 30000, 24001, -5, -10, -20, -30000, -30999, -30000}; |
+ int16_t deinterleaved[kNumMultichannelFrames]; |
+ |
+ DownmixInterleavedToMono(interleaved, kNumMultichannelFrames, kNumChannels, |
+ deinterleaved); |
+ const int16_t expected[kNumMultichannelFrames] = {28000, -11, -30333}; |
+ |
+ EXPECT_THAT(deinterleaved, ElementsAreArray(expected)); |
+ } |
+} |
+ |
+TEST(AudioUtilTest, DownmixToMonoTest) { |
+ { |
+ const int kNumMultichannelFrames = 4; |
+ const int kNumChannels = 1; |
+ const float input_data[kNumChannels][kNumMultichannelFrames] = { |
+ {1.f, 2.f, -1.f, -3.f}}; |
+ const float* input[kNumChannels]; |
+ for (int i = 0; i < kNumChannels; ++i) { |
+ input[i] = input_data[i]; |
+ } |
+ |
+ float downmixed[kNumMultichannelFrames]; |
+ |
+ DownmixToMono<float, float>(input, kNumMultichannelFrames, kNumChannels, |
+ downmixed); |
+ |
+ EXPECT_THAT(downmixed, ElementsAreArray(input_data[0])); |
+ } |
+ { |
+ const int kNumMultichannelFrames = 3; |
+ const int kNumChannels = 2; |
+ const float input_data[kNumChannels][kNumMultichannelFrames] = { |
+ {1.f, 2.f, -1.f}, {3.f, 0.f, 1.f}}; |
+ const float* input[kNumChannels]; |
+ for (int i = 0; i < kNumChannels; ++i) { |
+ input[i] = input_data[i]; |
+ } |
+ |
+ float downmixed[kNumMultichannelFrames]; |
+ const float expected[kNumMultichannelFrames] = {2.f, 1.f, 0.f}; |
+ |
+ DownmixToMono<float, float>(input, kNumMultichannelFrames, kNumChannels, |
+ downmixed); |
+ |
+ EXPECT_THAT(downmixed, ElementsAreArray(expected)); |
+ } |
+ { |
+ const int kNumMultichannelFrames = 3; |
+ const int kNumChannels = 3; |
+ const int16_t input_data[kNumChannels][kNumMultichannelFrames] = { |
+ {30000, -5, -30000}, {30000, -10, -30999}, {24001, -20, -30000}}; |
+ const int16_t* input[kNumChannels]; |
+ for (int i = 0; i < kNumChannels; ++i) { |
+ input[i] = input_data[i]; |
+ } |
+ |
+ int16_t downmixed[kNumMultichannelFrames]; |
+ const int16_t expected[kNumMultichannelFrames] = {28000, -11, -30333}; |
+ |
+ DownmixToMono<int16_t, int32_t>(input, kNumMultichannelFrames, kNumChannels, |
+ downmixed); |
Andrew MacDonald
2015/07/22 22:47:21
Indentation doesn't look right. Run clang-format.
mgraczyk
2015/07/23 00:16:54
Done.
|
+ |
+ EXPECT_THAT(downmixed, ElementsAreArray(expected)); |
+ } |
+} |
+ |
+} // namespace |
} // namespace webrtc |