OLD | NEW |
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 68 matching lines...) Loading... |
79 bool error_concealment_on; | 79 bool error_concealment_on; |
80 bool denoising_on; | 80 bool denoising_on; |
81 bool frame_dropper_on; | 81 bool frame_dropper_on; |
82 bool spatial_resize_on; | 82 bool spatial_resize_on; |
83 | 83 |
84 float packet_loss_probability; // [0.0, 1.0]. | 84 float packet_loss_probability; // [0.0, 1.0]. |
85 | 85 |
86 std::string filename; | 86 std::string filename; |
87 bool verbose_logging; | 87 bool verbose_logging; |
88 | 88 |
| 89 // In correctness mode, EXPECTs are enabled for comparing the quality and |
| 90 // rate control metrics to their respective thresholds. It can be useful to |
| 91 // turn off correctness mode for HW codecs, since these in general are less |
| 92 // reliable than SW codecs, and failing an EXPECT will fail the entire test. |
| 93 bool correctness_mode; |
| 94 |
89 // In batch mode, the VideoProcessor is fed all the frames for processing | 95 // In batch mode, the VideoProcessor is fed all the frames for processing |
90 // before any metrics are calculated. This is useful for pipelining HW codecs, | 96 // before any metrics are calculated. This is useful for pipelining HW codecs, |
91 // for which some calculated metrics otherwise would be incorrect. The | 97 // for which some calculated metrics otherwise would be incorrect. The |
92 // downside with batch mode is that mid-test rate allocation is not supported. | 98 // downside with batch mode is that mid-test rate allocation is not supported. |
93 bool batch_mode; | 99 bool batch_mode; |
94 }; | 100 }; |
95 | 101 |
96 // Thresholds for the quality metrics. | 102 // Thresholds for the quality metrics. |
97 struct QualityThresholds { | 103 struct QualityThresholds { |
98 double min_avg_psnr; | 104 double min_avg_psnr; |
(...skipping 316 matching lines...) Loading... |
415 !encoding_rate_within_target_) { | 421 !encoding_rate_within_target_) { |
416 num_frames_to_hit_target_ = num_frames_total_; | 422 num_frames_to_hit_target_ = num_frames_total_; |
417 encoding_rate_within_target_ = true; | 423 encoding_rate_within_target_ = true; |
418 } | 424 } |
419 } | 425 } |
420 | 426 |
421 // Verify expected behavior of rate control and print out data. | 427 // Verify expected behavior of rate control and print out data. |
422 void VerifyRateControlMetrics(int update_index, | 428 void VerifyRateControlMetrics(int update_index, |
423 int num_dropped_frames, | 429 int num_dropped_frames, |
424 int num_resize_actions, | 430 int num_resize_actions, |
| 431 bool correctness_mode, |
425 const RateControlThresholds& rc_expected) { | 432 const RateControlThresholds& rc_expected) { |
426 printf( | 433 printf( |
427 "For update #: %d,\n" | 434 "For update #: %d,\n" |
428 " Target Bitrate: %d,\n" | 435 " Target Bitrate: %d,\n" |
429 " Encoding bitrate: %f,\n" | 436 " Encoding bitrate: %f,\n" |
430 " Frame rate: %d \n", | 437 " Frame rate: %d \n", |
431 update_index, bit_rate_, encoding_bitrate_total_, frame_rate_); | 438 update_index, bit_rate_, encoding_bitrate_total_, frame_rate_); |
432 printf( | 439 printf( |
433 " Number of frames to approach target rate: %d, \n" | 440 " Number of frames to approach target rate: %d, \n" |
434 " Number of dropped frames: %d, \n" | 441 " Number of dropped frames: %d, \n" |
435 " Number of spatial resizes: %d, \n", | 442 " Number of spatial resizes: %d, \n", |
436 num_frames_to_hit_target_, num_dropped_frames, num_resize_actions); | 443 num_frames_to_hit_target_, num_dropped_frames, num_resize_actions); |
437 EXPECT_LE(perc_encoding_rate_mismatch_, | 444 if (correctness_mode) { |
438 rc_expected.max_encoding_rate_mismatch); | 445 EXPECT_LE(perc_encoding_rate_mismatch_, |
| 446 rc_expected.max_encoding_rate_mismatch); |
| 447 } |
439 if (num_key_frames_ > 0) { | 448 if (num_key_frames_ > 0) { |
440 int perc_key_frame_size_mismatch = | 449 int perc_key_frame_size_mismatch = |
441 100 * sum_key_frame_size_mismatch_ / num_key_frames_; | 450 100 * sum_key_frame_size_mismatch_ / num_key_frames_; |
442 printf( | 451 printf( |
443 " Number of Key frames: %d \n" | 452 " Number of Key frames: %d \n" |
444 " Key frame rate mismatch: %d \n", | 453 " Key frame rate mismatch: %d \n", |
445 num_key_frames_, perc_key_frame_size_mismatch); | 454 num_key_frames_, perc_key_frame_size_mismatch); |
446 EXPECT_LE(perc_key_frame_size_mismatch, | 455 if (correctness_mode) { |
447 rc_expected.max_key_frame_size_mismatch); | 456 EXPECT_LE(perc_key_frame_size_mismatch, |
| 457 rc_expected.max_key_frame_size_mismatch); |
| 458 } |
448 } | 459 } |
449 printf("\n"); | 460 printf("\n"); |
450 printf("Rates statistics for Layer data \n"); | 461 printf("Rates statistics for Layer data \n"); |
451 for (int i = 0; i < num_temporal_layers_; i++) { | 462 for (int i = 0; i < num_temporal_layers_; i++) { |
452 printf("Temporal layer #%d \n", i); | 463 printf("Temporal layer #%d \n", i); |
453 int perc_frame_size_mismatch = | 464 int perc_frame_size_mismatch = |
454 100 * sum_frame_size_mismatch_[i] / num_frames_per_update_[i]; | 465 100 * sum_frame_size_mismatch_[i] / num_frames_per_update_[i]; |
455 int perc_encoding_rate_mismatch = | 466 int perc_encoding_rate_mismatch = |
456 100 * fabs(encoding_bitrate_[i] - bit_rate_layer_[i]) / | 467 100 * fabs(encoding_bitrate_[i] - bit_rate_layer_[i]) / |
457 bit_rate_layer_[i]; | 468 bit_rate_layer_[i]; |
458 printf( | 469 printf( |
459 " Target Layer Bit rate: %f \n" | 470 " Target Layer Bit rate: %f \n" |
460 " Layer frame rate: %f, \n" | 471 " Layer frame rate: %f, \n" |
461 " Layer per frame bandwidth: %f, \n" | 472 " Layer per frame bandwidth: %f, \n" |
462 " Layer Encoding bit rate: %f, \n" | 473 " Layer Encoding bit rate: %f, \n" |
463 " Layer Percent frame size mismatch: %d, \n" | 474 " Layer Percent frame size mismatch: %d, \n" |
464 " Layer Percent encoding rate mismatch: %d, \n" | 475 " Layer Percent encoding rate mismatch: %d, \n" |
465 " Number of frame processed per layer: %d \n", | 476 " Number of frame processed per layer: %d \n", |
466 bit_rate_layer_[i], frame_rate_layer_[i], per_frame_bandwidth_[i], | 477 bit_rate_layer_[i], frame_rate_layer_[i], per_frame_bandwidth_[i], |
467 encoding_bitrate_[i], perc_frame_size_mismatch, | 478 encoding_bitrate_[i], perc_frame_size_mismatch, |
468 perc_encoding_rate_mismatch, num_frames_per_update_[i]); | 479 perc_encoding_rate_mismatch, num_frames_per_update_[i]); |
469 EXPECT_LE(perc_frame_size_mismatch, | 480 if (correctness_mode) { |
470 rc_expected.max_delta_frame_size_mismatch); | 481 EXPECT_LE(perc_frame_size_mismatch, |
471 EXPECT_LE(perc_encoding_rate_mismatch, | 482 rc_expected.max_delta_frame_size_mismatch); |
472 rc_expected.max_encoding_rate_mismatch); | 483 EXPECT_LE(perc_encoding_rate_mismatch, |
| 484 rc_expected.max_encoding_rate_mismatch); |
| 485 } |
473 } | 486 } |
474 printf("\n"); | 487 printf("\n"); |
475 EXPECT_LE(num_frames_to_hit_target_, rc_expected.max_time_hit_target); | 488 if (correctness_mode) { |
476 EXPECT_LE(num_dropped_frames, rc_expected.max_num_dropped_frames); | 489 EXPECT_LE(num_frames_to_hit_target_, rc_expected.max_time_hit_target); |
477 EXPECT_EQ(rc_expected.num_spatial_resizes, num_resize_actions); | 490 EXPECT_LE(num_dropped_frames, rc_expected.max_num_dropped_frames); |
478 EXPECT_EQ(rc_expected.num_key_frames, num_key_frames_); | 491 EXPECT_EQ(rc_expected.num_spatial_resizes, num_resize_actions); |
| 492 EXPECT_EQ(rc_expected.num_key_frames, num_key_frames_); |
| 493 } |
479 } | 494 } |
480 | 495 |
481 void VerifyQuality(const test::QualityMetricsResult& psnr_result, | 496 void VerifyQuality(const test::QualityMetricsResult& psnr_result, |
482 const test::QualityMetricsResult& ssim_result, | 497 const test::QualityMetricsResult& ssim_result, |
483 const QualityThresholds& quality_thresholds) { | 498 const QualityThresholds& quality_thresholds) { |
484 EXPECT_GT(psnr_result.average, quality_thresholds.min_avg_psnr); | 499 EXPECT_GT(psnr_result.average, quality_thresholds.min_avg_psnr); |
485 EXPECT_GT(psnr_result.min, quality_thresholds.min_min_psnr); | 500 EXPECT_GT(psnr_result.min, quality_thresholds.min_min_psnr); |
486 EXPECT_GT(ssim_result.average, quality_thresholds.min_avg_ssim); | 501 EXPECT_GT(ssim_result.average, quality_thresholds.min_avg_ssim); |
487 EXPECT_GT(ssim_result.min, quality_thresholds.min_min_ssim); | 502 EXPECT_GT(ssim_result.min, quality_thresholds.min_min_ssim); |
488 } | 503 } |
(...skipping 96 matching lines...) Loading... |
585 ++num_frames_per_update_[LayerIndexForFrame(frame_number)]; | 600 ++num_frames_per_update_[LayerIndexForFrame(frame_number)]; |
586 ++num_frames_total_; | 601 ++num_frames_total_; |
587 FrameType frame_type = processor_->EncodedFrameType(frame_number); | 602 FrameType frame_type = processor_->EncodedFrameType(frame_number); |
588 size_t encoded_frame_size = processor_->EncodedFrameSize(frame_number); | 603 size_t encoded_frame_size = processor_->EncodedFrameSize(frame_number); |
589 UpdateRateControlMetrics(frame_number, frame_type, encoded_frame_size); | 604 UpdateRateControlMetrics(frame_number, frame_type, encoded_frame_size); |
590 } | 605 } |
591 } else { | 606 } else { |
592 // In online mode, we calculate the metrics for a given frame right after | 607 // In online mode, we calculate the metrics for a given frame right after |
593 // it has been sent for encoding. | 608 // it has been sent for encoding. |
594 | 609 |
| 610 if (!process.correctness_mode) { |
| 611 // This is a check that we do not disable correctness mode by mistake |
| 612 // on the bots. When doing manual experimentation and correctness mode |
| 613 // is not desired, the check can be commented out. |
| 614 RTC_NOTREACHED() << "This test is set up to run with both correctness " |
| 615 "mode and batch mode disabled. Are you sure you " |
| 616 "want to do that? In particular, this should never " |
| 617 "happen on the bots."; |
| 618 } |
595 if (process.hw_codec) { | 619 if (process.hw_codec) { |
596 LOG(LS_WARNING) << "HW codecs should mostly be run in batch mode, " | 620 LOG(LS_WARNING) << "HW codecs should mostly be run in batch mode, " |
597 "since they may be pipelining."; | 621 "since they may be pipelining."; |
598 } | 622 } |
599 | 623 |
600 while (frame_number < num_frames) { | 624 while (frame_number < num_frames) { |
601 EXPECT_TRUE(processor_->ProcessFrame(frame_number)); | 625 EXPECT_TRUE(processor_->ProcessFrame(frame_number)); |
602 | 626 |
603 ++num_frames_per_update_[LayerIndexForFrame(frame_number)]; | 627 ++num_frames_per_update_[LayerIndexForFrame(frame_number)]; |
604 ++num_frames_total_; | 628 ++num_frames_total_; |
605 FrameType frame_type = processor_->EncodedFrameType(frame_number); | 629 FrameType frame_type = processor_->EncodedFrameType(frame_number); |
606 size_t encoded_frame_size = processor_->EncodedFrameSize(frame_number); | 630 size_t encoded_frame_size = processor_->EncodedFrameSize(frame_number); |
607 UpdateRateControlMetrics(frame_number, frame_type, encoded_frame_size); | 631 UpdateRateControlMetrics(frame_number, frame_type, encoded_frame_size); |
608 | 632 |
609 ++frame_number; | 633 ++frame_number; |
610 | 634 |
611 // If we hit another/next update, verify stats for current state and | 635 // If we hit another/next update, verify stats for current state and |
612 // update layers and codec with new rates. | 636 // update layers and codec with new rates. |
613 if (frame_number == | 637 if (frame_number == |
614 rate_profile.frame_index_rate_update[update_index + 1]) { | 638 rate_profile.frame_index_rate_update[update_index + 1]) { |
615 int num_dropped_frames = processor_->NumberDroppedFrames(); | 639 int num_dropped_frames = processor_->NumberDroppedFrames(); |
616 int num_resize_actions = processor_->NumberSpatialResizes(); | 640 int num_resize_actions = processor_->NumberSpatialResizes(); |
617 VerifyRateControlMetrics(update_index, num_dropped_frames, | 641 VerifyRateControlMetrics(update_index, num_dropped_frames, |
618 num_resize_actions, | 642 num_resize_actions, process.correctness_mode, |
619 rc_thresholds[update_index]); | 643 rc_thresholds[update_index]); |
620 | 644 |
621 // Update layer rates and the codec with new rates. | 645 // Update layer rates and the codec with new rates. |
622 ++update_index; | 646 ++update_index; |
623 bit_rate_ = rate_profile.target_bit_rate[update_index]; | 647 bit_rate_ = rate_profile.target_bit_rate[update_index]; |
624 frame_rate_ = rate_profile.input_frame_rate[update_index]; | 648 frame_rate_ = rate_profile.input_frame_rate[update_index]; |
625 SetLayerRates(); | 649 SetLayerRates(); |
626 ResetRateControlMetrics( | 650 ResetRateControlMetrics( |
627 rate_profile.frame_index_rate_update[update_index + 1]); | 651 rate_profile.frame_index_rate_update[update_index + 1]); |
628 processor_->SetRates(bit_rate_, frame_rate_); | 652 processor_->SetRates(bit_rate_, frame_rate_); |
629 } | 653 } |
630 } | 654 } |
631 processor_->ProcessFrame(frame_number); | 655 processor_->ProcessFrame(frame_number); |
632 | 656 |
633 // Release encoder and decoder to make sure they have finished processing. | 657 // Release encoder and decoder to make sure they have finished processing. |
634 EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder_->Release()); | 658 EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder_->Release()); |
635 EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->Release()); | 659 EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->Release()); |
636 } | 660 } |
637 | 661 |
638 // Verify rate control metrics for all frames (if in batch mode), or for all | 662 // Verify rate control metrics for all frames (if in batch mode), or for all |
639 // frames since the last rate update (if not in batch mode). | 663 // frames since the last rate update (if not in batch mode). |
640 int num_dropped_frames = processor_->NumberDroppedFrames(); | 664 int num_dropped_frames = processor_->NumberDroppedFrames(); |
641 int num_resize_actions = processor_->NumberSpatialResizes(); | 665 int num_resize_actions = processor_->NumberSpatialResizes(); |
642 VerifyRateControlMetrics(update_index, num_dropped_frames, | 666 VerifyRateControlMetrics(update_index, num_dropped_frames, |
643 num_resize_actions, rc_thresholds[update_index]); | 667 num_resize_actions, process.correctness_mode, |
| 668 rc_thresholds[update_index]); |
644 EXPECT_EQ(num_frames, frame_number); | 669 EXPECT_EQ(num_frames, frame_number); |
645 EXPECT_EQ(num_frames + 1, static_cast<int>(stats_.stats_.size())); | 670 EXPECT_EQ(num_frames + 1, static_cast<int>(stats_.stats_.size())); |
646 | 671 |
647 // Close the analysis files before we use them for SSIM/PSNR calculations. | 672 // Close the analysis files before we use them for SSIM/PSNR calculations. |
648 analysis_frame_reader_->Close(); | 673 analysis_frame_reader_->Close(); |
649 analysis_frame_writer_->Close(); | 674 analysis_frame_writer_->Close(); |
650 | 675 |
651 // Close visualization files. | 676 // Close visualization files. |
652 if (source_frame_writer_) { | 677 if (source_frame_writer_) { |
653 source_frame_writer_->Close(); | 678 source_frame_writer_->Close(); |
654 } | 679 } |
655 if (encoded_frame_writer_) { | 680 if (encoded_frame_writer_) { |
656 EXPECT_TRUE(encoded_frame_writer_->Close()); | 681 EXPECT_TRUE(encoded_frame_writer_->Close()); |
657 } | 682 } |
658 if (decoded_frame_writer_) { | 683 if (decoded_frame_writer_) { |
659 decoded_frame_writer_->Close(); | 684 decoded_frame_writer_->Close(); |
660 } | 685 } |
661 | 686 |
662 // TODO(marpan): Should compute these quality metrics per SetRates update. | 687 // TODO(marpan): Should compute these quality metrics per SetRates update. |
663 test::QualityMetricsResult psnr_result, ssim_result; | 688 test::QualityMetricsResult psnr_result, ssim_result; |
664 EXPECT_EQ(0, test::I420MetricsFromFiles(config_.input_filename.c_str(), | 689 EXPECT_EQ(0, test::I420MetricsFromFiles(config_.input_filename.c_str(), |
665 config_.output_filename.c_str(), | 690 config_.output_filename.c_str(), |
666 config_.codec_settings->width, | 691 config_.codec_settings->width, |
667 config_.codec_settings->height, | 692 config_.codec_settings->height, |
668 &psnr_result, &ssim_result)); | 693 &psnr_result, &ssim_result)); |
669 printf("PSNR avg: %f, min: %f\nSSIM avg: %f, min: %f\n", | 694 printf("PSNR avg: %f, min: %f\nSSIM avg: %f, min: %f\n", |
670 psnr_result.average, psnr_result.min, ssim_result.average, | 695 psnr_result.average, psnr_result.min, ssim_result.average, |
671 ssim_result.min); | 696 ssim_result.min); |
672 VerifyQuality(psnr_result, ssim_result, quality_thresholds); | 697 if (process.correctness_mode) { |
| 698 VerifyQuality(psnr_result, ssim_result, quality_thresholds); |
| 699 } |
673 stats_.PrintSummary(); | 700 stats_.PrintSummary(); |
674 | 701 |
675 // Remove analysis file. | 702 // Remove analysis file. |
676 if (remove(config_.output_filename.c_str()) < 0) { | 703 if (remove(config_.output_filename.c_str()) < 0) { |
677 fprintf(stderr, "Failed to remove temporary file!\n"); | 704 fprintf(stderr, "Failed to remove temporary file!\n"); |
678 } | 705 } |
679 } | 706 } |
680 | 707 |
681 static void SetCodecParams(CodecParams* process_settings, | 708 static void SetCodecParams(CodecParams* process_settings, |
682 VideoCodecType codec_type, | 709 VideoCodecType codec_type, |
683 bool hw_codec, | 710 bool hw_codec, |
684 bool use_single_core, | 711 bool use_single_core, |
685 float packet_loss_probability, | 712 float packet_loss_probability, |
686 int key_frame_interval, | 713 int key_frame_interval, |
687 int num_temporal_layers, | 714 int num_temporal_layers, |
688 bool error_concealment_on, | 715 bool error_concealment_on, |
689 bool denoising_on, | 716 bool denoising_on, |
690 bool frame_dropper_on, | 717 bool frame_dropper_on, |
691 bool spatial_resize_on, | 718 bool spatial_resize_on, |
692 int width, | 719 int width, |
693 int height, | 720 int height, |
694 const std::string& filename, | 721 const std::string& filename, |
695 bool verbose_logging, | 722 bool verbose_logging, |
| 723 bool correctness_mode, |
696 bool batch_mode) { | 724 bool batch_mode) { |
697 process_settings->codec_type = codec_type; | 725 process_settings->codec_type = codec_type; |
698 process_settings->hw_codec = hw_codec; | 726 process_settings->hw_codec = hw_codec; |
699 process_settings->use_single_core = use_single_core; | 727 process_settings->use_single_core = use_single_core; |
700 process_settings->packet_loss_probability = packet_loss_probability; | 728 process_settings->packet_loss_probability = packet_loss_probability; |
701 process_settings->key_frame_interval = key_frame_interval; | 729 process_settings->key_frame_interval = key_frame_interval; |
702 process_settings->num_temporal_layers = num_temporal_layers, | 730 process_settings->num_temporal_layers = num_temporal_layers, |
703 process_settings->error_concealment_on = error_concealment_on; | 731 process_settings->error_concealment_on = error_concealment_on; |
704 process_settings->denoising_on = denoising_on; | 732 process_settings->denoising_on = denoising_on; |
705 process_settings->frame_dropper_on = frame_dropper_on; | 733 process_settings->frame_dropper_on = frame_dropper_on; |
706 process_settings->spatial_resize_on = spatial_resize_on; | 734 process_settings->spatial_resize_on = spatial_resize_on; |
707 process_settings->width = width; | 735 process_settings->width = width; |
708 process_settings->height = height; | 736 process_settings->height = height; |
709 process_settings->filename = filename; | 737 process_settings->filename = filename; |
710 process_settings->verbose_logging = verbose_logging; | 738 process_settings->verbose_logging = verbose_logging; |
| 739 process_settings->correctness_mode = correctness_mode; |
711 process_settings->batch_mode = batch_mode; | 740 process_settings->batch_mode = batch_mode; |
712 } | 741 } |
713 | 742 |
714 static void SetCodecParams(CodecParams* process_settings, | 743 static void SetCodecParams(CodecParams* process_settings, |
715 VideoCodecType codec_type, | 744 VideoCodecType codec_type, |
716 bool hw_codec, | 745 bool hw_codec, |
717 bool use_single_core, | 746 bool use_single_core, |
718 float packet_loss_probability, | 747 float packet_loss_probability, |
719 int key_frame_interval, | 748 int key_frame_interval, |
720 int num_temporal_layers, | 749 int num_temporal_layers, |
721 bool error_concealment_on, | 750 bool error_concealment_on, |
722 bool denoising_on, | 751 bool denoising_on, |
723 bool frame_dropper_on, | 752 bool frame_dropper_on, |
724 bool spatial_resize_on) { | 753 bool spatial_resize_on) { |
725 SetCodecParams(process_settings, codec_type, hw_codec, use_single_core, | 754 SetCodecParams(process_settings, codec_type, hw_codec, use_single_core, |
726 packet_loss_probability, key_frame_interval, | 755 packet_loss_probability, key_frame_interval, |
727 num_temporal_layers, error_concealment_on, denoising_on, | 756 num_temporal_layers, error_concealment_on, denoising_on, |
728 frame_dropper_on, spatial_resize_on, kCifWidth, kCifHeight, | 757 frame_dropper_on, spatial_resize_on, kCifWidth, kCifHeight, |
729 kFilenameForemanCif, false /* verbose_logging */, | 758 kFilenameForemanCif, false /* verbose_logging */, |
730 false /* batch_mode */); | 759 true /* correctness_mode */, false /* batch_mode */); |
731 } | 760 } |
732 | 761 |
733 static void SetQualityThresholds(QualityThresholds* quality_thresholds, | 762 static void SetQualityThresholds(QualityThresholds* quality_thresholds, |
734 double min_avg_psnr, | 763 double min_avg_psnr, |
735 double min_min_psnr, | 764 double min_min_psnr, |
736 double min_avg_ssim, | 765 double min_avg_ssim, |
737 double min_min_ssim) { | 766 double min_min_ssim) { |
738 quality_thresholds->min_avg_psnr = min_avg_psnr; | 767 quality_thresholds->min_avg_psnr = min_avg_psnr; |
739 quality_thresholds->min_min_psnr = min_min_psnr; | 768 quality_thresholds->min_min_psnr = min_min_psnr; |
740 quality_thresholds->min_avg_ssim = min_avg_ssim; | 769 quality_thresholds->min_avg_ssim = min_avg_ssim; |
(...skipping 79 matching lines...) Loading... |
820 | 849 |
821 // Codec and network settings. | 850 // Codec and network settings. |
822 float packet_loss_probability_; | 851 float packet_loss_probability_; |
823 int num_temporal_layers_; | 852 int num_temporal_layers_; |
824 }; | 853 }; |
825 | 854 |
826 } // namespace test | 855 } // namespace test |
827 } // namespace webrtc | 856 } // namespace webrtc |
828 | 857 |
829 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_VIDEOPROCESSOR_INTEGRATIONTES
T_H_ | 858 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_VIDEOPROCESSOR_INTEGRATIONTES
T_H_ |
OLD | NEW |