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

Side by Side Diff: webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.h

Issue 2998063002: VideoProcessor: mini-fixes in preparation for task queue CL. (Closed)
Patch Set: Created 3 years, 4 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) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 perc_encoding_rate_mismatch_ = 0.0f; 259 perc_encoding_rate_mismatch_ = 0.0f;
260 num_frames_to_hit_target_ = num_frames_to_hit_target; 260 num_frames_to_hit_target_ = num_frames_to_hit_target;
261 encoding_rate_within_target_ = false; 261 encoding_rate_within_target_ = false;
262 sum_key_frame_size_mismatch_ = 0.0; 262 sum_key_frame_size_mismatch_ = 0.0;
263 num_key_frames_ = 0; 263 num_key_frames_ = 0;
264 } 264 }
265 265
266 // For every encoded frame, update the rate control metrics. 266 // For every encoded frame, update the rate control metrics.
267 void UpdateRateControlMetrics(int frame_number) { 267 void UpdateRateControlMetrics(int frame_number) {
268 RTC_CHECK_GE(frame_number, 0); 268 RTC_CHECK_GE(frame_number, 0);
269 int tl_idx = TemporalLayerIndexForFrame(frame_number); 269
270 FrameType frame_type = processor_->EncodedFrameType(frame_number); 270 FrameType frame_type = stats_.stats_[frame_number].frame_type;
271 float encoded_size_kbits = 271 float encoded_size_kbits =
272 processor_->EncodedFrameSize(frame_number) * 8.0f / 1000.0f; 272 stats_.stats_[frame_number].encoded_frame_length_in_bytes * 8.0f /
273 1000.0f;
274 const int tl_idx = TemporalLayerIndexForFrame(frame_number);
273 275
274 // Update layer data. 276 // Update layer data.
275 // Update rate mismatch relative to per-frame bandwidth for delta frames. 277 // Update rate mismatch relative to per-frame bandwidth for delta frames.
276 if (frame_type == kVideoFrameDelta) { 278 if (frame_type == kVideoFrameDelta) {
277 // TODO(marpan): Should we count dropped (zero size) frames in mismatch? 279 // TODO(marpan): Should we count dropped (zero size) frames in mismatch?
278 sum_frame_size_mismatch_[tl_idx] += 280 sum_frame_size_mismatch_[tl_idx] +=
279 fabs(encoded_size_kbits - per_frame_bandwidth_[tl_idx]) / 281 fabs(encoded_size_kbits - per_frame_bandwidth_[tl_idx]) /
280 per_frame_bandwidth_[tl_idx]; 282 per_frame_bandwidth_[tl_idx];
281 } else { 283 } else {
282 float target_size = (frame_number == 0) ? target_size_key_frame_initial_ 284 float target_size = (frame_number == 0) ? target_size_key_frame_initial_
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 ResetRateControlMetrics( 485 ResetRateControlMetrics(
484 rate_profile.frame_index_rate_update[update_index + 1]); 486 rate_profile.frame_index_rate_update[update_index + 1]);
485 487
486 if (config_.batch_mode) { 488 if (config_.batch_mode) {
487 // In batch mode, we calculate the metrics for all frames after all frames 489 // In batch mode, we calculate the metrics for all frames after all frames
488 // have been sent for encoding. 490 // have been sent for encoding.
489 491
490 // TODO(brandtr): Refactor "frame number accounting" so we don't have to 492 // TODO(brandtr): Refactor "frame number accounting" so we don't have to
491 // call ProcessFrame num_frames+1 times here. 493 // call ProcessFrame num_frames+1 times here.
492 for (frame_number = 0; frame_number <= num_frames; ++frame_number) { 494 for (frame_number = 0; frame_number <= num_frames; ++frame_number) {
493 EXPECT_TRUE(processor_->ProcessFrame(frame_number)); 495 processor_->ProcessFrame(frame_number);
494 } 496 }
495 497
496 for (frame_number = 0; frame_number < num_frames; ++frame_number) { 498 for (frame_number = 0; frame_number < num_frames; ++frame_number) {
497 const int tl_idx = TemporalLayerIndexForFrame(frame_number); 499 const int tl_idx = TemporalLayerIndexForFrame(frame_number);
498 ++num_frames_per_update_[tl_idx]; 500 ++num_frames_per_update_[tl_idx];
499 ++num_frames_total_; 501 ++num_frames_total_;
500 UpdateRateControlMetrics(frame_number); 502 UpdateRateControlMetrics(frame_number);
501 } 503 }
502 } else { 504 } else {
503 // In online mode, we calculate the metrics for a given frame right after 505 // In online mode, we calculate the metrics for a given frame right after
504 // it has been sent for encoding. 506 // it has been sent for encoding.
505 507
506 if (config_.hw_codec) { 508 if (config_.hw_codec) {
507 LOG(LS_WARNING) << "HW codecs should mostly be run in batch mode, " 509 LOG(LS_WARNING) << "HW codecs should mostly be run in batch mode, "
508 "since they may be pipelining."; 510 "since they may be pipelining.";
509 } 511 }
510 512
511 while (frame_number < num_frames) { 513 while (frame_number < num_frames) {
512 EXPECT_TRUE(processor_->ProcessFrame(frame_number)); 514 processor_->ProcessFrame(frame_number);
513 VerifyQpParser(frame_number); 515 VerifyQpParser(frame_number);
514 const int tl_idx = TemporalLayerIndexForFrame(frame_number); 516 const int tl_idx = TemporalLayerIndexForFrame(frame_number);
515 ++num_frames_per_update_[tl_idx]; 517 ++num_frames_per_update_[tl_idx];
516 ++num_frames_total_; 518 ++num_frames_total_;
517 UpdateRateControlMetrics(frame_number); 519 UpdateRateControlMetrics(frame_number);
518 520
519 ++frame_number; 521 ++frame_number;
520 522
521 // If we hit another/next update, verify stats for current state and 523 // If we hit another/next update, verify stats for current state and
522 // update layers and codec with new rates. 524 // update layers and codec with new rates.
523 if (frame_number == 525 if (frame_number ==
524 rate_profile.frame_index_rate_update[update_index + 1]) { 526 rate_profile.frame_index_rate_update[update_index + 1]) {
525 VerifyRateControlMetrics(update_index, rc_thresholds[update_index]); 527 VerifyRateControlMetrics(update_index, rc_thresholds[update_index]);
526 528
527 // Update layer rates and the codec with new rates. 529 // Update layer rates and the codec with new rates.
528 ++update_index; 530 ++update_index;
529 bit_rate_ = rate_profile.target_bit_rate[update_index]; 531 bit_rate_ = rate_profile.target_bit_rate[update_index];
530 frame_rate_ = rate_profile.input_frame_rate[update_index]; 532 frame_rate_ = rate_profile.input_frame_rate[update_index];
531 SetTemporalLayerRates(); 533 SetTemporalLayerRates();
532 ResetRateControlMetrics( 534 ResetRateControlMetrics(
533 rate_profile.frame_index_rate_update[update_index + 1]); 535 rate_profile.frame_index_rate_update[update_index + 1]);
534 processor_->SetRates(bit_rate_, frame_rate_); 536 processor_->SetRates(bit_rate_, frame_rate_);
535 } 537 }
536 } 538 }
537 // TODO(brandtr): Refactor "frame number accounting" so we don't have to 539 // TODO(brandtr): Refactor "frame number accounting" so we don't have to
538 // call ProcessFrame one extra time here. 540 // call ProcessFrame one extra time here.
539 EXPECT_TRUE(processor_->ProcessFrame(frame_number)); 541 processor_->ProcessFrame(frame_number);
540 } 542 }
541 543
542 // Verify rate control metrics for all frames (if in batch mode), or for all 544 // Verify rate control metrics for all frames (if in batch mode), or for all
543 // frames since the last rate update (if not in batch mode). 545 // frames since the last rate update (if not in batch mode).
544 VerifyRateControlMetrics(update_index, rc_thresholds[update_index]); 546 VerifyRateControlMetrics(update_index, rc_thresholds[update_index]);
545 EXPECT_EQ(num_frames, frame_number); 547 EXPECT_EQ(num_frames, frame_number);
546 EXPECT_EQ(num_frames + 1, static_cast<int>(stats_.stats_.size())); 548 EXPECT_EQ(num_frames + 1, static_cast<int>(stats_.stats_.size()));
547 549
548 // Release encoder and decoder to make sure they have finished processing. 550 // Release encoder and decoder to make sure they have finished processing.
549 processor_->Release(); 551 processor_->Release();
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 float target_size_key_frame_initial_; 719 float target_size_key_frame_initial_;
718 float target_size_key_frame_; 720 float target_size_key_frame_;
719 float sum_key_frame_size_mismatch_; 721 float sum_key_frame_size_mismatch_;
720 int num_key_frames_; 722 int num_key_frames_;
721 }; 723 };
722 724
723 } // namespace test 725 } // namespace test
724 } // namespace webrtc 726 } // namespace webrtc
725 727
726 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_VIDEOPROCESSOR_INTEGRATIONTES T_H_ 728 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_VIDEOPROCESSOR_INTEGRATIONTES T_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698