diff options
author | stefan@webrtc.org <stefan@webrtc.org> | 2014-10-14 10:38:49 +0000 |
---|---|---|
committer | stefan@webrtc.org <stefan@webrtc.org> | 2014-10-14 10:38:49 +0000 |
commit | 6368255205b7849b9ead613754cb5c31c8b0294b (patch) | |
tree | d7953c2254e93c8f4dcff82e9a3e44cb4db27350 /video_engine/test | |
parent | 406719cfcb5d97456967af66add94ce9290c1988 (diff) | |
download | webrtc-6368255205b7849b9ead613754cb5c31c8b0294b.tar.gz |
Add a packet loss full stack test to the new API.
Remove all full stack tests for the old API.
BUG=3750
R=pbos@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/23029004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@7442 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'video_engine/test')
-rw-r--r-- | video_engine/test/auto_test/automated/vie_video_verification_test.cc | 194 |
1 files changed, 0 insertions, 194 deletions
diff --git a/video_engine/test/auto_test/automated/vie_video_verification_test.cc b/video_engine/test/auto_test/automated/vie_video_verification_test.cc index 66628e9e..16539594 100644 --- a/video_engine/test/auto_test/automated/vie_video_verification_test.cc +++ b/video_engine/test/auto_test/automated/vie_video_verification_test.cc @@ -115,105 +115,6 @@ class ViEVideoVerificationTest : public testing::Test { } }; -class ParameterizedFullStackTest : public ViEVideoVerificationTest, - public ::testing::WithParamInterface<int> { - public: - static const int kNumFullStackInstances = 4; - - protected: - struct TestParameters { - NetworkParameters network; - std::string file_name; - int width; - int height; - int bitrate; - double avg_psnr_threshold; - double avg_ssim_threshold; - ProtectionMethod protection_method; - std::string test_label; - }; - - void SetUp() { - for (int i = 0; i < kNumFullStackInstances; ++i) { - parameter_table_[i].file_name = webrtc::test::ResourcePath("foreman_cif", - "yuv"); - parameter_table_[i].width = 352; - parameter_table_[i].height = 288; - } - int i = 0; - parameter_table_[i].protection_method = kNack; - // Uniform loss => Setting burst length to -1. - parameter_table_[i].network.loss_model = kUniformLoss; - parameter_table_[i].network.packet_loss_rate = 0; - parameter_table_[i].network.burst_length = -1; - parameter_table_[i].network.mean_one_way_delay = 0; - parameter_table_[i].network.std_dev_one_way_delay = 0; - parameter_table_[i].bitrate = 300; - // TODO(holmer): Enable for Win and Mac when the file rendering has been - // moved to a separate thread. -#ifdef WEBRTC_LINUX - parameter_table_[i].avg_psnr_threshold = 35; - parameter_table_[i].avg_ssim_threshold = 0.96; -#else - parameter_table_[i].avg_psnr_threshold = 0; - parameter_table_[i].avg_ssim_threshold = 0.0; -#endif - parameter_table_[i].test_label = "net_delay_0_0_plr_0"; - ++i; - parameter_table_[i].protection_method = kNack; - parameter_table_[i].network.loss_model = kUniformLoss; - parameter_table_[i].network.packet_loss_rate = 5; - parameter_table_[i].network.burst_length = -1; - parameter_table_[i].network.mean_one_way_delay = 50; - parameter_table_[i].network.std_dev_one_way_delay = 5; - parameter_table_[i].bitrate = 300; - // TODO(holmer): Enable for Win and Mac when the file rendering has been - // moved to a separate thread. -#ifdef WEBRTC_LINUX - parameter_table_[i].avg_psnr_threshold = 35; - parameter_table_[i].avg_ssim_threshold = 0.96; -#else - parameter_table_[i].avg_psnr_threshold = 0; - parameter_table_[i].avg_ssim_threshold = 0.0; -#endif - parameter_table_[i].test_label = "net_delay_50_5_plr_5"; - ++i; - parameter_table_[i].protection_method = kNack; - parameter_table_[i].network.loss_model = kUniformLoss; - parameter_table_[i].network.packet_loss_rate = 0; - parameter_table_[i].network.burst_length = -1; - parameter_table_[i].network.mean_one_way_delay = 100; - parameter_table_[i].network.std_dev_one_way_delay = 10; - parameter_table_[i].bitrate = 300; - // TODO(holmer): Enable for Win and Mac when the file rendering has been - // moved to a separate thread. -#ifdef WEBRTC_LINUX - parameter_table_[i].avg_psnr_threshold = 35; - parameter_table_[i].avg_ssim_threshold = 0.96; -#else - parameter_table_[i].avg_psnr_threshold = 0; - parameter_table_[i].avg_ssim_threshold = 0.0; -#endif - parameter_table_[i].test_label = "net_delay_100_10_plr_0"; - ++i; - parameter_table_[i].protection_method = kNack; - parameter_table_[i].network.loss_model = kGilbertElliotLoss; - parameter_table_[i].network.packet_loss_rate = 5; - parameter_table_[i].network.burst_length = 3; - parameter_table_[i].network.mean_one_way_delay = 100; - parameter_table_[i].network.std_dev_one_way_delay = 10; - parameter_table_[i].bitrate = 300; - // Thresholds disabled for now. This is being run mainly to get a graph. - parameter_table_[i].avg_psnr_threshold = 0; - parameter_table_[i].avg_ssim_threshold = 0.0; - parameter_table_[i].test_label = "net_delay_100_10_plr_5_gilbert_elliot"; - - ASSERT_EQ(kNumFullStackInstances - 1, i); - } - - TestParameters parameter_table_[kNumFullStackInstances]; -}; - TEST_F(ViEVideoVerificationTest, RunsBaseStandardTestWithoutErrors) { // I420 is lossless, so the I420 test should obviously get perfect results - // the local preview and remote output files should be bit-exact. This test @@ -251,99 +152,4 @@ TEST_F(ViEVideoVerificationTest, RunsBaseStandardTestWithoutErrors) { kNumAttempts << " attempts."; } -// Runs a whole stack processing with tracking of which frames are dropped -// in the encoder. Tests show that they start at the same frame, which is -// the important thing when doing frame-to-frame comparison with PSNR/SSIM. -TEST_P(ParameterizedFullStackTest, RunsFullStackWithoutErrors) { - // Using CIF here since it's a more common resolution than QCIF, and higher - // resolutions shouldn't be a problem for a test using VP8. - input_file_ = parameter_table_[GetParam()].file_name; - FrameDropDetector detector; - local_file_renderer_ = new ViEToFileRenderer(); - remote_file_renderer_ = new FrameDropMonitoringRemoteFileRenderer(&detector); - SetUpLocalFileRenderer(local_file_renderer_); - SetUpRemoteFileRenderer(remote_file_renderer_); - - // Set a low bit rate so the encoder budget will be tight, causing it to drop - // frames every now and then. - const int kBitRateKbps = parameter_table_[GetParam()].bitrate; - const NetworkParameters network = parameter_table_[GetParam()].network; - int width = parameter_table_[GetParam()].width; - int height = parameter_table_[GetParam()].height; - ProtectionMethod protection_method = - parameter_table_[GetParam()].protection_method; - ViETest::Log("Bit rate : %5d kbps", kBitRateKbps); - ViETest::Log("Packet loss : %5d %%", network.packet_loss_rate); - ViETest::Log("Network delay: mean=%dms std dev=%d ms", - network.mean_one_way_delay, network.std_dev_one_way_delay); - tests_.TestFullStack(input_file_, width, height, kBitRateKbps, - protection_method, network, local_file_renderer_, - remote_file_renderer_, &detector); - const std::string reference_file = local_file_renderer_->GetFullOutputPath(); - const std::string output_file = remote_file_renderer_->GetFullOutputPath(); - StopRenderers(); - - detector.CalculateResults(); - detector.PrintReport(parameter_table_[GetParam()].test_label); - - if (detector.GetNumberOfFramesDroppedAt(FrameDropDetector::kRendered) > - detector.GetNumberOfFramesDroppedAt(FrameDropDetector::kDecoded)) { - detector.PrintDebugDump(); - } - - ASSERT_GE(detector.GetNumberOfFramesDroppedAt(FrameDropDetector::kRendered), - detector.GetNumberOfFramesDroppedAt(FrameDropDetector::kDecoded)) - << "The number of dropped frames on the decode and render steps are not " - "equal. This may be because we have a major problem in the buffers of " - "the ViEToFileRenderer?"; - - // We may have dropped frames during the processing, which means the output - // file does not contain all the frames that are present in the input file. - // To make the quality measurement correct, we must adjust the output file to - // that by copying the last successful frame into the place where the dropped - // frame would be, for all dropped frames. - const int frame_length_in_bytes = 3 * width * height / 2; - ViETest::Log("Frame length: %d bytes", frame_length_in_bytes); - std::vector<Frame*> all_frames = detector.GetAllFrames(); - FixOutputFileForComparison(output_file, frame_length_in_bytes, all_frames); - - // Verify all sent frames are present in the output file. - size_t output_file_size = webrtc::test::GetFileSize(output_file); - EXPECT_EQ(all_frames.size(), output_file_size / frame_length_in_bytes) - << "The output file size is incorrect. It should be equal to the number " - "of frames multiplied by the frame size. This will likely affect " - "PSNR/SSIM calculations in a bad way."; - - TearDownFileRenderers(); - - // We are running on a lower bitrate here so we need to settle for somewhat - // lower PSNR and SSIM values. - double actual_psnr = 0; - double actual_ssim = 0; - CompareFiles(reference_file, output_file, &actual_psnr, &actual_ssim); - - const double kExpectedMinimumPSNR = - parameter_table_[GetParam()].avg_psnr_threshold; - const double kExpectedMinimumSSIM = - parameter_table_[GetParam()].avg_ssim_threshold; - - EXPECT_GE(actual_psnr, kExpectedMinimumPSNR); - EXPECT_GE(actual_ssim, kExpectedMinimumSSIM); - - std::stringstream ss; - ss << std::setprecision(3) << std::fixed << actual_psnr; - webrtc::test::PrintResult( - "psnr", "", parameter_table_[GetParam()].test_label, - ss.str(), "dB", false); - - ss.str(""); - ss << std::setprecision(3) << std::fixed << actual_ssim; - webrtc::test::PrintResult( - "ssim", "", parameter_table_[GetParam()].test_label, - ss.str(), "", false); -} - -INSTANTIATE_TEST_CASE_P(FullStackTests, ParameterizedFullStackTest, - ::testing::Range(0, ParameterizedFullStackTest::kNumFullStackInstances)); - } // namespace |