| 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 AudioFrame frame_to_add_to; |
| 604 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; |
| 605 frame_to_add_to.num_channels_ = frame_.num_channels_; |
| 606 SetFrameData(1000, &frame_to_add_to); |
| 607 |
| 608 AudioFrame frame_copy; |
| 609 frame_copy.CopyFrom(frame_to_add_to); |
| 610 |
| 611 ASSERT_TRUE(frame_.muted()); |
| 612 AudioFrameOperations::Add(frame_, &frame_to_add_to); |
| 613 VerifyFramesAreEqual(frame_copy, frame_to_add_to); |
| 614 } |
| 615 |
| 506 TEST_F(AudioFrameOperationsTest, AddingTwoFramesProducesTheirSum) { | 616 TEST_F(AudioFrameOperationsTest, AddingTwoFramesProducesTheirSum) { |
| 507 AudioFrame frame_to_add_to; | 617 AudioFrame frame_to_add_to; |
| 508 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; | 618 frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; |
| 509 frame_to_add_to.num_channels_ = frame_.num_channels_; | 619 frame_to_add_to.num_channels_ = frame_.num_channels_; |
| 510 SetFrameData(1000, &frame_to_add_to); | 620 SetFrameData(1000, &frame_to_add_to); |
| 621 SetFrameData(2000, &frame_); |
| 511 | 622 |
| 512 AudioFrameOperations::Add(frame_, &frame_to_add_to); | 623 AudioFrameOperations::Add(frame_, &frame_to_add_to); |
| 513 SetFrameData(frame_.data_[0] + 1000, &frame_); | 624 SetFrameData(frame_.data()[0] + 1000, &frame_); |
| 514 VerifyFramesAreEqual(frame_, frame_to_add_to); | 625 VerifyFramesAreEqual(frame_, frame_to_add_to); |
| 515 } | 626 } |
| 627 |
| 516 } // namespace | 628 } // namespace |
| 517 } // namespace webrtc | 629 } // namespace webrtc |
| OLD | NEW |