| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 EXPECT_TRUE(encoded_info.redundant.empty()); | 49 EXPECT_TRUE(encoded_info.redundant.empty()); |
| 50 EXPECT_EQ(expected_out_length, encoded_info.encoded_bytes); | 50 EXPECT_EQ(expected_out_length, encoded_info.encoded_bytes); |
| 51 EXPECT_EQ(expected_timestamp, encoded_info.encoded_timestamp); | 51 EXPECT_EQ(expected_timestamp, encoded_info.encoded_timestamp); |
| 52 if (expected_payload_type >= 0) | 52 if (expected_payload_type >= 0) |
| 53 EXPECT_EQ(expected_payload_type, encoded_info.payload_type); | 53 EXPECT_EQ(expected_payload_type, encoded_info.payload_type); |
| 54 if (expected_send_even_if_empty >= 0) | 54 if (expected_send_even_if_empty >= 0) |
| 55 EXPECT_EQ(static_cast<bool>(expected_send_even_if_empty), | 55 EXPECT_EQ(static_cast<bool>(expected_send_even_if_empty), |
| 56 encoded_info.send_even_if_empty); | 56 encoded_info.send_even_if_empty); |
| 57 } | 57 } |
| 58 | 58 |
| 59 // Verify that the speech encoder's Reset method is called when CNG or RED |
| 60 // (or both) are switched on, but not when they're switched off. |
| 61 void TestCngAndRedResetSpeechEncoder(bool use_cng, bool use_red) { |
| 62 MockAudioEncoder speech_encoder; |
| 63 EXPECT_CALL(speech_encoder, NumChannels()) |
| 64 .WillRepeatedly(Return(1)); |
| 65 EXPECT_CALL(speech_encoder, Max10MsFramesInAPacket()) |
| 66 .WillRepeatedly(Return(2)); |
| 67 EXPECT_CALL(speech_encoder, SampleRateHz()) |
| 68 .WillRepeatedly(Return(8000)); |
| 69 { |
| 70 InSequence s; |
| 71 EXPECT_CALL(speech_encoder, Mark("start off")); |
| 72 EXPECT_CALL(speech_encoder, Mark("switch on")); |
| 73 if (use_cng || use_red) |
| 74 EXPECT_CALL(speech_encoder, Reset()); |
| 75 EXPECT_CALL(speech_encoder, Mark("start on")); |
| 76 if (use_cng || use_red) |
| 77 EXPECT_CALL(speech_encoder, Reset()); |
| 78 EXPECT_CALL(speech_encoder, Mark("switch off")); |
| 79 EXPECT_CALL(speech_encoder, Die()); |
| 80 } |
| 81 |
| 82 int cng_pt = use_cng ? 17 : -1; |
| 83 int red_pt = use_red ? 19 : -1; |
| 84 speech_encoder.Mark("start off"); |
| 85 codec_owner_.SetEncoders(&speech_encoder, -1, VADNormal, -1); |
| 86 speech_encoder.Mark("switch on"); |
| 87 codec_owner_.ChangeCngAndRed(cng_pt, VADNormal, red_pt); |
| 88 speech_encoder.Mark("start on"); |
| 89 codec_owner_.SetEncoders(&speech_encoder, cng_pt, VADNormal, red_pt); |
| 90 speech_encoder.Mark("switch off"); |
| 91 codec_owner_.ChangeCngAndRed(-1, VADNormal, -1); |
| 92 } |
| 93 |
| 59 CodecOwner codec_owner_; | 94 CodecOwner codec_owner_; |
| 60 uint32_t timestamp_; | 95 uint32_t timestamp_; |
| 61 }; | 96 }; |
| 62 | 97 |
| 63 // This test verifies that CNG frames are delivered as expected. Since the frame | 98 // This test verifies that CNG frames are delivered as expected. Since the frame |
| 64 // size is set to 20 ms, we expect the first encode call to produce no output | 99 // size is set to 20 ms, we expect the first encode call to produce no output |
| 65 // (which is signaled as 0 bytes output of type kNoEncoding). The next encode | 100 // (which is signaled as 0 bytes output of type kNoEncoding). The next encode |
| 66 // call should produce one SID frame of 9 bytes. The third call should not | 101 // call should produce one SID frame of 9 bytes. The third call should not |
| 67 // result in any output (just like the first one). The fourth and final encode | 102 // result in any output (just like the first one). The fourth and final encode |
| 68 // call should produce an "empty frame", which is like no output, but with | 103 // call should produce an "empty frame", which is like no output, but with |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 arraysize(encoded), encoded); | 173 arraysize(encoded), encoded); |
| 139 external_encoder.Mark("B"); | 174 external_encoder.Mark("B"); |
| 140 | 175 |
| 141 // Change back to external encoder again. | 176 // Change back to external encoder again. |
| 142 codec_owner_.SetEncoders(&external_encoder, -1, VADNormal, -1); | 177 codec_owner_.SetEncoders(&external_encoder, -1, VADNormal, -1); |
| 143 info = codec_owner_.Encoder()->Encode(2, audio, arraysize(audio), | 178 info = codec_owner_.Encoder()->Encode(2, audio, arraysize(audio), |
| 144 arraysize(encoded), encoded); | 179 arraysize(encoded), encoded); |
| 145 EXPECT_EQ(2u, info.encoded_timestamp); | 180 EXPECT_EQ(2u, info.encoded_timestamp); |
| 146 } | 181 } |
| 147 | 182 |
| 183 TEST_F(CodecOwnerTest, CngResetsSpeechEncoder) { |
| 184 TestCngAndRedResetSpeechEncoder(true, false); |
| 185 } |
| 186 |
| 187 TEST_F(CodecOwnerTest, RedResetsSpeechEncoder) { |
| 188 TestCngAndRedResetSpeechEncoder(false, true); |
| 189 } |
| 190 |
| 191 TEST_F(CodecOwnerTest, CngAndRedResetsSpeechEncoder) { |
| 192 TestCngAndRedResetSpeechEncoder(true, true); |
| 193 } |
| 194 |
| 195 TEST_F(CodecOwnerTest, NoCngAndRedNoSpeechEncoderReset) { |
| 196 TestCngAndRedResetSpeechEncoder(false, false); |
| 197 } |
| 198 |
| 148 } // namespace acm2 | 199 } // namespace acm2 |
| 149 } // namespace webrtc | 200 } // namespace webrtc |
| OLD | NEW |