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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 }; | 44 }; |
45 | 45 |
46 AudioEncoderOpusStates CreateCodec(size_t num_channels) { | 46 AudioEncoderOpusStates CreateCodec(size_t num_channels) { |
47 AudioEncoderOpusStates states; | 47 AudioEncoderOpusStates states; |
48 states.mock_audio_network_adaptor = | 48 states.mock_audio_network_adaptor = |
49 std::make_shared<MockAudioNetworkAdaptor*>(nullptr); | 49 std::make_shared<MockAudioNetworkAdaptor*>(nullptr); |
50 | 50 |
51 std::weak_ptr<MockAudioNetworkAdaptor*> mock_ptr( | 51 std::weak_ptr<MockAudioNetworkAdaptor*> mock_ptr( |
52 states.mock_audio_network_adaptor); | 52 states.mock_audio_network_adaptor); |
53 AudioEncoderOpus::AudioNetworkAdaptorCreator creator = [mock_ptr]( | 53 AudioEncoderOpus::AudioNetworkAdaptorCreator creator = [mock_ptr]( |
54 const std::string&, const Clock*) { | 54 const std::string&, int min_receiver_frame_length_ms, |
| 55 int max_receiver_frame_length_ms, const Clock*) { |
55 std::unique_ptr<MockAudioNetworkAdaptor> adaptor( | 56 std::unique_ptr<MockAudioNetworkAdaptor> adaptor( |
56 new NiceMock<MockAudioNetworkAdaptor>()); | 57 new NiceMock<MockAudioNetworkAdaptor>()); |
57 EXPECT_CALL(*adaptor, Die()); | 58 EXPECT_CALL(*adaptor, Die()); |
58 if (auto sp = mock_ptr.lock()) { | 59 if (auto sp = mock_ptr.lock()) { |
59 *sp = adaptor.get(); | 60 *sp = adaptor.get(); |
60 } else { | 61 } else { |
61 RTC_NOTREACHED(); | 62 RTC_NOTREACHED(); |
62 } | 63 } |
63 return adaptor; | 64 return adaptor; |
64 }; | 65 }; |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 TestSetPacketLossRate(states.encoder.get(), I(1.00 , 0.18 + eps), 0.20); | 218 TestSetPacketLossRate(states.encoder.get(), I(1.00 , 0.18 + eps), 0.20); |
218 TestSetPacketLossRate(states.encoder.get(), I(0.18 - eps, 0.09 + eps), 0.10); | 219 TestSetPacketLossRate(states.encoder.get(), I(0.18 - eps, 0.09 + eps), 0.10); |
219 TestSetPacketLossRate(states.encoder.get(), I(0.09 - eps, 0.04 + eps), 0.05); | 220 TestSetPacketLossRate(states.encoder.get(), I(0.09 - eps, 0.04 + eps), 0.05); |
220 TestSetPacketLossRate(states.encoder.get(), I(0.04 - eps, 0.01 + eps), 0.01); | 221 TestSetPacketLossRate(states.encoder.get(), I(0.04 - eps, 0.01 + eps), 0.01); |
221 TestSetPacketLossRate(states.encoder.get(), I(0.01 - eps, 0.00 ), 0.00); | 222 TestSetPacketLossRate(states.encoder.get(), I(0.01 - eps, 0.00 ), 0.00); |
222 // clang-format on | 223 // clang-format on |
223 } | 224 } |
224 | 225 |
225 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetUplinkBandwidth) { | 226 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetUplinkBandwidth) { |
226 auto states = CreateCodec(2); | 227 auto states = CreateCodec(2); |
227 printf("passed!\n"); | 228 states.encoder->EnableAudioNetworkAdaptor("", 0, 0, nullptr); |
228 states.encoder->EnableAudioNetworkAdaptor("", nullptr); | |
229 | 229 |
230 auto config = CreateEncoderRuntimeConfig(); | 230 auto config = CreateEncoderRuntimeConfig(); |
231 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) | 231 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) |
232 .WillOnce(Return(config)); | 232 .WillOnce(Return(config)); |
233 | 233 |
234 // Since using mock audio network adaptor, any bandwidth value is fine. | 234 // Since using mock audio network adaptor, any bandwidth value is fine. |
235 constexpr int kUplinkBandwidth = 50000; | 235 constexpr int kUplinkBandwidth = 50000; |
236 EXPECT_CALL(**states.mock_audio_network_adaptor, | 236 EXPECT_CALL(**states.mock_audio_network_adaptor, |
237 SetUplinkBandwidth(kUplinkBandwidth)); | 237 SetUplinkBandwidth(kUplinkBandwidth)); |
238 states.encoder->OnReceivedUplinkBandwidth(kUplinkBandwidth); | 238 states.encoder->OnReceivedUplinkBandwidth(kUplinkBandwidth); |
239 | 239 |
240 CheckEncoderRuntimeConfig(states.encoder.get(), config); | 240 CheckEncoderRuntimeConfig(states.encoder.get(), config); |
241 } | 241 } |
242 | 242 |
243 TEST(AudioEncoderOpusTest, | 243 TEST(AudioEncoderOpusTest, |
244 InvokeAudioNetworkAdaptorOnSetUplinkPacketLossFraction) { | 244 InvokeAudioNetworkAdaptorOnSetUplinkPacketLossFraction) { |
245 auto states = CreateCodec(2); | 245 auto states = CreateCodec(2); |
246 states.encoder->EnableAudioNetworkAdaptor("", nullptr); | 246 states.encoder->EnableAudioNetworkAdaptor("", 0, 0, nullptr); |
247 | 247 |
248 auto config = CreateEncoderRuntimeConfig(); | 248 auto config = CreateEncoderRuntimeConfig(); |
249 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) | 249 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) |
250 .WillOnce(Return(config)); | 250 .WillOnce(Return(config)); |
251 | 251 |
252 // Since using mock audio network adaptor, any packet loss fraction is fine. | 252 // Since using mock audio network adaptor, any packet loss fraction is fine. |
253 constexpr float kUplinkPacketLoss = 0.1f; | 253 constexpr float kUplinkPacketLoss = 0.1f; |
254 EXPECT_CALL(**states.mock_audio_network_adaptor, | 254 EXPECT_CALL(**states.mock_audio_network_adaptor, |
255 SetUplinkPacketLossFraction(kUplinkPacketLoss)); | 255 SetUplinkPacketLossFraction(kUplinkPacketLoss)); |
256 states.encoder->OnReceivedUplinkPacketLossFraction(kUplinkPacketLoss); | 256 states.encoder->OnReceivedUplinkPacketLossFraction(kUplinkPacketLoss); |
257 | 257 |
258 CheckEncoderRuntimeConfig(states.encoder.get(), config); | 258 CheckEncoderRuntimeConfig(states.encoder.get(), config); |
259 } | 259 } |
260 | 260 |
261 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetTargetAudioBitrate) { | 261 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetTargetAudioBitrate) { |
262 auto states = CreateCodec(2); | 262 auto states = CreateCodec(2); |
263 states.encoder->EnableAudioNetworkAdaptor("", nullptr); | 263 states.encoder->EnableAudioNetworkAdaptor("", 0, 0, nullptr); |
264 | 264 |
265 auto config = CreateEncoderRuntimeConfig(); | 265 auto config = CreateEncoderRuntimeConfig(); |
266 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) | 266 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) |
267 .WillOnce(Return(config)); | 267 .WillOnce(Return(config)); |
268 | 268 |
269 // Since using mock audio network adaptor, any target audio bitrate is fine. | 269 // Since using mock audio network adaptor, any target audio bitrate is fine. |
270 constexpr int kTargetAudioBitrate = 30000; | 270 constexpr int kTargetAudioBitrate = 30000; |
271 EXPECT_CALL(**states.mock_audio_network_adaptor, | 271 EXPECT_CALL(**states.mock_audio_network_adaptor, |
272 SetTargetAudioBitrate(kTargetAudioBitrate)); | 272 SetTargetAudioBitrate(kTargetAudioBitrate)); |
273 states.encoder->OnReceivedTargetAudioBitrate(kTargetAudioBitrate); | 273 states.encoder->OnReceivedTargetAudioBitrate(kTargetAudioBitrate); |
274 | 274 |
275 CheckEncoderRuntimeConfig(states.encoder.get(), config); | 275 CheckEncoderRuntimeConfig(states.encoder.get(), config); |
276 } | 276 } |
277 | 277 |
278 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetRtt) { | 278 TEST(AudioEncoderOpusTest, InvokeAudioNetworkAdaptorOnSetRtt) { |
279 auto states = CreateCodec(2); | 279 auto states = CreateCodec(2); |
280 states.encoder->EnableAudioNetworkAdaptor("", nullptr); | 280 states.encoder->EnableAudioNetworkAdaptor("", 0, 0, nullptr); |
281 | 281 |
282 auto config = CreateEncoderRuntimeConfig(); | 282 auto config = CreateEncoderRuntimeConfig(); |
283 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) | 283 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) |
284 .WillOnce(Return(config)); | 284 .WillOnce(Return(config)); |
285 | 285 |
286 // Since using mock audio network adaptor, any rtt is fine. | 286 // Since using mock audio network adaptor, any rtt is fine. |
287 constexpr int kRtt = 30; | 287 constexpr int kRtt = 30; |
288 EXPECT_CALL(**states.mock_audio_network_adaptor, SetRtt(kRtt)); | 288 EXPECT_CALL(**states.mock_audio_network_adaptor, SetRtt(kRtt)); |
289 states.encoder->OnReceivedRtt(kRtt); | 289 states.encoder->OnReceivedRtt(kRtt); |
290 | 290 |
291 CheckEncoderRuntimeConfig(states.encoder.get(), config); | 291 CheckEncoderRuntimeConfig(states.encoder.get(), config); |
292 } | 292 } |
293 | 293 |
294 TEST(AudioEncoderOpusTest, | 294 TEST(AudioEncoderOpusTest, |
295 InvokeAudioNetworkAdaptorOnSetReceiverFrameLengthRange) { | |
296 auto states = CreateCodec(2); | |
297 states.encoder->EnableAudioNetworkAdaptor("", nullptr); | |
298 | |
299 auto config = CreateEncoderRuntimeConfig(); | |
300 EXPECT_CALL(**states.mock_audio_network_adaptor, GetEncoderRuntimeConfig()) | |
301 .WillOnce(Return(config)); | |
302 | |
303 constexpr int kMinFrameLength = 10; | |
304 constexpr int kMaxFrameLength = 60; | |
305 EXPECT_CALL(**states.mock_audio_network_adaptor, | |
306 SetReceiverFrameLengthRange(kMinFrameLength, kMaxFrameLength)); | |
307 states.encoder->SetReceiverFrameLengthRange(kMinFrameLength, kMaxFrameLength); | |
308 | |
309 CheckEncoderRuntimeConfig(states.encoder.get(), config); | |
310 } | |
311 | |
312 TEST(AudioEncoderOpusTest, | |
313 PacketLossFractionSmoothedOnSetUplinkPacketLossFraction) { | 295 PacketLossFractionSmoothedOnSetUplinkPacketLossFraction) { |
314 auto states = CreateCodec(2); | 296 auto states = CreateCodec(2); |
315 | 297 |
316 // The values are carefully chosen so that if no smoothing is made, the test | 298 // The values are carefully chosen so that if no smoothing is made, the test |
317 // will fail. | 299 // will fail. |
318 constexpr float kPacketLossFraction_1 = 0.02f; | 300 constexpr float kPacketLossFraction_1 = 0.02f; |
319 constexpr float kPacketLossFraction_2 = 0.198f; | 301 constexpr float kPacketLossFraction_2 = 0.198f; |
320 // |kSecondSampleTimeMs| is chose to ease the calculation since | 302 // |kSecondSampleTimeMs| is chose to ease the calculation since |
321 // 0.9999 ^ 6931 = 0.5. | 303 // 0.9999 ^ 6931 = 0.5. |
322 constexpr float kSecondSampleTimeMs = 6931; | 304 constexpr float kSecondSampleTimeMs = 6931; |
323 | 305 |
324 // First time, no filtering. | 306 // First time, no filtering. |
325 states.encoder->OnReceivedUplinkPacketLossFraction(kPacketLossFraction_1); | 307 states.encoder->OnReceivedUplinkPacketLossFraction(kPacketLossFraction_1); |
326 EXPECT_DOUBLE_EQ(0.01, states.encoder->packet_loss_rate()); | 308 EXPECT_DOUBLE_EQ(0.01, states.encoder->packet_loss_rate()); |
327 | 309 |
328 states.simulated_clock->AdvanceTimeMilliseconds(kSecondSampleTimeMs); | 310 states.simulated_clock->AdvanceTimeMilliseconds(kSecondSampleTimeMs); |
329 states.encoder->OnReceivedUplinkPacketLossFraction(kPacketLossFraction_2); | 311 states.encoder->OnReceivedUplinkPacketLossFraction(kPacketLossFraction_2); |
330 | 312 |
331 // Now the output of packet loss fraction smoother should be | 313 // Now the output of packet loss fraction smoother should be |
332 // (0.02 + 0.198) / 2 = 0.109, which reach the threshold for the optimized | 314 // (0.02 + 0.198) / 2 = 0.109, which reach the threshold for the optimized |
333 // packet loss rate to increase to 0.05. If no smoothing has been made, the | 315 // packet loss rate to increase to 0.05. If no smoothing has been made, the |
334 // optimized packet loss rate should have been increase to 0.1. | 316 // optimized packet loss rate should have been increase to 0.1. |
335 EXPECT_DOUBLE_EQ(0.05, states.encoder->packet_loss_rate()); | 317 EXPECT_DOUBLE_EQ(0.05, states.encoder->packet_loss_rate()); |
336 } | 318 } |
337 | 319 |
338 } // namespace webrtc | 320 } // namespace webrtc |
OLD | NEW |