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

Side by Side Diff: webrtc/modules/video_coding/video_sender_unittest.cc

Issue 2616393003: Periodically update channel parameters and send TargetBitrate message. (Closed)
Patch Set: Rebase Created 3 years, 11 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
« no previous file with comments | « webrtc/modules/video_coding/video_sender.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 new_bitrate_kbps * 1000, settings_.maxFramerate); 310 new_bitrate_kbps * 1000, settings_.maxFramerate);
311 EXPECT_CALL(encoder_, 311 EXPECT_CALL(encoder_,
312 SetRateAllocation(new_rate_allocation, settings_.maxFramerate)) 312 SetRateAllocation(new_rate_allocation, settings_.maxFramerate))
313 .Times(1) 313 .Times(1)
314 .WillOnce(Return(0)); 314 .WillOnce(Return(0));
315 sender_->SetChannelParameters(new_bitrate_kbps * 1000, 0, 200, 315 sender_->SetChannelParameters(new_bitrate_kbps * 1000, 0, 200,
316 rate_allocator_.get(), nullptr); 316 rate_allocator_.get(), nullptr);
317 AddFrame(); 317 AddFrame();
318 clock_.AdvanceTimeMilliseconds(kFrameIntervalMs); 318 clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
319 319
320 // Add enough frames so that input frame rate will be updated.
321 const int kFramesToSend =
322 (VCMProcessTimer::kDefaultProcessIntervalMs / kFrameIntervalMs) + 1;
323 for (int i = 0; i < kFramesToSend; ++i) {
324 AddFrame();
325 clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
326 }
327
328 EXPECT_CALL(encoder_,
329 SetRateAllocation(new_rate_allocation, kActualFrameRate))
330 .Times(1)
331 .WillOnce(Return(0));
332
333 sender_->Process();
334 AddFrame();
335
336 // Expect no call to encoder_.SetRates if the new bitrate is zero. 320 // Expect no call to encoder_.SetRates if the new bitrate is zero.
337 EXPECT_CALL(encoder_, SetRateAllocation(_, _)).Times(0); 321 EXPECT_CALL(encoder_, SetRateAllocation(_, _)).Times(0);
338 sender_->SetChannelParameters(0, 0, 200, rate_allocator_.get(), nullptr); 322 sender_->SetChannelParameters(0, 0, 200, rate_allocator_.get(), nullptr);
339 AddFrame(); 323 AddFrame();
340 } 324 }
341 325
342 TEST_F(TestVideoSenderWithMockEncoder, TestIntraRequestsInternalCapture) { 326 TEST_F(TestVideoSenderWithMockEncoder, TestIntraRequestsInternalCapture) {
343 // De-register current external encoder. 327 // De-register current external encoder.
344 sender_->RegisterExternalEncoder(nullptr, kUnusedPayloadType, false); 328 sender_->RegisterExternalEncoder(nullptr, kUnusedPayloadType, false);
345 // Register encoder with internal capture. 329 // Register encoder with internal capture.
(...skipping 23 matching lines...) Expand all
369 const uint32_t new_bitrate_kbps = settings_.startBitrate + 300; 353 const uint32_t new_bitrate_kbps = settings_.startBitrate + 300;
370 BitrateAllocation new_rate_allocation = rate_allocator_->GetAllocation( 354 BitrateAllocation new_rate_allocation = rate_allocator_->GetAllocation(
371 new_bitrate_kbps * 1000, settings_.maxFramerate); 355 new_bitrate_kbps * 1000, settings_.maxFramerate);
372 EXPECT_CALL(encoder_, SetRateAllocation(new_rate_allocation, _)) 356 EXPECT_CALL(encoder_, SetRateAllocation(new_rate_allocation, _))
373 .Times(1) 357 .Times(1)
374 .WillOnce(Return(0)); 358 .WillOnce(Return(0));
375 sender_->SetChannelParameters(new_bitrate_kbps * 1000, 0, 200, 359 sender_->SetChannelParameters(new_bitrate_kbps * 1000, 0, 200,
376 rate_allocator_.get(), nullptr); 360 rate_allocator_.get(), nullptr);
377 } 361 }
378 362
379 TEST_F(TestVideoSenderWithMockEncoder, EncoderFramerateUpdatedViaProcess) {
380 sender_->SetChannelParameters(settings_.startBitrate * 1000, 0, 200,
381 rate_allocator_.get(), nullptr);
382 const int64_t kRateStatsWindowMs = 2000;
383 const uint32_t kInputFps = 20;
384 int64_t start_time = clock_.TimeInMilliseconds();
385 while (clock_.TimeInMilliseconds() < start_time + kRateStatsWindowMs) {
386 AddFrame();
387 clock_.AdvanceTimeMilliseconds(1000 / kInputFps);
388 }
389 EXPECT_CALL(encoder_, SetRateAllocation(_, kInputFps))
390 .Times(1)
391 .WillOnce(Return(0));
392 sender_->Process();
393 AddFrame();
394 }
395
396 TEST_F(TestVideoSenderWithMockEncoder, 363 TEST_F(TestVideoSenderWithMockEncoder,
397 NoRedundantSetChannelParameterOrSetRatesCalls) { 364 NoRedundantSetChannelParameterOrSetRatesCalls) {
398 const uint8_t kLossRate = 4; 365 const uint8_t kLossRate = 4;
399 const uint8_t kRtt = 200; 366 const uint8_t kRtt = 200;
400 const int64_t kRateStatsWindowMs = 2000; 367 const int64_t kRateStatsWindowMs = 2000;
401 const uint32_t kInputFps = 20; 368 const uint32_t kInputFps = 20;
402 int64_t start_time = clock_.TimeInMilliseconds(); 369 int64_t start_time = clock_.TimeInMilliseconds();
403 // Expect initial call to SetChannelParameters. Rates are initialized through 370 // Expect initial call to SetChannelParameters. Rates are initialized through
404 // InitEncode and expects no additional call before the framerate (or bitrate) 371 // InitEncode and expects no additional call before the framerate (or bitrate)
405 // updates. 372 // updates.
406 EXPECT_CALL(encoder_, SetChannelParameters(kLossRate, kRtt)) 373 EXPECT_CALL(encoder_, SetChannelParameters(kLossRate, kRtt))
407 .Times(1) 374 .Times(1)
408 .WillOnce(Return(0)); 375 .WillOnce(Return(0));
409 sender_->SetChannelParameters(settings_.startBitrate * 1000, kLossRate, kRtt, 376 sender_->SetChannelParameters(settings_.startBitrate * 1000, kLossRate, kRtt,
410 rate_allocator_.get(), nullptr); 377 rate_allocator_.get(), nullptr);
411 while (clock_.TimeInMilliseconds() < start_time + kRateStatsWindowMs) { 378 while (clock_.TimeInMilliseconds() < start_time + kRateStatsWindowMs) {
412 AddFrame(); 379 AddFrame();
413 clock_.AdvanceTimeMilliseconds(1000 / kInputFps); 380 clock_.AdvanceTimeMilliseconds(1000 / kInputFps);
414 } 381 }
415 // After process, input framerate should be updated but not ChannelParameters 382
416 // as they are the same as before.
417 EXPECT_CALL(encoder_, SetRateAllocation(_, kInputFps))
418 .Times(1)
419 .WillOnce(Return(0));
420 sender_->Process();
421 AddFrame();
422 // Call to SetChannelParameters with changed bitrate should call encoder 383 // Call to SetChannelParameters with changed bitrate should call encoder
423 // SetRates but not encoder SetChannelParameters (that are unchanged). 384 // SetRates but not encoder SetChannelParameters (that are unchanged).
424 uint32_t new_bitrate_bps = 2 * settings_.startBitrate * 1000; 385 uint32_t new_bitrate_bps = 2 * settings_.startBitrate * 1000;
425 BitrateAllocation new_rate_allocation = 386 BitrateAllocation new_rate_allocation =
426 rate_allocator_->GetAllocation(new_bitrate_bps, kInputFps); 387 rate_allocator_->GetAllocation(new_bitrate_bps, kInputFps);
427 EXPECT_CALL(encoder_, SetRateAllocation(new_rate_allocation, kInputFps)) 388 EXPECT_CALL(encoder_, SetRateAllocation(new_rate_allocation, kInputFps))
428 .Times(1) 389 .Times(1)
429 .WillOnce(Return(0)); 390 .WillOnce(Return(0));
430 sender_->SetChannelParameters(new_bitrate_bps, kLossRate, kRtt, 391 sender_->SetChannelParameters(new_bitrate_bps, kLossRate, kRtt,
431 rate_allocator_.get(), nullptr); 392 rate_allocator_.get(), nullptr);
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 } 529 }
569 { 530 {
570 // TODO(andresp): Find out why this fails with framerate = 7.5 531 // TODO(andresp): Find out why this fails with framerate = 7.5
571 Vp8StreamInfo expected = {{7.0, 7.0, 7.0}, {high_b, high_b, high_b}}; 532 Vp8StreamInfo expected = {{7.0, 7.0, 7.0}, {high_b, high_b, high_b}};
572 EXPECT_THAT(SimulateWithFramerate(7.0), MatchesVp8StreamInfo(expected)); 533 EXPECT_THAT(SimulateWithFramerate(7.0), MatchesVp8StreamInfo(expected));
573 } 534 }
574 } 535 }
575 } // namespace 536 } // namespace
576 } // namespace vcm 537 } // namespace vcm
577 } // namespace webrtc 538 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/video_sender.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698