Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc

Issue 2429503002: Simplifying audio network adaptor by moving receiver frame length range to ctor. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698