Chromium Code Reviews

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

Issue 2710913004: Step #3: Add flag for correctness mode in VideoProcessor integration tests. (Closed)
Patch Set: Nit. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
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 68 matching lines...)
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...)
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...)
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...)
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_
OLDNEW

Powered by Google App Engine