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 |
(...skipping 14 matching lines...) Expand all Loading... | |
25 } | 25 } |
26 | 26 |
27 AudioFrame frame_; | 27 AudioFrame frame_; |
28 }; | 28 }; |
29 | 29 |
30 void SetFrameData(int16_t ch1, | 30 void SetFrameData(int16_t ch1, |
31 int16_t ch2, | 31 int16_t ch2, |
32 int16_t ch3, | 32 int16_t ch3, |
33 int16_t ch4, | 33 int16_t ch4, |
34 AudioFrame* frame) { | 34 AudioFrame* frame) { |
35 int16_t* frame_data = frame->mutable_data(); | |
35 for (size_t i = 0; i < frame->samples_per_channel_ * 4; i += 4) { | 36 for (size_t i = 0; i < frame->samples_per_channel_ * 4; i += 4) { |
36 frame->data_[i] = ch1; | 37 frame_data[i] = ch1; |
37 frame->data_[i + 1] = ch2; | 38 frame_data[i + 1] = ch2; |
38 frame->data_[i + 2] = ch3; | 39 frame_data[i + 2] = ch3; |
39 frame->data_[i + 3] = ch4; | 40 frame_data[i + 3] = ch4; |
40 } | 41 } |
41 } | 42 } |
42 | 43 |
43 void SetFrameData(int16_t left, int16_t right, AudioFrame* frame) { | 44 void SetFrameData(int16_t left, int16_t right, AudioFrame* frame) { |
45 int16_t* frame_data = frame->mutable_data(); | |
44 for (size_t i = 0; i < frame->samples_per_channel_ * 2; i += 2) { | 46 for (size_t i = 0; i < frame->samples_per_channel_ * 2; i += 2) { |
45 frame->data_[i] = left; | 47 frame_data[i] = left; |
46 frame->data_[i + 1] = right; | 48 frame_data[i + 1] = right; |
47 } | 49 } |
48 } | 50 } |
49 | 51 |
50 void SetFrameData(int16_t data, AudioFrame* frame) { | 52 void SetFrameData(int16_t data, AudioFrame* frame) { |
51 for (size_t i = 0; i < frame->samples_per_channel_; i++) { | 53 int16_t* frame_data = frame->mutable_data(); |
52 frame->data_[i] = data; | 54 for (size_t i = 0; |
55 i < frame->samples_per_channel_ * frame->num_channels_; i++) { | |
56 frame_data[i] = data; | |
53 } | 57 } |
54 } | 58 } |
55 | 59 |
56 void VerifyFramesAreEqual(const AudioFrame& frame1, const AudioFrame& frame2) { | 60 void VerifyFramesAreEqual(const AudioFrame& frame1, const AudioFrame& frame2) { |
57 EXPECT_EQ(frame1.num_channels_, frame2.num_channels_); | 61 EXPECT_EQ(frame1.num_channels_, frame2.num_channels_); |
58 EXPECT_EQ(frame1.samples_per_channel_, | 62 EXPECT_EQ(frame1.samples_per_channel_, |
59 frame2.samples_per_channel_); | 63 frame2.samples_per_channel_); |
64 const int16_t* frame1_data = frame1.data(); | |
65 const int16_t* frame2_data = frame2.data(); | |
60 for (size_t i = 0; i < frame1.samples_per_channel_ * frame1.num_channels_; | 66 for (size_t i = 0; i < frame1.samples_per_channel_ * frame1.num_channels_; |
61 i++) { | 67 i++) { |
62 EXPECT_EQ(frame1.data_[i], frame2.data_[i]); | 68 EXPECT_EQ(frame1_data[i], frame2_data[i]); |
63 } | 69 } |
70 EXPECT_EQ(frame1.muted(), frame2.muted()); | |
64 } | 71 } |
65 | 72 |
66 void InitFrame(AudioFrame* frame, size_t channels, size_t samples_per_channel, | 73 void InitFrame(AudioFrame* frame, size_t channels, size_t samples_per_channel, |
67 int16_t left_data, int16_t right_data) { | 74 int16_t left_data, int16_t right_data) { |
68 RTC_DCHECK(frame); | 75 RTC_DCHECK(frame); |
69 RTC_DCHECK_GE(2, channels); | 76 RTC_DCHECK_GE(2, channels); |
70 RTC_DCHECK_GE(AudioFrame::kMaxDataSizeSamples, | 77 RTC_DCHECK_GE(AudioFrame::kMaxDataSizeSamples, |
71 samples_per_channel * channels); | 78 samples_per_channel * channels); |
72 frame->samples_per_channel_ = samples_per_channel; | 79 frame->samples_per_channel_ = samples_per_channel; |
73 frame->num_channels_ = channels; | 80 frame->num_channels_ = channels; |
74 if (channels == 2) { | 81 if (channels == 2) { |
75 SetFrameData(left_data, right_data, frame); | 82 SetFrameData(left_data, right_data, frame); |
76 } else if (channels == 1) { | 83 } else if (channels == 1) { |
77 SetFrameData(left_data, frame); | 84 SetFrameData(left_data, frame); |
78 } | 85 } |
79 } | 86 } |
80 | 87 |
81 int16_t GetChannelData(const AudioFrame& frame, size_t channel, size_t index) { | 88 int16_t GetChannelData(const AudioFrame& frame, size_t channel, size_t index) { |
82 RTC_DCHECK_LT(channel, frame.num_channels_); | 89 RTC_DCHECK_LT(channel, frame.num_channels_); |
83 RTC_DCHECK_LT(index, frame.samples_per_channel_); | 90 RTC_DCHECK_LT(index, frame.samples_per_channel_); |
84 return frame.data_[index * frame.num_channels_ + channel]; | 91 return frame.data()[index * frame.num_channels_ + channel]; |
85 } | 92 } |
86 | 93 |
87 void VerifyFrameDataBounds(const AudioFrame& frame, size_t channel, int16_t max, | 94 void VerifyFrameDataBounds(const AudioFrame& frame, size_t channel, int16_t max, |
88 int16_t min) { | 95 int16_t min) { |
89 for (size_t i = 0; i < frame.samples_per_channel_; ++i) { | 96 for (size_t i = 0; i < frame.samples_per_channel_; ++i) { |
90 int16_t s = GetChannelData(frame, channel, i); | 97 int16_t s = GetChannelData(frame, channel, i); |
91 EXPECT_LE(min, s); | 98 EXPECT_LE(min, s); |
92 EXPECT_GE(max, s); | 99 EXPECT_GE(max, s); |
93 } | 100 } |
94 } | 101 } |
(...skipping 12 matching lines...) Expand all Loading... | |
107 | 114 |
108 EXPECT_EQ(0, AudioFrameOperations::MonoToStereo(&frame_)); | 115 EXPECT_EQ(0, AudioFrameOperations::MonoToStereo(&frame_)); |
109 | 116 |
110 AudioFrame stereo_frame; | 117 AudioFrame stereo_frame; |
111 stereo_frame.samples_per_channel_ = 320; | 118 stereo_frame.samples_per_channel_ = 320; |
112 stereo_frame.num_channels_ = 2; | 119 stereo_frame.num_channels_ = 2; |
113 SetFrameData(1, 1, &stereo_frame); | 120 SetFrameData(1, 1, &stereo_frame); |
114 VerifyFramesAreEqual(stereo_frame, frame_); | 121 VerifyFramesAreEqual(stereo_frame, frame_); |
115 } | 122 } |
116 | 123 |
124 TEST_F(AudioFrameOperationsTest, MonoToStereoMuted) { | |
125 frame_.num_channels_ = 1; | |
126 ASSERT_TRUE(frame_.muted()); | |
127 EXPECT_EQ(0, AudioFrameOperations::MonoToStereo(&frame_)); | |
128 EXPECT_TRUE(frame_.muted()); | |
129 } | |
130 | |
117 TEST_F(AudioFrameOperationsTest, MonoToStereoBufferSucceeds) { | 131 TEST_F(AudioFrameOperationsTest, MonoToStereoBufferSucceeds) { |
118 AudioFrame target_frame; | 132 AudioFrame target_frame; |
119 frame_.num_channels_ = 1; | 133 frame_.num_channels_ = 1; |
120 SetFrameData(4, &frame_); | 134 SetFrameData(4, &frame_); |
121 | 135 |
122 target_frame.num_channels_ = 2; | 136 target_frame.num_channels_ = 2; |
123 target_frame.samples_per_channel_ = frame_.samples_per_channel_; | 137 target_frame.samples_per_channel_ = frame_.samples_per_channel_; |
124 | 138 |
125 AudioFrameOperations::MonoToStereo(frame_.data_, frame_.samples_per_channel_, | 139 AudioFrameOperations::MonoToStereo(frame_.data(), frame_.samples_per_channel_, |
126 target_frame.data_); | 140 target_frame.mutable_data()); |
127 | 141 |
128 AudioFrame stereo_frame; | 142 AudioFrame stereo_frame; |
129 stereo_frame.samples_per_channel_ = 320; | 143 stereo_frame.samples_per_channel_ = 320; |
130 stereo_frame.num_channels_ = 2; | 144 stereo_frame.num_channels_ = 2; |
131 SetFrameData(4, 4, &stereo_frame); | 145 SetFrameData(4, 4, &stereo_frame); |
132 VerifyFramesAreEqual(stereo_frame, target_frame); | 146 VerifyFramesAreEqual(stereo_frame, target_frame); |
133 } | 147 } |
134 | 148 |
135 TEST_F(AudioFrameOperationsTest, StereoToMonoFailsWithBadParameters) { | 149 TEST_F(AudioFrameOperationsTest, StereoToMonoFailsWithBadParameters) { |
136 frame_.num_channels_ = 1; | 150 frame_.num_channels_ = 1; |
137 EXPECT_EQ(-1, AudioFrameOperations::StereoToMono(&frame_)); | 151 EXPECT_EQ(-1, AudioFrameOperations::StereoToMono(&frame_)); |
138 } | 152 } |
139 | 153 |
140 TEST_F(AudioFrameOperationsTest, StereoToMonoSucceeds) { | 154 TEST_F(AudioFrameOperationsTest, StereoToMonoSucceeds) { |
141 SetFrameData(4, 2, &frame_); | 155 SetFrameData(4, 2, &frame_); |
142 EXPECT_EQ(0, AudioFrameOperations::StereoToMono(&frame_)); | 156 EXPECT_EQ(0, AudioFrameOperations::StereoToMono(&frame_)); |
143 | 157 |
144 AudioFrame mono_frame; | 158 AudioFrame mono_frame; |
145 mono_frame.samples_per_channel_ = 320; | 159 mono_frame.samples_per_channel_ = 320; |
146 mono_frame.num_channels_ = 1; | 160 mono_frame.num_channels_ = 1; |
147 SetFrameData(3, &mono_frame); | 161 SetFrameData(3, &mono_frame); |
148 VerifyFramesAreEqual(mono_frame, frame_); | 162 VerifyFramesAreEqual(mono_frame, frame_); |
149 } | 163 } |
150 | 164 |
165 TEST_F(AudioFrameOperationsTest, StereoToMonoMuted) { | |
166 ASSERT_TRUE(frame_.muted()); | |
167 EXPECT_EQ(0, AudioFrameOperations::StereoToMono(&frame_)); | |
168 EXPECT_TRUE(frame_.muted()); | |
169 } | |
170 | |
151 TEST_F(AudioFrameOperationsTest, StereoToMonoBufferSucceeds) { | 171 TEST_F(AudioFrameOperationsTest, StereoToMonoBufferSucceeds) { |
152 AudioFrame target_frame; | 172 AudioFrame target_frame; |
153 SetFrameData(4, 2, &frame_); | 173 SetFrameData(4, 2, &frame_); |
154 | 174 |
155 target_frame.num_channels_ = 1; | 175 target_frame.num_channels_ = 1; |
156 target_frame.samples_per_channel_ = frame_.samples_per_channel_; | 176 target_frame.samples_per_channel_ = frame_.samples_per_channel_; |
157 | 177 |
158 AudioFrameOperations::StereoToMono(frame_.data_, frame_.samples_per_channel_, | 178 AudioFrameOperations::StereoToMono(frame_.data(), frame_.samples_per_channel_, |
159 target_frame.data_); | 179 target_frame.mutable_data()); |
160 | 180 |
161 AudioFrame mono_frame; | 181 AudioFrame mono_frame; |
162 mono_frame.samples_per_channel_ = 320; | 182 mono_frame.samples_per_channel_ = 320; |
163 mono_frame.num_channels_ = 1; | 183 mono_frame.num_channels_ = 1; |
164 SetFrameData(3, &mono_frame); | 184 SetFrameData(3, &mono_frame); |
165 VerifyFramesAreEqual(mono_frame, target_frame); | 185 VerifyFramesAreEqual(mono_frame, target_frame); |
166 } | 186 } |
167 | 187 |
168 TEST_F(AudioFrameOperationsTest, StereoToMonoDoesNotWrapAround) { | 188 TEST_F(AudioFrameOperationsTest, StereoToMonoDoesNotWrapAround) { |
169 SetFrameData(-32768, -32768, &frame_); | 189 SetFrameData(-32768, -32768, &frame_); |
(...skipping 19 matching lines...) Expand all Loading... | |
189 | 209 |
190 EXPECT_EQ(0, AudioFrameOperations::QuadToMono(&frame_)); | 210 EXPECT_EQ(0, AudioFrameOperations::QuadToMono(&frame_)); |
191 | 211 |
192 AudioFrame mono_frame; | 212 AudioFrame mono_frame; |
193 mono_frame.samples_per_channel_ = 320; | 213 mono_frame.samples_per_channel_ = 320; |
194 mono_frame.num_channels_ = 1; | 214 mono_frame.num_channels_ = 1; |
195 SetFrameData(5, &mono_frame); | 215 SetFrameData(5, &mono_frame); |
196 VerifyFramesAreEqual(mono_frame, frame_); | 216 VerifyFramesAreEqual(mono_frame, frame_); |
197 } | 217 } |
198 | 218 |
219 TEST_F(AudioFrameOperationsTest, QuadToMonoMuted) { | |
220 frame_.num_channels_ = 4; | |
221 ASSERT_TRUE(frame_.muted()); | |
222 EXPECT_EQ(0, AudioFrameOperations::QuadToMono(&frame_)); | |
223 EXPECT_TRUE(frame_.muted()); | |
224 } | |
225 | |
199 TEST_F(AudioFrameOperationsTest, QuadToMonoBufferSucceeds) { | 226 TEST_F(AudioFrameOperationsTest, QuadToMonoBufferSucceeds) { |
200 AudioFrame target_frame; | 227 AudioFrame target_frame; |
201 frame_.num_channels_ = 4; | 228 frame_.num_channels_ = 4; |
202 SetFrameData(4, 2, 6, 8, &frame_); | 229 SetFrameData(4, 2, 6, 8, &frame_); |
203 | 230 |
204 target_frame.num_channels_ = 1; | 231 target_frame.num_channels_ = 1; |
205 target_frame.samples_per_channel_ = frame_.samples_per_channel_; | 232 target_frame.samples_per_channel_ = frame_.samples_per_channel_; |
206 | 233 |
207 AudioFrameOperations::QuadToMono(frame_.data_, frame_.samples_per_channel_, | 234 AudioFrameOperations::QuadToMono(frame_.data(), frame_.samples_per_channel_, |
208 target_frame.data_); | 235 target_frame.mutable_data()); |
209 AudioFrame mono_frame; | 236 AudioFrame mono_frame; |
210 mono_frame.samples_per_channel_ = 320; | 237 mono_frame.samples_per_channel_ = 320; |
211 mono_frame.num_channels_ = 1; | 238 mono_frame.num_channels_ = 1; |
212 SetFrameData(5, &mono_frame); | 239 SetFrameData(5, &mono_frame); |
213 VerifyFramesAreEqual(mono_frame, target_frame); | 240 VerifyFramesAreEqual(mono_frame, target_frame); |
214 } | 241 } |
215 | 242 |
216 TEST_F(AudioFrameOperationsTest, QuadToMonoDoesNotWrapAround) { | 243 TEST_F(AudioFrameOperationsTest, QuadToMonoDoesNotWrapAround) { |
217 frame_.num_channels_ = 4; | 244 frame_.num_channels_ = 4; |
218 SetFrameData(-32768, -32768, -32768, -32768, &frame_); | 245 SetFrameData(-32768, -32768, -32768, -32768, &frame_); |
(...skipping 18 matching lines...) Expand all Loading... | |
237 SetFrameData(4, 2, 6, 8, &frame_); | 264 SetFrameData(4, 2, 6, 8, &frame_); |
238 EXPECT_EQ(0, AudioFrameOperations::QuadToStereo(&frame_)); | 265 EXPECT_EQ(0, AudioFrameOperations::QuadToStereo(&frame_)); |
239 | 266 |
240 AudioFrame stereo_frame; | 267 AudioFrame stereo_frame; |
241 stereo_frame.samples_per_channel_ = 320; | 268 stereo_frame.samples_per_channel_ = 320; |
242 stereo_frame.num_channels_ = 2; | 269 stereo_frame.num_channels_ = 2; |
243 SetFrameData(3, 7, &stereo_frame); | 270 SetFrameData(3, 7, &stereo_frame); |
244 VerifyFramesAreEqual(stereo_frame, frame_); | 271 VerifyFramesAreEqual(stereo_frame, frame_); |
245 } | 272 } |
246 | 273 |
274 TEST_F(AudioFrameOperationsTest, QuadToStereoMuted) { | |
275 frame_.num_channels_ = 4; | |
276 ASSERT_TRUE(frame_.muted()); | |
277 EXPECT_EQ(0, AudioFrameOperations::QuadToStereo(&frame_)); | |
278 EXPECT_TRUE(frame_.muted()); | |
279 } | |
280 | |
247 TEST_F(AudioFrameOperationsTest, QuadToStereoBufferSucceeds) { | 281 TEST_F(AudioFrameOperationsTest, QuadToStereoBufferSucceeds) { |
248 AudioFrame target_frame; | 282 AudioFrame target_frame; |
249 frame_.num_channels_ = 4; | 283 frame_.num_channels_ = 4; |
250 SetFrameData(4, 2, 6, 8, &frame_); | 284 SetFrameData(4, 2, 6, 8, &frame_); |
251 | 285 |
252 target_frame.num_channels_ = 2; | 286 target_frame.num_channels_ = 2; |
253 target_frame.samples_per_channel_ = frame_.samples_per_channel_; | 287 target_frame.samples_per_channel_ = frame_.samples_per_channel_; |
254 | 288 |
255 AudioFrameOperations::QuadToStereo(frame_.data_, frame_.samples_per_channel_, | 289 AudioFrameOperations::QuadToStereo(frame_.data(), frame_.samples_per_channel_, |
256 target_frame.data_); | 290 target_frame.mutable_data()); |
257 AudioFrame stereo_frame; | 291 AudioFrame stereo_frame; |
258 stereo_frame.samples_per_channel_ = 320; | 292 stereo_frame.samples_per_channel_ = 320; |
259 stereo_frame.num_channels_ = 2; | 293 stereo_frame.num_channels_ = 2; |
260 SetFrameData(3, 7, &stereo_frame); | 294 SetFrameData(3, 7, &stereo_frame); |
261 VerifyFramesAreEqual(stereo_frame, target_frame); | 295 VerifyFramesAreEqual(stereo_frame, target_frame); |
262 } | 296 } |
263 | 297 |
264 TEST_F(AudioFrameOperationsTest, QuadToStereoDoesNotWrapAround) { | 298 TEST_F(AudioFrameOperationsTest, QuadToStereoDoesNotWrapAround) { |
265 frame_.num_channels_ = 4; | 299 frame_.num_channels_ = 4; |
266 SetFrameData(-32768, -32768, -32768, -32768, &frame_); | 300 SetFrameData(-32768, -32768, -32768, -32768, &frame_); |
(...skipping 11 matching lines...) Expand all Loading... | |
278 | 312 |
279 AudioFrame swapped_frame; | 313 AudioFrame swapped_frame; |
280 swapped_frame.samples_per_channel_ = 320; | 314 swapped_frame.samples_per_channel_ = 320; |
281 swapped_frame.num_channels_ = 2; | 315 swapped_frame.num_channels_ = 2; |
282 SetFrameData(1, 0, &swapped_frame); | 316 SetFrameData(1, 0, &swapped_frame); |
283 | 317 |
284 AudioFrameOperations::SwapStereoChannels(&frame_); | 318 AudioFrameOperations::SwapStereoChannels(&frame_); |
285 VerifyFramesAreEqual(swapped_frame, frame_); | 319 VerifyFramesAreEqual(swapped_frame, frame_); |
286 } | 320 } |
287 | 321 |
322 TEST_F(AudioFrameOperationsTest, SwapStereoChannelsMuted) { | |
323 ASSERT_TRUE(frame_.muted()); | |
324 AudioFrameOperations::SwapStereoChannels(&frame_); | |
325 EXPECT_TRUE(frame_.muted()); | |
326 } | |
327 | |
288 TEST_F(AudioFrameOperationsTest, SwapStereoChannelsFailsOnMono) { | 328 TEST_F(AudioFrameOperationsTest, SwapStereoChannelsFailsOnMono) { |
289 frame_.num_channels_ = 1; | 329 frame_.num_channels_ = 1; |
290 // Set data to "stereo", despite it being a mono frame. | 330 // Set data to "stereo", despite it being a mono frame. |
291 SetFrameData(0, 1, &frame_); | 331 SetFrameData(0, 1, &frame_); |
292 | 332 |
293 AudioFrame orig_frame; | 333 AudioFrame orig_frame; |
294 orig_frame.CopyFrom(frame_); | 334 orig_frame.CopyFrom(frame_); |
295 AudioFrameOperations::SwapStereoChannels(&frame_); | 335 AudioFrameOperations::SwapStereoChannels(&frame_); |
296 // Verify that no swap occurred. | 336 // Verify that no swap occurred. |
297 VerifyFramesAreEqual(orig_frame, frame_); | 337 VerifyFramesAreEqual(orig_frame, frame_); |
298 } | 338 } |
299 | 339 |
300 TEST_F(AudioFrameOperationsTest, MuteDisabled) { | 340 TEST_F(AudioFrameOperationsTest, MuteDisabled) { |
301 SetFrameData(1000, -1000, &frame_); | 341 SetFrameData(1000, -1000, &frame_); |
302 AudioFrameOperations::Mute(&frame_, false, false); | 342 AudioFrameOperations::Mute(&frame_, false, false); |
303 | 343 |
304 AudioFrame muted_frame; | 344 AudioFrame muted_frame; |
305 muted_frame.samples_per_channel_ = 320; | 345 muted_frame.samples_per_channel_ = 320; |
306 muted_frame.num_channels_ = 2; | 346 muted_frame.num_channels_ = 2; |
307 SetFrameData(1000, -1000, &muted_frame); | 347 SetFrameData(1000, -1000, &muted_frame); |
308 VerifyFramesAreEqual(muted_frame, frame_); | 348 VerifyFramesAreEqual(muted_frame, frame_); |
309 } | 349 } |
310 | 350 |
311 TEST_F(AudioFrameOperationsTest, MuteEnabled) { | 351 TEST_F(AudioFrameOperationsTest, MuteEnabled) { |
312 SetFrameData(1000, -1000, &frame_); | 352 SetFrameData(1000, -1000, &frame_); |
313 AudioFrameOperations::Mute(&frame_, true, true); | 353 AudioFrameOperations::Mute(&frame_, true, true); |
314 | 354 |
315 AudioFrame muted_frame; | 355 AudioFrame muted_frame; |
316 muted_frame.samples_per_channel_ = 320; | 356 muted_frame.samples_per_channel_ = frame_.samples_per_channel_; |
317 muted_frame.num_channels_ = 2; | 357 muted_frame.num_channels_ = frame_.num_channels_; |
318 SetFrameData(0, 0, &muted_frame); | 358 ASSERT_TRUE(muted_frame.muted()); |
319 VerifyFramesAreEqual(muted_frame, frame_); | 359 VerifyFramesAreEqual(muted_frame, frame_); |
320 } | 360 } |
321 | 361 |
322 // Verify that *beginning* to mute works for short and long (>128) frames, mono | 362 // Verify that *beginning* to mute works for short and long (>128) frames, mono |
323 // and stereo. Beginning mute should yield a ramp down to zero. | 363 // and stereo. Beginning mute should yield a ramp down to zero. |
324 TEST_F(AudioFrameOperationsTest, MuteBeginMonoLong) { | 364 TEST_F(AudioFrameOperationsTest, MuteBeginMonoLong) { |
325 InitFrame(&frame_, 1, 228, 1000, -1000); | 365 InitFrame(&frame_, 1, 228, 1000, -1000); |
326 AudioFrameOperations::Mute(&frame_, false, true); | 366 AudioFrameOperations::Mute(&frame_, false, true); |
327 VerifyFrameDataBounds(frame_, 0, 1000, 0); | 367 VerifyFrameDataBounds(frame_, 0, 1000, 0); |
328 EXPECT_EQ(1000, GetChannelData(frame_, 0, 99)); | 368 EXPECT_EQ(1000, GetChannelData(frame_, 0, 99)); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
416 EXPECT_EQ(10, GetChannelData(frame_, 0, 0)); | 456 EXPECT_EQ(10, GetChannelData(frame_, 0, 0)); |
417 EXPECT_EQ(-10, GetChannelData(frame_, 1, 0)); | 457 EXPECT_EQ(-10, GetChannelData(frame_, 1, 0)); |
418 EXPECT_EQ(21, GetChannelData(frame_, 0, 1)); | 458 EXPECT_EQ(21, GetChannelData(frame_, 0, 1)); |
419 EXPECT_EQ(-21, GetChannelData(frame_, 1, 1)); | 459 EXPECT_EQ(-21, GetChannelData(frame_, 1, 1)); |
420 EXPECT_EQ(989, GetChannelData(frame_, 0, 91)); | 460 EXPECT_EQ(989, GetChannelData(frame_, 0, 91)); |
421 EXPECT_EQ(-989, GetChannelData(frame_, 1, 91)); | 461 EXPECT_EQ(-989, GetChannelData(frame_, 1, 91)); |
422 EXPECT_EQ(999, GetChannelData(frame_, 0, 92)); | 462 EXPECT_EQ(999, GetChannelData(frame_, 0, 92)); |
423 EXPECT_EQ(-999, GetChannelData(frame_, 1, 92)); | 463 EXPECT_EQ(-999, GetChannelData(frame_, 1, 92)); |
424 } | 464 } |
425 | 465 |
466 TEST_F(AudioFrameOperationsTest, MuteBeginAlreadyMuted) { | |
467 ASSERT_TRUE(frame_.muted()); | |
468 AudioFrameOperations::Mute(&frame_, false, true); | |
469 EXPECT_TRUE(frame_.muted()); | |
470 } | |
471 | |
472 TEST_F(AudioFrameOperationsTest, MuteEndAlreadyMuted) { | |
473 ASSERT_TRUE(frame_.muted()); | |
474 AudioFrameOperations::Mute(&frame_, true, false); | |
475 EXPECT_TRUE(frame_.muted()); | |
476 } | |
477 | |
478 TEST_F(AudioFrameOperationsTest, ApplyHalfGainSucceeds) { | |
479 SetFrameData(2, &frame_); | |
480 | |
481 AudioFrame half_gain_frame; | |
482 half_gain_frame.num_channels_ = frame_.num_channels_; | |
483 half_gain_frame.samples_per_channel_ = frame_.samples_per_channel_; | |
484 SetFrameData(1, &half_gain_frame); | |
485 | |
486 AudioFrameOperations::ApplyHalfGain(&frame_); | |
487 VerifyFramesAreEqual(half_gain_frame, frame_); | |
488 } | |
489 | |
490 TEST_F(AudioFrameOperationsTest, ApplyHalfGainMuted) { | |
491 ASSERT_TRUE(frame_.muted()); | |
492 AudioFrameOperations::ApplyHalfGain(&frame_); | |
493 EXPECT_TRUE(frame_.muted()); | |
494 } | |
495 | |
426 // TODO(andrew): should not allow negative scales. | 496 // TODO(andrew): should not allow negative scales. |
427 TEST_F(AudioFrameOperationsTest, DISABLED_ScaleFailsWithBadParameters) { | 497 TEST_F(AudioFrameOperationsTest, DISABLED_ScaleFailsWithBadParameters) { |
428 frame_.num_channels_ = 1; | 498 frame_.num_channels_ = 1; |
429 EXPECT_EQ(-1, AudioFrameOperations::Scale(1.0, 1.0, &frame_)); | 499 EXPECT_EQ(-1, AudioFrameOperations::Scale(1.0, 1.0, &frame_)); |
430 | 500 |
431 frame_.num_channels_ = 3; | 501 frame_.num_channels_ = 3; |
432 EXPECT_EQ(-1, AudioFrameOperations::Scale(1.0, 1.0, &frame_)); | 502 EXPECT_EQ(-1, AudioFrameOperations::Scale(1.0, 1.0, &frame_)); |
433 | 503 |
434 frame_.num_channels_ = 2; | 504 frame_.num_channels_ = 2; |
435 EXPECT_EQ(-1, AudioFrameOperations::Scale(-1.0, 1.0, &frame_)); | 505 EXPECT_EQ(-1, AudioFrameOperations::Scale(-1.0, 1.0, &frame_)); |
(...skipping 16 matching lines...) Expand all Loading... | |
452 SetFrameData(1, -1, &frame_); | 522 SetFrameData(1, -1, &frame_); |
453 EXPECT_EQ(0, AudioFrameOperations::Scale(2.0, 3.0, &frame_)); | 523 EXPECT_EQ(0, AudioFrameOperations::Scale(2.0, 3.0, &frame_)); |
454 | 524 |
455 AudioFrame scaled_frame; | 525 AudioFrame scaled_frame; |
456 scaled_frame.samples_per_channel_ = 320; | 526 scaled_frame.samples_per_channel_ = 320; |
457 scaled_frame.num_channels_ = 2; | 527 scaled_frame.num_channels_ = 2; |
458 SetFrameData(2, -3, &scaled_frame); | 528 SetFrameData(2, -3, &scaled_frame); |
459 VerifyFramesAreEqual(scaled_frame, frame_); | 529 VerifyFramesAreEqual(scaled_frame, frame_); |
460 } | 530 } |
461 | 531 |
532 TEST_F(AudioFrameOperationsTest, ScaleMuted) { | |
533 ASSERT_TRUE(frame_.muted()); | |
534 EXPECT_EQ(0, AudioFrameOperations::Scale(2.0, 3.0, &frame_)); | |
535 EXPECT_TRUE(frame_.muted()); | |
536 } | |
537 | |
462 // TODO(andrew): should fail with a negative scale. | 538 // TODO(andrew): should fail with a negative scale. |
463 TEST_F(AudioFrameOperationsTest, DISABLED_ScaleWithSatFailsWithBadParameters) { | 539 TEST_F(AudioFrameOperationsTest, DISABLED_ScaleWithSatFailsWithBadParameters) { |
464 EXPECT_EQ(-1, AudioFrameOperations::ScaleWithSat(-1.0, &frame_)); | 540 EXPECT_EQ(-1, AudioFrameOperations::ScaleWithSat(-1.0, &frame_)); |
465 } | 541 } |
466 | 542 |
467 TEST_F(AudioFrameOperationsTest, ScaleWithSatDoesNotWrapAround) { | 543 TEST_F(AudioFrameOperationsTest, ScaleWithSatDoesNotWrapAround) { |
468 frame_.num_channels_ = 1; | 544 frame_.num_channels_ = 1; |
469 SetFrameData(4000, &frame_); | 545 SetFrameData(4000, &frame_); |
470 EXPECT_EQ(0, AudioFrameOperations::ScaleWithSat(10.0, &frame_)); | 546 EXPECT_EQ(0, AudioFrameOperations::ScaleWithSat(10.0, &frame_)); |
471 | 547 |
(...skipping 14 matching lines...) Expand all Loading... | |
486 SetFrameData(1, &frame_); | 562 SetFrameData(1, &frame_); |
487 EXPECT_EQ(0, AudioFrameOperations::ScaleWithSat(2.0, &frame_)); | 563 EXPECT_EQ(0, AudioFrameOperations::ScaleWithSat(2.0, &frame_)); |
488 | 564 |
489 AudioFrame scaled_frame; | 565 AudioFrame scaled_frame; |
490 scaled_frame.samples_per_channel_ = 320; | 566 scaled_frame.samples_per_channel_ = 320; |
491 scaled_frame.num_channels_ = 1; | 567 scaled_frame.num_channels_ = 1; |
492 SetFrameData(2, &scaled_frame); | 568 SetFrameData(2, &scaled_frame); |
493 VerifyFramesAreEqual(scaled_frame, frame_); | 569 VerifyFramesAreEqual(scaled_frame, frame_); |
494 } | 570 } |
495 | 571 |
572 TEST_F(AudioFrameOperationsTest, ScaleWithSatMuted) { | |
573 ASSERT_TRUE(frame_.muted()); | |
574 EXPECT_EQ(0, AudioFrameOperations::ScaleWithSat(2.0, &frame_)); | |
575 EXPECT_TRUE(frame_.muted()); | |
576 } | |
577 | |
496 TEST_F(AudioFrameOperationsTest, AddingXToEmptyGivesX) { | 578 TEST_F(AudioFrameOperationsTest, AddingXToEmptyGivesX) { |
497 // When samples_per_channel_ is 0, the frame counts as empty and zero. | 579 // When samples_per_channel_ is 0, the frame counts as empty and zero. |
498 AudioFrame frame_to_add_to; | 580 AudioFrame frame_to_add_to; |
581 frame_to_add_to.mutable_data(); // Unmute the frame. | |
582 ASSERT_FALSE(frame_to_add_to.muted()); | |
499 frame_to_add_to.samples_per_channel_ = 0; | 583 frame_to_add_to.samples_per_channel_ = 0; |
500 frame_to_add_to.num_channels_ = frame_.num_channels_; | 584 frame_to_add_to.num_channels_ = frame_.num_channels_; |
501 | 585 |
586 SetFrameData(1000, &frame_); | |
502 AudioFrameOperations::Add(frame_, &frame_to_add_to); | 587 AudioFrameOperations::Add(frame_, &frame_to_add_to); |
503 VerifyFramesAreEqual(frame_, frame_to_add_to); | 588 VerifyFramesAreEqual(frame_, frame_to_add_to); |
504 } | 589 } |
505 | 590 |
591 TEST_F(AudioFrameOperationsTest, AddingXToMutedGivesX) { | |
592 AudioFrame frame_to_add_to; | |
593 ASSERT_TRUE(frame_to_add_to.muted()); | |
594 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; | |
595 frame_to_add_to.num_channels_ = frame_.num_channels_; | |
596 | |
597 SetFrameData(1000, &frame_); | |
598 AudioFrameOperations::Add(frame_, &frame_to_add_to); | |
599 VerifyFramesAreEqual(frame_, frame_to_add_to); | |
600 } | |
601 | |
602 TEST_F(AudioFrameOperationsTest, AddingMutedToXGivesX) { | |
603 ASSERT_TRUE(frame_.muted()); | |
hlundin-webrtc
2017/03/22 12:07:26
Nit: Move this ASSERT to just before the Add opera
yujo
2017/03/22 19:45:45
Done.
| |
604 | |
605 AudioFrame frame_to_add_to; | |
606 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; | |
607 frame_to_add_to.num_channels_ = frame_.num_channels_; | |
608 SetFrameData(1000, &frame_to_add_to); | |
609 | |
610 AudioFrame frame_copy; | |
611 frame_copy.CopyFrom(frame_to_add_to); | |
612 | |
613 AudioFrameOperations::Add(frame_, &frame_to_add_to); | |
614 VerifyFramesAreEqual(frame_copy, frame_to_add_to); | |
615 } | |
616 | |
506 TEST_F(AudioFrameOperationsTest, AddingTwoFramesProducesTheirSum) { | 617 TEST_F(AudioFrameOperationsTest, AddingTwoFramesProducesTheirSum) { |
507 AudioFrame frame_to_add_to; | 618 AudioFrame frame_to_add_to; |
508 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; | 619 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; |
509 frame_to_add_to.num_channels_ = frame_.num_channels_; | 620 frame_to_add_to.num_channels_ = frame_.num_channels_; |
510 SetFrameData(1000, &frame_to_add_to); | 621 SetFrameData(1000, &frame_to_add_to); |
622 SetFrameData(2000, &frame_); | |
511 | 623 |
512 AudioFrameOperations::Add(frame_, &frame_to_add_to); | 624 AudioFrameOperations::Add(frame_, &frame_to_add_to); |
513 SetFrameData(frame_.data_[0] + 1000, &frame_); | 625 SetFrameData(frame_.data()[0] + 1000, &frame_); |
514 VerifyFramesAreEqual(frame_, frame_to_add_to); | 626 VerifyFramesAreEqual(frame_, frame_to_add_to); |
515 } | 627 } |
628 | |
516 } // namespace | 629 } // namespace |
517 } // namespace webrtc | 630 } // namespace webrtc |
OLD | NEW |