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

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

Issue 1180623005: Update encoder settings periodically, not only on new bandwidth estimate (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 6 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/main/source/video_sender.cc ('k') | no next file » | 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 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 EXPECT_EQ(0, sender_->IntraFrameRequest(0)); 307 EXPECT_EQ(0, sender_->IntraFrameRequest(0));
308 ExpectIntraRequest(1); 308 ExpectIntraRequest(1);
309 EXPECT_EQ(0, sender_->IntraFrameRequest(1)); 309 EXPECT_EQ(0, sender_->IntraFrameRequest(1));
310 ExpectIntraRequest(2); 310 ExpectIntraRequest(2);
311 EXPECT_EQ(0, sender_->IntraFrameRequest(2)); 311 EXPECT_EQ(0, sender_->IntraFrameRequest(2));
312 // No requests expected since these indices are out of bounds. 312 // No requests expected since these indices are out of bounds.
313 EXPECT_EQ(-1, sender_->IntraFrameRequest(3)); 313 EXPECT_EQ(-1, sender_->IntraFrameRequest(3));
314 EXPECT_EQ(-1, sender_->IntraFrameRequest(-1)); 314 EXPECT_EQ(-1, sender_->IntraFrameRequest(-1));
315 } 315 }
316 316
317 TEST_F(TestVideoSenderWithMockEncoder, EncoderFramerateUpdatedViaProcess) {
318 sender_->SetChannelParameters(settings_.startBitrate, 0, 200);
319 const int64_t kRateStatsWindowMs = 2000;
320 const uint32_t kInputFps = 20;
321 int64_t start_time = clock_.TimeInMilliseconds();
322 while (clock_.TimeInMilliseconds() < start_time + kRateStatsWindowMs) {
323 AddFrame();
324 clock_.AdvanceTimeMilliseconds(1000 / kInputFps);
325 }
326 EXPECT_CALL(encoder_, SetRates(_, kInputFps)).Times(1).WillOnce(Return(0));
327 sender_->Process();
328 AddFrame();
329 }
330
317 class TestVideoSenderWithVp8 : public TestVideoSender { 331 class TestVideoSenderWithVp8 : public TestVideoSender {
318 public: 332 public:
319 TestVideoSenderWithVp8() 333 TestVideoSenderWithVp8()
320 : codec_bitrate_kbps_(300), available_bitrate_kbps_(1000) {} 334 : codec_bitrate_kbps_(300), available_bitrate_kbps_(1000) {}
321 335
322 void SetUp() override { 336 void SetUp() override {
323 TestVideoSender::SetUp(); 337 TestVideoSender::SetUp();
324 338
325 const char* input_video = "foreman_cif"; 339 const char* input_video = "foreman_cif";
326 const int width = 352; 340 const int width = 352;
(...skipping 20 matching lines...) Expand all
347 codec.codecSpecific.VP8.numberOfTemporalLayers = temporal_layers; 361 codec.codecSpecific.VP8.numberOfTemporalLayers = temporal_layers;
348 return codec; 362 return codec;
349 } 363 }
350 364
351 void InsertFrames(float framerate, float seconds) { 365 void InsertFrames(float framerate, float seconds) {
352 for (int i = 0; i < seconds * framerate; ++i) { 366 for (int i = 0; i < seconds * framerate; ++i) {
353 clock_.AdvanceTimeMilliseconds(1000.0f / framerate); 367 clock_.AdvanceTimeMilliseconds(1000.0f / framerate);
354 EXPECT_CALL(post_encode_callback_, Encoded(_, NULL, NULL)) 368 EXPECT_CALL(post_encode_callback_, Encoded(_, NULL, NULL))
355 .WillOnce(Return(0)); 369 .WillOnce(Return(0));
356 AddFrame(); 370 AddFrame();
357
358 // SetChannelParameters needs to be called frequently to propagate 371 // SetChannelParameters needs to be called frequently to propagate
359 // framerate from the media optimization into the encoder. 372 // framerate from the media optimization into the encoder.
360 // Note: SetChannelParameters fails if less than 2 frames are in the 373 // Note: SetChannelParameters fails if less than 2 frames are in the
361 // buffer since it will fail to calculate the framerate. 374 // buffer since it will fail to calculate the framerate.
362 if (i != 0) { 375 if (i != 0) {
363 EXPECT_EQ(VCM_OK, 376 EXPECT_EQ(VCM_OK, sender_->SetChannelParameters(
364 sender_->SetChannelParameters( 377 available_bitrate_kbps_ * 1000, 0, 200));
365 available_bitrate_kbps_ * 1000, 0, 200));
366 } 378 }
367 } 379 }
368 } 380 }
369 381
370 Vp8StreamInfo SimulateWithFramerate(float framerate) { 382 Vp8StreamInfo SimulateWithFramerate(float framerate) {
371 const float short_simulation_interval = 5.0; 383 const float short_simulation_interval = 5.0;
372 const float long_simulation_interval = 10.0; 384 const float long_simulation_interval = 10.0;
373 // It appears that this 5 seconds simulation is needed to allow 385 // It appears that this 5 seconds simulation is needed to allow
374 // bitrate and framerate to stabilize. 386 // bitrate and framerate to stabilize.
375 InsertFrames(framerate, short_simulation_interval); 387 InsertFrames(framerate, short_simulation_interval);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 } 446 }
435 { 447 {
436 // TODO(andresp): Find out why this fails with framerate = 7.5 448 // TODO(andresp): Find out why this fails with framerate = 7.5
437 Vp8StreamInfo expected = {{7.0, 7.0, 7.0}, {high_b, high_b, high_b}}; 449 Vp8StreamInfo expected = {{7.0, 7.0, 7.0}, {high_b, high_b, high_b}};
438 EXPECT_THAT(SimulateWithFramerate(7.0), MatchesVp8StreamInfo(expected)); 450 EXPECT_THAT(SimulateWithFramerate(7.0), MatchesVp8StreamInfo(expected));
439 } 451 }
440 } 452 }
441 } // namespace 453 } // namespace
442 } // namespace vcm 454 } // namespace vcm
443 } // namespace webrtc 455 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/main/source/video_sender.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698