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 36377bd02d8e0db830e7a8353521703908cfc5d1..e3c2d628035621e31aa0ac9107f82c8acdfbfd2c 100644 |
--- a/webrtc/audio/utility/audio_frame_operations_unittest.cc |
+++ b/webrtc/audio/utility/audio_frame_operations_unittest.cc |
@@ -27,6 +27,19 @@ class AudioFrameOperationsTest : public ::testing::Test { |
AudioFrame frame_; |
}; |
+void SetFrameData(int16_t ch1, |
+ int16_t ch2, |
+ int16_t ch3, |
+ int16_t ch4, |
+ AudioFrame* frame) { |
+ 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; |
+ } |
+} |
+ |
void SetFrameData(AudioFrame* frame, int16_t left, int16_t right) { |
for (size_t i = 0; i < frame->samples_per_channel_ * 2; i += 2) { |
frame->data_[i] = left; |
@@ -145,6 +158,104 @@ TEST_F(AudioFrameOperationsTest, StereoToMonoDoesNotWrapAround) { |
VerifyFramesAreEqual(mono_frame, frame_); |
} |
+TEST_F(AudioFrameOperationsTest, QuadToMonoFailsWithBadParameters) { |
+ frame_.num_channels_ = 1; |
+ EXPECT_EQ(-1, AudioFrameOperations::QuadToMono(&frame_)); |
+ frame_.num_channels_ = 2; |
+ EXPECT_EQ(-1, AudioFrameOperations::QuadToMono(&frame_)); |
+} |
+ |
+TEST_F(AudioFrameOperationsTest, QuadToMonoSucceeds) { |
+ frame_.num_channels_ = 4; |
+ SetFrameData(4, 2, 6, 8, &frame_); |
+ AudioFrame temp_frame; |
+ temp_frame.CopyFrom(frame_); |
+ EXPECT_EQ(0, AudioFrameOperations::QuadToMono(&frame_)); |
+ |
+ AudioFrame mono_frame; |
+ mono_frame.samples_per_channel_ = 320; |
+ mono_frame.num_channels_ = 1; |
+ SetFrameData(&mono_frame, 5); |
+ VerifyFramesAreEqual(mono_frame, frame_); |
+} |
+ |
+TEST_F(AudioFrameOperationsTest, QuadToMonoBufferSucceeds) { |
+ AudioFrame target_frame; |
+ frame_.num_channels_ = 4; |
+ SetFrameData(4, 2, 6, 8, &frame_); |
+ |
+ 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_); |
+ AudioFrame mono_frame; |
+ mono_frame.samples_per_channel_ = 320; |
+ mono_frame.num_channels_ = 1; |
+ SetFrameData(&mono_frame, 5); |
+ VerifyFramesAreEqual(mono_frame, target_frame); |
+} |
+ |
+TEST_F(AudioFrameOperationsTest, QuadToMonoDoesNotWrapAround) { |
+ frame_.num_channels_ = 4; |
+ SetFrameData(-32768, -32768, -32768, -32768, &frame_); |
+ EXPECT_EQ(0, AudioFrameOperations::QuadToMono(&frame_)); |
+ |
+ AudioFrame mono_frame; |
+ mono_frame.samples_per_channel_ = 320; |
+ mono_frame.num_channels_ = 1; |
+ SetFrameData(&mono_frame, -32768); |
+ VerifyFramesAreEqual(mono_frame, frame_); |
+} |
+ |
+TEST_F(AudioFrameOperationsTest, QuadToStereoFailsWithBadParameters) { |
+ frame_.num_channels_ = 1; |
+ EXPECT_EQ(-1, AudioFrameOperations::QuadToStereo(&frame_)); |
+ frame_.num_channels_ = 2; |
+ EXPECT_EQ(-1, AudioFrameOperations::QuadToStereo(&frame_)); |
+} |
+ |
+TEST_F(AudioFrameOperationsTest, QuadToStereoSucceeds) { |
+ frame_.num_channels_ = 4; |
+ SetFrameData(4, 2, 6, 8, &frame_); |
+ EXPECT_EQ(0, AudioFrameOperations::QuadToStereo(&frame_)); |
+ |
+ AudioFrame stereo_frame; |
+ stereo_frame.samples_per_channel_ = 320; |
+ stereo_frame.num_channels_ = 2; |
+ SetFrameData(&stereo_frame, 3, 7); |
+ VerifyFramesAreEqual(stereo_frame, frame_); |
+} |
+ |
+TEST_F(AudioFrameOperationsTest, QuadToStereoBufferSucceeds) { |
+ AudioFrame target_frame; |
+ frame_.num_channels_ = 4; |
+ SetFrameData(4, 2, 6, 8, &frame_); |
+ |
+ 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_); |
+ AudioFrame stereo_frame; |
+ stereo_frame.samples_per_channel_ = 320; |
+ stereo_frame.num_channels_ = 2; |
+ SetFrameData(&stereo_frame, 3, 7); |
+ VerifyFramesAreEqual(stereo_frame, target_frame); |
+} |
+ |
+TEST_F(AudioFrameOperationsTest, QuadToStereoDoesNotWrapAround) { |
+ frame_.num_channels_ = 4; |
+ SetFrameData(-32768, -32768, -32768, -32768, &frame_); |
+ EXPECT_EQ(0, AudioFrameOperations::QuadToStereo(&frame_)); |
+ |
+ AudioFrame stereo_frame; |
+ stereo_frame.samples_per_channel_ = 320; |
+ stereo_frame.num_channels_ = 2; |
+ SetFrameData(&stereo_frame, -32768, -32768); |
+ VerifyFramesAreEqual(stereo_frame, frame_); |
+} |
+ |
TEST_F(AudioFrameOperationsTest, SwapStereoChannelsSucceedsOnStereo) { |
SetFrameData(&frame_, 0, 1); |