Chromium Code Reviews| Index: webrtc/audio/utility/audio_frame_operations_unittest.cc |
| diff --git a/webrtc/audio/utility/audio_frame_operations_unittest.cc b/webrtc/audio/utility/audio_frame_operations_unittest.cc |
| index 096ea38d9d52855d94802bf7d3186e8912da6ed2..10dcd6f0cb0da86cf515ea098f44db65d99b4989 100644 |
| --- a/webrtc/audio/utility/audio_frame_operations_unittest.cc |
| +++ b/webrtc/audio/utility/audio_frame_operations_unittest.cc |
| @@ -32,24 +32,28 @@ void SetFrameData(int16_t ch1, |
| int16_t ch3, |
| int16_t ch4, |
| AudioFrame* frame) { |
| + int16_t* frame_data = frame->mutable_data(); |
| for (size_t i = 0; i < frame->samples_per_channel_ * 4; i += 4) { |
| - frame->data_[i] = ch1; |
| - frame->data_[i + 1] = ch2; |
| - frame->data_[i + 2] = ch3; |
| - frame->data_[i + 3] = ch4; |
| + frame_data[i] = ch1; |
| + frame_data[i + 1] = ch2; |
| + frame_data[i + 2] = ch3; |
| + frame_data[i + 3] = ch4; |
| } |
| } |
| void SetFrameData(int16_t left, int16_t right, AudioFrame* frame) { |
| + int16_t* frame_data = frame->mutable_data(); |
| for (size_t i = 0; i < frame->samples_per_channel_ * 2; i += 2) { |
| - frame->data_[i] = left; |
| - frame->data_[i + 1] = right; |
| + frame_data[i] = left; |
| + frame_data[i + 1] = right; |
| } |
| } |
| void SetFrameData(int16_t data, AudioFrame* frame) { |
| - for (size_t i = 0; i < frame->samples_per_channel_; i++) { |
| - frame->data_[i] = data; |
| + int16_t* frame_data = frame->mutable_data(); |
| + for (size_t i = 0; |
| + i < frame->samples_per_channel_ * frame->num_channels_; i++) { |
| + frame_data[i] = data; |
| } |
| } |
| @@ -57,10 +61,13 @@ void VerifyFramesAreEqual(const AudioFrame& frame1, const AudioFrame& frame2) { |
| EXPECT_EQ(frame1.num_channels_, frame2.num_channels_); |
| EXPECT_EQ(frame1.samples_per_channel_, |
| frame2.samples_per_channel_); |
| + const int16_t* frame1_data = frame1.data(); |
| + const int16_t* frame2_data = frame2.data(); |
| for (size_t i = 0; i < frame1.samples_per_channel_ * frame1.num_channels_; |
| i++) { |
| - EXPECT_EQ(frame1.data_[i], frame2.data_[i]); |
| + EXPECT_EQ(frame1_data[i], frame2_data[i]); |
| } |
| + EXPECT_EQ(frame1.muted(), frame2.muted()); |
| } |
| void InitFrame(AudioFrame* frame, size_t channels, size_t samples_per_channel, |
| @@ -81,7 +88,7 @@ void InitFrame(AudioFrame* frame, size_t channels, size_t samples_per_channel, |
| int16_t GetChannelData(const AudioFrame& frame, size_t channel, size_t index) { |
| RTC_DCHECK_LT(channel, frame.num_channels_); |
| RTC_DCHECK_LT(index, frame.samples_per_channel_); |
| - return frame.data_[index * frame.num_channels_ + channel]; |
| + return frame.data()[index * frame.num_channels_ + channel]; |
| } |
| void VerifyFrameDataBounds(const AudioFrame& frame, size_t channel, int16_t max, |
| @@ -114,6 +121,13 @@ TEST_F(AudioFrameOperationsTest, MonoToStereoSucceeds) { |
| VerifyFramesAreEqual(stereo_frame, frame_); |
| } |
| +TEST_F(AudioFrameOperationsTest, MonoToStereoMuted) { |
| + frame_.num_channels_ = 1; |
| + ASSERT_TRUE(frame_.muted()); |
| + EXPECT_EQ(0, AudioFrameOperations::MonoToStereo(&frame_)); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| TEST_F(AudioFrameOperationsTest, MonoToStereoBufferSucceeds) { |
| AudioFrame target_frame; |
| frame_.num_channels_ = 1; |
| @@ -122,8 +136,8 @@ TEST_F(AudioFrameOperationsTest, MonoToStereoBufferSucceeds) { |
| target_frame.num_channels_ = 2; |
| target_frame.samples_per_channel_ = frame_.samples_per_channel_; |
| - AudioFrameOperations::MonoToStereo(frame_.data_, frame_.samples_per_channel_, |
| - target_frame.data_); |
| + AudioFrameOperations::MonoToStereo(frame_.data(), frame_.samples_per_channel_, |
| + target_frame.mutable_data()); |
| AudioFrame stereo_frame; |
| stereo_frame.samples_per_channel_ = 320; |
| @@ -148,6 +162,12 @@ TEST_F(AudioFrameOperationsTest, StereoToMonoSucceeds) { |
| VerifyFramesAreEqual(mono_frame, frame_); |
| } |
| +TEST_F(AudioFrameOperationsTest, StereoToMonoMuted) { |
| + ASSERT_TRUE(frame_.muted()); |
| + EXPECT_EQ(0, AudioFrameOperations::StereoToMono(&frame_)); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| TEST_F(AudioFrameOperationsTest, StereoToMonoBufferSucceeds) { |
| AudioFrame target_frame; |
| SetFrameData(4, 2, &frame_); |
| @@ -155,8 +175,8 @@ TEST_F(AudioFrameOperationsTest, StereoToMonoBufferSucceeds) { |
| target_frame.num_channels_ = 1; |
| target_frame.samples_per_channel_ = frame_.samples_per_channel_; |
| - AudioFrameOperations::StereoToMono(frame_.data_, frame_.samples_per_channel_, |
| - target_frame.data_); |
| + AudioFrameOperations::StereoToMono(frame_.data(), frame_.samples_per_channel_, |
| + target_frame.mutable_data()); |
| AudioFrame mono_frame; |
| mono_frame.samples_per_channel_ = 320; |
| @@ -196,6 +216,13 @@ TEST_F(AudioFrameOperationsTest, QuadToMonoSucceeds) { |
| VerifyFramesAreEqual(mono_frame, frame_); |
| } |
| +TEST_F(AudioFrameOperationsTest, QuadToMonoMuted) { |
| + frame_.num_channels_ = 4; |
| + ASSERT_TRUE(frame_.muted()); |
| + EXPECT_EQ(0, AudioFrameOperations::QuadToMono(&frame_)); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| TEST_F(AudioFrameOperationsTest, QuadToMonoBufferSucceeds) { |
| AudioFrame target_frame; |
| frame_.num_channels_ = 4; |
| @@ -204,8 +231,8 @@ TEST_F(AudioFrameOperationsTest, QuadToMonoBufferSucceeds) { |
| target_frame.num_channels_ = 1; |
| target_frame.samples_per_channel_ = frame_.samples_per_channel_; |
| - AudioFrameOperations::QuadToMono(frame_.data_, frame_.samples_per_channel_, |
| - target_frame.data_); |
| + AudioFrameOperations::QuadToMono(frame_.data(), frame_.samples_per_channel_, |
| + target_frame.mutable_data()); |
| AudioFrame mono_frame; |
| mono_frame.samples_per_channel_ = 320; |
| mono_frame.num_channels_ = 1; |
| @@ -244,6 +271,13 @@ TEST_F(AudioFrameOperationsTest, QuadToStereoSucceeds) { |
| VerifyFramesAreEqual(stereo_frame, frame_); |
| } |
| +TEST_F(AudioFrameOperationsTest, QuadToStereoMuted) { |
| + frame_.num_channels_ = 4; |
| + ASSERT_TRUE(frame_.muted()); |
| + EXPECT_EQ(0, AudioFrameOperations::QuadToStereo(&frame_)); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| TEST_F(AudioFrameOperationsTest, QuadToStereoBufferSucceeds) { |
| AudioFrame target_frame; |
| frame_.num_channels_ = 4; |
| @@ -252,8 +286,8 @@ TEST_F(AudioFrameOperationsTest, QuadToStereoBufferSucceeds) { |
| target_frame.num_channels_ = 2; |
| target_frame.samples_per_channel_ = frame_.samples_per_channel_; |
| - AudioFrameOperations::QuadToStereo(frame_.data_, frame_.samples_per_channel_, |
| - target_frame.data_); |
| + AudioFrameOperations::QuadToStereo(frame_.data(), frame_.samples_per_channel_, |
| + target_frame.mutable_data()); |
| AudioFrame stereo_frame; |
| stereo_frame.samples_per_channel_ = 320; |
| stereo_frame.num_channels_ = 2; |
| @@ -285,6 +319,12 @@ TEST_F(AudioFrameOperationsTest, SwapStereoChannelsSucceedsOnStereo) { |
| VerifyFramesAreEqual(swapped_frame, frame_); |
| } |
| +TEST_F(AudioFrameOperationsTest, SwapStereoChannelsMuted) { |
| + ASSERT_TRUE(frame_.muted()); |
| + AudioFrameOperations::SwapStereoChannels(&frame_); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| TEST_F(AudioFrameOperationsTest, SwapStereoChannelsFailsOnMono) { |
| frame_.num_channels_ = 1; |
| // Set data to "stereo", despite it being a mono frame. |
| @@ -313,9 +353,9 @@ TEST_F(AudioFrameOperationsTest, MuteEnabled) { |
| AudioFrameOperations::Mute(&frame_, true, true); |
| AudioFrame muted_frame; |
| - muted_frame.samples_per_channel_ = 320; |
| - muted_frame.num_channels_ = 2; |
| - SetFrameData(0, 0, &muted_frame); |
| + muted_frame.samples_per_channel_ = frame_.samples_per_channel_; |
| + muted_frame.num_channels_ = frame_.num_channels_; |
| + ASSERT_TRUE(muted_frame.muted()); |
| VerifyFramesAreEqual(muted_frame, frame_); |
| } |
| @@ -423,6 +463,36 @@ TEST_F(AudioFrameOperationsTest, MuteEndStereoShort) { |
| EXPECT_EQ(-999, GetChannelData(frame_, 1, 92)); |
| } |
| +TEST_F(AudioFrameOperationsTest, MuteBeginAlreadyMuted) { |
| + ASSERT_TRUE(frame_.muted()); |
| + AudioFrameOperations::Mute(&frame_, false, true); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| +TEST_F(AudioFrameOperationsTest, MuteEndAlreadyMuted) { |
| + ASSERT_TRUE(frame_.muted()); |
| + AudioFrameOperations::Mute(&frame_, true, false); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| +TEST_F(AudioFrameOperationsTest, ApplyHalfGainSucceeds) { |
| + SetFrameData(2, &frame_); |
| + |
| + AudioFrame half_gain_frame; |
| + half_gain_frame.num_channels_ = frame_.num_channels_; |
| + half_gain_frame.samples_per_channel_ = frame_.samples_per_channel_; |
| + SetFrameData(1, &half_gain_frame); |
| + |
| + AudioFrameOperations::ApplyHalfGain(&frame_); |
| + VerifyFramesAreEqual(half_gain_frame, frame_); |
| +} |
| + |
| +TEST_F(AudioFrameOperationsTest, ApplyHalfGainMuted) { |
| + ASSERT_TRUE(frame_.muted()); |
| + AudioFrameOperations::ApplyHalfGain(&frame_); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| // TODO(andrew): should not allow negative scales. |
| TEST_F(AudioFrameOperationsTest, DISABLED_ScaleFailsWithBadParameters) { |
| frame_.num_channels_ = 1; |
| @@ -459,6 +529,12 @@ TEST_F(AudioFrameOperationsTest, ScaleSucceeds) { |
| VerifyFramesAreEqual(scaled_frame, frame_); |
| } |
| +TEST_F(AudioFrameOperationsTest, ScaleMuted) { |
| + ASSERT_TRUE(frame_.muted()); |
| + EXPECT_EQ(0, AudioFrameOperations::Scale(2.0, 3.0, &frame_)); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| // TODO(andrew): should fail with a negative scale. |
| TEST_F(AudioFrameOperationsTest, DISABLED_ScaleWithSatFailsWithBadParameters) { |
| EXPECT_EQ(-1, AudioFrameOperations::ScaleWithSat(-1.0, &frame_)); |
| @@ -493,25 +569,62 @@ TEST_F(AudioFrameOperationsTest, ScaleWithSatSucceeds) { |
| VerifyFramesAreEqual(scaled_frame, frame_); |
| } |
| +TEST_F(AudioFrameOperationsTest, ScaleWithSatMuted) { |
| + ASSERT_TRUE(frame_.muted()); |
| + EXPECT_EQ(0, AudioFrameOperations::ScaleWithSat(2.0, &frame_)); |
| + EXPECT_TRUE(frame_.muted()); |
| +} |
| + |
| TEST_F(AudioFrameOperationsTest, AddingXToEmptyGivesX) { |
| // When samples_per_channel_ is 0, the frame counts as empty and zero. |
| AudioFrame frame_to_add_to; |
| + frame_to_add_to.mutable_data(); // Unmute the frame. |
| + ASSERT_FALSE(frame_to_add_to.muted()); |
| frame_to_add_to.samples_per_channel_ = 0; |
| frame_to_add_to.num_channels_ = frame_.num_channels_; |
| + SetFrameData(1000, &frame_); |
| + AudioFrameOperations::Add(frame_, &frame_to_add_to); |
| + VerifyFramesAreEqual(frame_, frame_to_add_to); |
| +} |
| + |
| +TEST_F(AudioFrameOperationsTest, AddingXToMutedGivesX) { |
| + AudioFrame frame_to_add_to; |
| + ASSERT_TRUE(frame_to_add_to.muted()); |
| + frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; |
| + frame_to_add_to.num_channels_ = frame_.num_channels_; |
| + |
| + SetFrameData(1000, &frame_); |
| AudioFrameOperations::Add(frame_, &frame_to_add_to); |
| VerifyFramesAreEqual(frame_, frame_to_add_to); |
| } |
| +TEST_F(AudioFrameOperationsTest, AddingMutedToXGivesX) { |
| + 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.
|
| + |
| + AudioFrame frame_to_add_to; |
| + frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; |
| + frame_to_add_to.num_channels_ = frame_.num_channels_; |
| + SetFrameData(1000, &frame_to_add_to); |
| + |
| + AudioFrame frame_copy; |
| + frame_copy.CopyFrom(frame_to_add_to); |
| + |
| + AudioFrameOperations::Add(frame_, &frame_to_add_to); |
| + VerifyFramesAreEqual(frame_copy, frame_to_add_to); |
| +} |
| + |
| TEST_F(AudioFrameOperationsTest, AddingTwoFramesProducesTheirSum) { |
| AudioFrame frame_to_add_to; |
| frame_to_add_to.samples_per_channel_ = frame_.samples_per_channel_; |
| frame_to_add_to.num_channels_ = frame_.num_channels_; |
| SetFrameData(1000, &frame_to_add_to); |
| + SetFrameData(2000, &frame_); |
| AudioFrameOperations::Add(frame_, &frame_to_add_to); |
| - SetFrameData(frame_.data_[0] + 1000, &frame_); |
| + SetFrameData(frame_.data()[0] + 1000, &frame_); |
| VerifyFramesAreEqual(frame_, frame_to_add_to); |
| } |
| + |
| } // namespace |
| } // namespace webrtc |