| 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);
 | 
|  
 | 
| 
 |