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

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

Issue 3014623002: Adding test for SingleNalUnit mode (Closed)
Patch Set: Added codec_globals_headers to deps of video_codecs_test_framework Created 3 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) 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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 rc_threshold->max_num_frames_to_hit_target = max_num_frames_to_hit_target; 169 rc_threshold->max_num_frames_to_hit_target = max_num_frames_to_hit_target;
170 rc_threshold->num_spatial_resizes = num_spatial_resizes; 170 rc_threshold->num_spatial_resizes = num_spatial_resizes;
171 rc_threshold->num_key_frames = num_key_frames; 171 rc_threshold->num_key_frames = num_key_frames;
172 } 172 }
173 173
174 // Processes all frames in the clip and verifies the result. 174 // Processes all frames in the clip and verifies the result.
175 void VideoProcessorIntegrationTest::ProcessFramesAndMaybeVerify( 175 void VideoProcessorIntegrationTest::ProcessFramesAndMaybeVerify(
176 const RateProfile& rate_profile, 176 const RateProfile& rate_profile,
177 const std::vector<RateControlThresholds>* rc_thresholds, 177 const std::vector<RateControlThresholds>* rc_thresholds,
178 const QualityThresholds* quality_thresholds, 178 const QualityThresholds* quality_thresholds,
179 const BitstreamThresholds* bs_thresholds,
179 const VisualizationParams* visualization_params) { 180 const VisualizationParams* visualization_params) {
180 // The Android HW codec needs to be run on a task queue, so we simply always 181 // The Android HW codec needs to be run on a task queue, so we simply always
181 // run the test on a task queue. 182 // run the test on a task queue.
182 rtc::TaskQueue task_queue("VidProc TQ"); 183 rtc::TaskQueue task_queue("VidProc TQ");
183 rtc::Event sync_event(false, false); 184 rtc::Event sync_event(false, false);
184 185
185 SetUpAndInitObjects(&task_queue, rate_profile.target_bit_rate[0], 186 SetUpAndInitObjects(&task_queue, rate_profile.target_bit_rate[0],
186 rate_profile.input_frame_rate[0], visualization_params); 187 rate_profile.input_frame_rate[0], visualization_params);
187 188
188 // Set initial rates. 189 // Set initial rates.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 sync_event.Set(); 240 sync_event.Set();
240 }); 241 });
241 sync_event.Wait(rtc::Event::kForever); 242 sync_event.Wait(rtc::Event::kForever);
242 243
243 rate_update_index = 0; 244 rate_update_index = 0;
244 frame_number = 0; 245 frame_number = 0;
245 ResetRateControlMetrics(rate_update_index, rate_profile); 246 ResetRateControlMetrics(rate_update_index, rate_profile);
246 while (frame_number < num_frames) { 247 while (frame_number < num_frames) {
247 UpdateRateControlMetrics(frame_number); 248 UpdateRateControlMetrics(frame_number);
248 249
250 if (bs_thresholds) {
251 VerifyBitstream(frame_number, *bs_thresholds);
252 }
253
249 ++frame_number; 254 ++frame_number;
250 255
251 if (frame_number == 256 if (frame_number ==
252 rate_profile.frame_index_rate_update[rate_update_index + 1]) { 257 rate_profile.frame_index_rate_update[rate_update_index + 1]) {
253 PrintRateControlMetrics(rate_update_index, num_dropped_frames, 258 PrintRateControlMetrics(rate_update_index, num_dropped_frames,
254 num_spatial_resizes); 259 num_spatial_resizes);
255 VerifyRateControlMetrics(rate_update_index, rc_thresholds, 260 VerifyRateControlMetrics(rate_update_index, rc_thresholds,
256 num_dropped_frames, num_spatial_resizes); 261 num_dropped_frames, num_spatial_resizes);
257 ++rate_update_index; 262 ++rate_update_index;
258 ResetRateControlMetrics(rate_update_index, rate_profile); 263 ResetRateControlMetrics(rate_update_index, rate_profile);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 break; 334 break;
330 case kVideoCodecVP9: 335 case kVideoCodecVP9:
331 codec = cricket::VideoCodec(cricket::kVp9CodecName); 336 codec = cricket::VideoCodec(cricket::kVp9CodecName);
332 encoder_.reset(encoder_factory->CreateVideoEncoder(codec)); 337 encoder_.reset(encoder_factory->CreateVideoEncoder(codec));
333 decoder_.reset( 338 decoder_.reset(
334 decoder_factory->CreateVideoDecoderWithParams(codec, decoder_params)); 339 decoder_factory->CreateVideoDecoderWithParams(codec, decoder_params));
335 break; 340 break;
336 case kVideoCodecH264: 341 case kVideoCodecH264:
337 // TODO(brandtr): Generalize so that we support multiple profiles here. 342 // TODO(brandtr): Generalize so that we support multiple profiles here.
338 codec = cricket::VideoCodec(cricket::kH264CodecName); 343 codec = cricket::VideoCodec(cricket::kH264CodecName);
344 if (config_.packetization_mode == H264PacketizationMode::NonInterleaved) {
345 codec.SetParam(cricket::kH264FmtpPacketizationMode, "1");
346 } else {
347 RTC_CHECK_EQ(config_.packetization_mode,
348 H264PacketizationMode::SingleNalUnit);
349 codec.SetParam(cricket::kH264FmtpPacketizationMode, "0");
350 }
339 encoder_.reset(encoder_factory->CreateVideoEncoder(codec)); 351 encoder_.reset(encoder_factory->CreateVideoEncoder(codec));
340 decoder_.reset( 352 decoder_.reset(
341 decoder_factory->CreateVideoDecoderWithParams(codec, decoder_params)); 353 decoder_factory->CreateVideoDecoderWithParams(codec, decoder_params));
342 break; 354 break;
343 default: 355 default:
344 RTC_NOTREACHED(); 356 RTC_NOTREACHED();
345 break; 357 break;
346 } 358 }
347 359
348 if (config_.sw_fallback_encoder) { 360 if (config_.sw_fallback_encoder) {
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 printf(" Layer encoded bitrate : %f\n", actual_.kbps_layer[i]); 567 printf(" Layer encoded bitrate : %f\n", actual_.kbps_layer[i]);
556 printf(" Layer frame size %% mismatch : %d\n", 568 printf(" Layer frame size %% mismatch : %d\n",
557 actual_.DeltaFrameSizeMismatchPercent(i)); 569 actual_.DeltaFrameSizeMismatchPercent(i));
558 printf(" Layer bitrate %% mismatch : %d\n", 570 printf(" Layer bitrate %% mismatch : %d\n",
559 actual_.BitrateMismatchPercent(i, target_.kbps_layer[i])); 571 actual_.BitrateMismatchPercent(i, target_.kbps_layer[i]));
560 printf(" # processed frames per layer: %d\n", actual_.num_frames_layer[i]); 572 printf(" # processed frames per layer: %d\n", actual_.num_frames_layer[i]);
561 } 573 }
562 printf("\n"); 574 printf("\n");
563 } 575 }
564 576
577 void VideoProcessorIntegrationTest::VerifyBitstream(
578 int frame_number,
579 const BitstreamThresholds& bs_thresholds) {
580 RTC_CHECK_GE(frame_number, 0);
581 const FrameStatistic* frame_stat = stats_.GetFrame(frame_number);
582 EXPECT_LE(*(frame_stat->max_nalu_length), bs_thresholds.max_nalu_length);
583 }
584
565 // Temporal layer index corresponding to frame number, for up to 3 layers. 585 // Temporal layer index corresponding to frame number, for up to 3 layers.
566 int VideoProcessorIntegrationTest::TemporalLayerIndexForFrame( 586 int VideoProcessorIntegrationTest::TemporalLayerIndexForFrame(
567 int frame_number) const { 587 int frame_number) const {
568 int tl_idx = -1; 588 int tl_idx = -1;
569 switch (NumberOfTemporalLayers(config_.codec_settings)) { 589 switch (NumberOfTemporalLayers(config_.codec_settings)) {
570 case 1: 590 case 1:
571 tl_idx = 0; 591 tl_idx = 0;
572 break; 592 break;
573 case 2: 593 case 2:
574 // temporal layer 0: 0 2 4 ... 594 // temporal layer 0: 0 2 4 ...
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 668
649 // Update layer per-frame-bandwidth. 669 // Update layer per-frame-bandwidth.
650 for (int i = 0; i < num_temporal_layers; ++i) { 670 for (int i = 0; i < num_temporal_layers; ++i) {
651 target_.framesize_kbits_layer[i] = 671 target_.framesize_kbits_layer[i] =
652 target_.kbps_layer[i] / target_.fps_layer[i]; 672 target_.kbps_layer[i] / target_.fps_layer[i];
653 } 673 }
654 } 674 }
655 675
656 } // namespace test 676 } // namespace test
657 } // namespace webrtc 677 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698