OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2017 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 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 for (const int number_of_channels : {1, 2}) { | 50 for (const int number_of_channels : {1, 2}) { |
51 const std::vector<AudioFrame*> all_frames = {&frame1, &frame2}; | 51 const std::vector<AudioFrame*> all_frames = {&frame1, &frame2}; |
52 SetUpFrames(rate, number_of_channels); | 52 SetUpFrames(rate, number_of_channels); |
53 | 53 |
54 for (const int number_of_frames : {0, 1, 2}) { | 54 for (const int number_of_frames : {0, 1, 2}) { |
55 SCOPED_TRACE( | 55 SCOPED_TRACE( |
56 ProduceDebugText(rate, number_of_channels, number_of_frames)); | 56 ProduceDebugText(rate, number_of_channels, number_of_frames)); |
57 const std::vector<AudioFrame*> frames_to_combine( | 57 const std::vector<AudioFrame*> frames_to_combine( |
58 all_frames.begin(), all_frames.begin() + number_of_frames); | 58 all_frames.begin(), all_frames.begin() + number_of_frames); |
59 combiner.Combine(frames_to_combine, number_of_channels, rate, | 59 combiner.Combine(frames_to_combine, number_of_channels, rate, |
60 &audio_frame_for_mixing); | 60 frames_to_combine.size(), &audio_frame_for_mixing); |
61 } | 61 } |
62 } | 62 } |
63 } | 63 } |
64 } | 64 } |
65 | 65 |
66 // No APM limiter means no AudioProcessing::NativeRate restriction | 66 // No APM limiter means no AudioProcessing::NativeRate restriction |
67 // on rate. The rate has to be divisible by 100 since we use | 67 // on rate. The rate has to be divisible by 100 since we use |
68 // 10 ms frames, though. | 68 // 10 ms frames, though. |
69 TEST(FrameCombiner, BasicApiCallsNoLimiter) { | 69 TEST(FrameCombiner, BasicApiCallsNoLimiter) { |
70 FrameCombiner combiner(false); | 70 FrameCombiner combiner(false); |
71 for (const int rate : {8000, 10000, 11000, 32000, 44100}) { | 71 for (const int rate : {8000, 10000, 11000, 32000, 44100}) { |
72 for (const int number_of_channels : {1, 2}) { | 72 for (const int number_of_channels : {1, 2}) { |
73 const std::vector<AudioFrame*> all_frames = {&frame1, &frame2}; | 73 const std::vector<AudioFrame*> all_frames = {&frame1, &frame2}; |
74 SetUpFrames(rate, number_of_channels); | 74 SetUpFrames(rate, number_of_channels); |
75 | 75 |
76 for (const int number_of_frames : {0, 1, 2}) { | 76 for (const int number_of_frames : {0, 1, 2}) { |
77 SCOPED_TRACE( | 77 SCOPED_TRACE( |
78 ProduceDebugText(rate, number_of_channels, number_of_frames)); | 78 ProduceDebugText(rate, number_of_channels, number_of_frames)); |
79 const std::vector<AudioFrame*> frames_to_combine( | 79 const std::vector<AudioFrame*> frames_to_combine( |
80 all_frames.begin(), all_frames.begin() + number_of_frames); | 80 all_frames.begin(), all_frames.begin() + number_of_frames); |
81 combiner.Combine(frames_to_combine, number_of_channels, rate, | 81 combiner.Combine(frames_to_combine, number_of_channels, rate, |
82 &audio_frame_for_mixing); | 82 frames_to_combine.size(), &audio_frame_for_mixing); |
83 } | 83 } |
84 } | 84 } |
85 } | 85 } |
86 } | 86 } |
87 | 87 |
88 TEST(FrameCombiner, CombiningZeroFramesShouldProduceSilence) { | 88 TEST(FrameCombiner, CombiningZeroFramesShouldProduceSilence) { |
89 FrameCombiner combiner(false); | 89 FrameCombiner combiner(false); |
90 for (const int rate : {8000, 10000, 11000, 32000, 44100}) { | 90 for (const int rate : {8000, 10000, 11000, 32000, 44100}) { |
91 for (const int number_of_channels : {1, 2}) { | 91 for (const int number_of_channels : {1, 2}) { |
92 SCOPED_TRACE(ProduceDebugText(rate, number_of_channels, 0)); | 92 SCOPED_TRACE(ProduceDebugText(rate, number_of_channels, 0)); |
93 | 93 |
94 const std::vector<AudioFrame*> frames_to_combine; | 94 const std::vector<AudioFrame*> frames_to_combine; |
95 combiner.Combine(frames_to_combine, number_of_channels, rate, | 95 combiner.Combine(frames_to_combine, number_of_channels, rate, |
96 &audio_frame_for_mixing); | 96 frames_to_combine.size(), &audio_frame_for_mixing); |
97 | 97 |
98 const std::vector<int16_t> mixed_data( | 98 const std::vector<int16_t> mixed_data( |
99 audio_frame_for_mixing.data_, | 99 audio_frame_for_mixing.data_, |
100 audio_frame_for_mixing.data_ + number_of_channels * rate / 100); | 100 audio_frame_for_mixing.data_ + number_of_channels * rate / 100); |
101 | 101 |
102 const std::vector<int16_t> expected(number_of_channels * rate / 100, 0); | 102 const std::vector<int16_t> expected(number_of_channels * rate / 100, 0); |
103 EXPECT_EQ(mixed_data, expected); | 103 EXPECT_EQ(mixed_data, expected); |
104 } | 104 } |
105 } | 105 } |
106 } | 106 } |
107 | 107 |
108 TEST(FrameCombiner, CombiningOneFrameShouldNotChangeFrame) { | 108 TEST(FrameCombiner, CombiningOneFrameShouldNotChangeFrame) { |
109 FrameCombiner combiner(false); | 109 FrameCombiner combiner(false); |
110 for (const int rate : {8000, 10000, 11000, 32000, 44100}) { | 110 for (const int rate : {8000, 10000, 11000, 32000, 44100}) { |
111 for (const int number_of_channels : {1, 2}) { | 111 for (const int number_of_channels : {1, 2}) { |
112 SCOPED_TRACE(ProduceDebugText(rate, number_of_channels, 1)); | 112 SCOPED_TRACE(ProduceDebugText(rate, number_of_channels, 1)); |
113 | 113 |
114 SetUpFrames(rate, number_of_channels); | 114 SetUpFrames(rate, number_of_channels); |
115 std::iota(frame1.data_, frame1.data_ + number_of_channels * rate / 100, | 115 std::iota(frame1.data_, frame1.data_ + number_of_channels * rate / 100, |
116 0); | 116 0); |
117 const std::vector<AudioFrame*> frames_to_combine = {&frame1}; | 117 const std::vector<AudioFrame*> frames_to_combine = {&frame1}; |
118 combiner.Combine(frames_to_combine, number_of_channels, rate, | 118 combiner.Combine(frames_to_combine, number_of_channels, rate, |
119 &audio_frame_for_mixing); | 119 frames_to_combine.size(), &audio_frame_for_mixing); |
120 | 120 |
121 const std::vector<int16_t> mixed_data( | 121 const std::vector<int16_t> mixed_data( |
122 audio_frame_for_mixing.data_, | 122 audio_frame_for_mixing.data_, |
123 audio_frame_for_mixing.data_ + number_of_channels * rate / 100); | 123 audio_frame_for_mixing.data_ + number_of_channels * rate / 100); |
124 | 124 |
125 std::vector<int16_t> expected(number_of_channels * rate / 100); | 125 std::vector<int16_t> expected(number_of_channels * rate / 100); |
126 std::iota(expected.begin(), expected.end(), 0); | 126 std::iota(expected.begin(), expected.end(), 0); |
127 EXPECT_EQ(mixed_data, expected); | 127 EXPECT_EQ(mixed_data, expected); |
128 } | 128 } |
129 } | 129 } |
130 } | 130 } |
131 | 131 |
132 } // namespace webrtc | 132 } // namespace webrtc |
OLD | NEW |