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

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

Issue 3011923002: Clean up Stats class used in VideoProcessor tests. (Closed)
Patch Set: Fix VS compile. Created 3 years, 3 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) 2017 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2017 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 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 while (frame_number < num_frames) { 184 while (frame_number < num_frames) {
185 // In order to not overwhelm the OpenMAX buffers in the Android 185 // In order to not overwhelm the OpenMAX buffers in the Android
186 // MediaCodec API, we roughly pace the frames here. The downside 186 // MediaCodec API, we roughly pace the frames here. The downside
187 // of this is that the encode run will be done in real-time. 187 // of this is that the encode run will be done in real-time.
188 // TODO(brandtr): Investigate if this is needed on iOS. 188 // TODO(brandtr): Investigate if this is needed on iOS.
189 if (config_.hw_codec) { 189 if (config_.hw_codec) {
190 SleepMs(rtc::kNumMillisecsPerSec / 190 SleepMs(rtc::kNumMillisecsPerSec /
191 rate_profile.input_frame_rate[rate_update_index]); 191 rate_profile.input_frame_rate[rate_update_index]);
192 } 192 }
193 193
194 task_queue.PostTask( 194 task_queue.PostTask([this] { processor_->ProcessFrame(); });
195 [this, frame_number] { processor_->ProcessFrame(frame_number); });
196 ++frame_number; 195 ++frame_number;
197 196
198 if (frame_number == 197 if (frame_number ==
199 rate_profile.frame_index_rate_update[rate_update_index + 1]) { 198 rate_profile.frame_index_rate_update[rate_update_index + 1]) {
200 ++rate_update_index; 199 ++rate_update_index;
201 200
202 task_queue.PostTask([this, &rate_profile, rate_update_index] { 201 task_queue.PostTask([this, &rate_profile, rate_update_index] {
203 processor_->SetRates(rate_profile.target_bit_rate[rate_update_index], 202 processor_->SetRates(rate_profile.target_bit_rate[rate_update_index],
204 rate_profile.input_frame_rate[rate_update_index]); 203 rate_profile.input_frame_rate[rate_update_index]);
205 }); 204 });
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 num_dropped_frames, 237 num_dropped_frames,
239 num_resize_actions); 238 num_resize_actions);
240 ++rate_update_index; 239 ++rate_update_index;
241 ResetRateControlMetrics(rate_update_index, rate_profile); 240 ResetRateControlMetrics(rate_update_index, rate_profile);
242 } 241 }
243 } 242 }
244 PrintAndMaybeVerifyRateControlMetrics(rate_update_index, rc_thresholds, 243 PrintAndMaybeVerifyRateControlMetrics(rate_update_index, rc_thresholds,
245 num_dropped_frames, num_resize_actions); 244 num_dropped_frames, num_resize_actions);
246 245
247 // Calculate and print other statistics. 246 // Calculate and print other statistics.
248 EXPECT_EQ(num_frames, static_cast<int>(stats_.stats_.size())); 247 EXPECT_EQ(num_frames, static_cast<int>(stats_.size()));
249 stats_.PrintSummary(); 248 stats_.PrintSummary();
250 249
251 // Calculate and print image quality statistics. 250 // Calculate and print image quality statistics.
252 // TODO(marpan): Should compute these quality metrics per SetRates update. 251 // TODO(marpan): Should compute these quality metrics per SetRates update.
253 QualityMetricsResult psnr_result, ssim_result; 252 QualityMetricsResult psnr_result, ssim_result;
254 EXPECT_EQ(0, I420MetricsFromFiles(config_.input_filename.c_str(), 253 EXPECT_EQ(0, I420MetricsFromFiles(config_.input_filename.c_str(),
255 config_.output_filename.c_str(), 254 config_.output_filename.c_str(),
256 config_.codec_settings.width, 255 config_.codec_settings.width,
257 config_.codec_settings.height, &psnr_result, 256 config_.codec_settings.height, &psnr_result,
258 &ssim_result)); 257 &ssim_result));
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 } 406 }
408 407
409 // For every encoded frame, update the rate control metrics. 408 // For every encoded frame, update the rate control metrics.
410 void VideoProcessorIntegrationTest::UpdateRateControlMetrics(int frame_number) { 409 void VideoProcessorIntegrationTest::UpdateRateControlMetrics(int frame_number) {
411 RTC_CHECK_GE(frame_number, 0); 410 RTC_CHECK_GE(frame_number, 0);
412 411
413 const int tl_idx = TemporalLayerIndexForFrame(frame_number); 412 const int tl_idx = TemporalLayerIndexForFrame(frame_number);
414 ++num_frames_per_update_[tl_idx]; 413 ++num_frames_per_update_[tl_idx];
415 ++num_frames_total_; 414 ++num_frames_total_;
416 415
417 FrameType frame_type = stats_.stats_[frame_number].frame_type; 416 const FrameStatistic* frame_stat = stats_.GetFrame(frame_number);
417 FrameType frame_type = frame_stat->frame_type;
418 float encoded_size_kbits = 418 float encoded_size_kbits =
419 stats_.stats_[frame_number].encoded_frame_length_in_bytes * 8.0f / 419 frame_stat->encoded_frame_size_bytes * 8.0f / 1000.0f;
420 1000.0f;
421 420
422 // Update layer data. 421 // Update layer data.
423 // Update rate mismatch relative to per-frame bandwidth for delta frames. 422 // Update rate mismatch relative to per-frame bandwidth for delta frames.
424 if (frame_type == kVideoFrameDelta) { 423 if (frame_type == kVideoFrameDelta) {
425 // TODO(marpan): Should we count dropped (zero size) frames in mismatch? 424 // TODO(marpan): Should we count dropped (zero size) frames in mismatch?
426 sum_frame_size_mismatch_[tl_idx] += 425 sum_frame_size_mismatch_[tl_idx] +=
427 fabs(encoded_size_kbits - per_frame_bandwidth_[tl_idx]) / 426 fabs(encoded_size_kbits - per_frame_bandwidth_[tl_idx]) /
428 per_frame_bandwidth_[tl_idx]; 427 per_frame_bandwidth_[tl_idx];
429 } else { 428 } else {
430 float target_size = (frame_number == 0) ? target_size_key_frame_initial_ 429 float target_size = (frame_number == 0) ? target_size_key_frame_initial_
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 perc_encoding_rate_mismatch_ = 0.0f; 620 perc_encoding_rate_mismatch_ = 0.0f;
622 num_frames_to_hit_target_ = 621 num_frames_to_hit_target_ =
623 rate_profile.frame_index_rate_update[rate_update_index + 1]; 622 rate_profile.frame_index_rate_update[rate_update_index + 1];
624 encoding_rate_within_target_ = false; 623 encoding_rate_within_target_ = false;
625 sum_key_frame_size_mismatch_ = 0.0; 624 sum_key_frame_size_mismatch_ = 0.0;
626 num_key_frames_ = 0; 625 num_key_frames_ = 0;
627 } 626 }
628 627
629 } // namespace test 628 } // namespace test
630 } // namespace webrtc 629 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698