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

Unified Diff: webrtc/tools/frame_analyzer/video_quality_analysis_unittest.cc

Issue 2666333003: Better comparison for frame analyzer (Closed)
Patch Set: Moved things to SetUp() and close stats file Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/tools/frame_analyzer/video_quality_analysis.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/tools/frame_analyzer/video_quality_analysis_unittest.cc
diff --git a/webrtc/tools/frame_analyzer/video_quality_analysis_unittest.cc b/webrtc/tools/frame_analyzer/video_quality_analysis_unittest.cc
index 85d0b46e79f72879db7fa0f7053888d7fe19fc2a..aba849d2b3b89a302b6222cd2a29b133631ee4eb 100644
--- a/webrtc/tools/frame_analyzer/video_quality_analysis_unittest.cc
+++ b/webrtc/tools/frame_analyzer/video_quality_analysis_unittest.cc
@@ -26,18 +26,20 @@ namespace test {
// want those numbers to be picked up as perf numbers.
class VideoQualityAnalysisTest : public ::testing::Test {
protected:
- static void SetUpTestCase() {
- std::string log_filename = webrtc::test::OutputPath() +
- "VideoQualityAnalysisTest.log";
+ void SetUp() {
+ std::string log_filename = TempFilename(webrtc::test::OutputPath(),
+ "VideoQualityAnalysisTest.log");
logfile_ = fopen(log_filename.c_str(), "w");
ASSERT_TRUE(logfile_ != NULL);
+
+ stats_filename_ref_ = TempFilename(OutputPath(), "stats-1.txt");
+ stats_filename_ = TempFilename(OutputPath(), "stats-2.txt");
kjellander_webrtc 2017/02/15 14:00:37 Nice, how about moving stats_file in here as well
mandermo 2017/02/15 14:50:29 I just felt it was proper to close the file before
kjellander_webrtc 2017/02/15 15:34:22 I see. Do whatever you think is cleanest.
}
- static void TearDownTestCase() {
- ASSERT_EQ(0, fclose(logfile_));
- }
- static FILE* logfile_;
+ void TearDown() { ASSERT_EQ(0, fclose(logfile_)); }
+ FILE* logfile_;
+ std::string stats_filename_ref_;
+ std::string stats_filename_;
};
-FILE* VideoQualityAnalysisTest::logfile_ = NULL;
TEST_F(VideoQualityAnalysisTest, MatchExtractedY4mFrame) {
std::string video_file =
@@ -85,33 +87,26 @@ TEST_F(VideoQualityAnalysisTest, PrintAnalysisResultsThreeFrames) {
}
TEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesInvalidFile) {
- std::string stats_filename_ref =
- OutputPath() + "non-existing-stats-file-1.txt";
- std::string stats_filename = OutputPath() + "non-existing-stats-file-2.txt";
- remove(stats_filename.c_str());
+ remove(stats_filename_.c_str());
PrintMaxRepeatedAndSkippedFrames(logfile_, "NonExistingStatsFile",
- stats_filename_ref, stats_filename);
+ stats_filename_ref_, stats_filename_);
}
TEST_F(VideoQualityAnalysisTest,
PrintMaxRepeatedAndSkippedFramesEmptyStatsFile) {
- std::string stats_filename_ref = OutputPath() + "empty-stats-1.txt";
- std::string stats_filename = OutputPath() + "empty-stats-2.txt";
std::ofstream stats_file;
- stats_file.open(stats_filename_ref.c_str());
+ stats_file.open(stats_filename_ref_.c_str());
stats_file.close();
- stats_file.open(stats_filename.c_str());
+ stats_file.open(stats_filename_.c_str());
stats_file.close();
PrintMaxRepeatedAndSkippedFrames(logfile_, "EmptyStatsFile",
- stats_filename_ref, stats_filename);
+ stats_filename_ref_, stats_filename_);
}
TEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesNormalFile) {
- std::string stats_filename_ref = OutputPath() + "stats-1.txt";
- std::string stats_filename = OutputPath() + "stats-2.txt";
std::ofstream stats_file;
- stats_file.open(stats_filename_ref.c_str());
+ stats_file.open(stats_filename_ref_.c_str());
stats_file << "frame_0001 0100\n";
stats_file << "frame_0002 0101\n";
stats_file << "frame_0003 0102\n";
@@ -121,7 +116,7 @@ TEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesNormalFile) {
stats_file << "frame_0007 0108\n";
stats_file.close();
- stats_file.open(stats_filename.c_str());
+ stats_file.open(stats_filename_.c_str());
stats_file << "frame_0001 0100\n";
stats_file << "frame_0002 0101\n";
stats_file << "frame_0003 0101\n";
@@ -129,9 +124,217 @@ TEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesNormalFile) {
stats_file.close();
PrintMaxRepeatedAndSkippedFrames(logfile_, "NormalStatsFile",
- stats_filename_ref, stats_filename);
+ stats_filename_ref_, stats_filename_);
+}
+
+namespace {
+void VerifyLogOutput(const std::string& log_filename,
+ const std::vector<std::string>& expected_out) {
+ std::ifstream logf(log_filename);
+ std::string line;
+
+ std::size_t i;
+ for (i = 0; i < expected_out.size() && getline(logf, line); ++i) {
+ ASSERT_EQ(expected_out.at(i), line);
+ }
+ ASSERT_TRUE(i == expected_out.size()) << "Not enough input data";
+}
+} // unnamed namespace
+
+TEST_F(VideoQualityAnalysisTest,
+ PrintMaxRepeatedAndSkippedFramesSkippedFrames) {
+ std::ofstream stats_file;
+
+ std::string log_filename =
+ TempFilename(webrtc::test::OutputPath(), "log.log");
+ FILE* logfile = fopen(log_filename.c_str(), "w");
+ ASSERT_TRUE(logfile != NULL);
+ stats_file.open(stats_filename_ref_.c_str());
+ stats_file << "frame_0001 0100\n";
+ stats_file << "frame_0002 0101\n";
+ stats_file << "frame_0002 0101\n";
+ stats_file << "frame_0003 0103\n";
+ stats_file << "frame_0004 0103\n";
+ stats_file << "frame_0005 0106\n";
+ stats_file << "frame_0006 0106\n";
+ stats_file << "frame_0007 0108\n";
+ stats_file << "frame_0008 0110\n";
+ stats_file << "frame_0009 0112\n";
+ stats_file.close();
+
+ stats_file.open(stats_filename_.c_str());
+ stats_file << "frame_0001 0101\n";
+ stats_file << "frame_0002 0101\n";
+ stats_file << "frame_0003 0101\n";
+ stats_file << "frame_0004 0108\n";
+ stats_file << "frame_0005 0108\n";
+ stats_file << "frame_0006 0112\n";
+ stats_file.close();
+
+ PrintMaxRepeatedAndSkippedFrames(logfile, "NormalStatsFile",
+ stats_filename_ref_, stats_filename_);
+ ASSERT_EQ(0, fclose(logfile));
+
+ std::vector<std::string> expected_out = {
+ "RESULT Max_repeated: NormalStatsFile= 2",
+ "RESULT Max_skipped: NormalStatsFile= 2",
+ "RESULT Total_skipped: NormalStatsFile= 3",
+ "RESULT Decode_errors_reference: NormalStatsFile= 0",
+ "RESULT Decode_errors_test: NormalStatsFile= 0"};
+ VerifyLogOutput(log_filename, expected_out);
}
+TEST_F(VideoQualityAnalysisTest,
+ PrintMaxRepeatedAndSkippedFramesDecodeErrorInTest) {
+ std::ofstream stats_file;
+
+ std::string log_filename =
+ TempFilename(webrtc::test::OutputPath(), "log.log");
+ FILE* logfile = fopen(log_filename.c_str(), "w");
+ ASSERT_TRUE(logfile != NULL);
+ stats_file.open(stats_filename_ref_.c_str());
+ stats_file << "frame_0001 0100\n";
+ stats_file << "frame_0002 0100\n";
+ stats_file << "frame_0002 0101\n";
+ stats_file << "frame_0003 0103\n";
+ stats_file << "frame_0004 0103\n";
+ stats_file << "frame_0005 0106\n";
+ stats_file << "frame_0006 0107\n";
+ stats_file << "frame_0007 0107\n";
+ stats_file << "frame_0008 0110\n";
+ stats_file << "frame_0009 0112\n";
+ stats_file.close();
+
+ stats_file.open(stats_filename_.c_str());
+ stats_file << "frame_0001 0101\n";
+ stats_file << "frame_0002 Barcode error\n";
+ stats_file << "frame_0003 Barcode error\n";
+ stats_file << "frame_0004 Barcode error\n";
+ stats_file << "frame_0005 0107\n";
+ stats_file << "frame_0006 0110\n";
+ stats_file.close();
+
+ PrintMaxRepeatedAndSkippedFrames(logfile, "NormalStatsFile",
+ stats_filename_ref_, stats_filename_);
+ ASSERT_EQ(0, fclose(logfile));
+
+ std::vector<std::string> expected_out = {
+ "RESULT Max_repeated: NormalStatsFile= 1",
+ "RESULT Max_skipped: NormalStatsFile= 0",
+ "RESULT Total_skipped: NormalStatsFile= 0",
+ "RESULT Decode_errors_reference: NormalStatsFile= 0",
+ "RESULT Decode_errors_test: NormalStatsFile= 3"};
+ VerifyLogOutput(log_filename, expected_out);
+}
+
+TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersOneValue) {
+ std::ofstream stats_file;
+
+ stats_file.open(stats_filename_.c_str());
+ stats_file << "frame_0001 0101\n";
+ stats_file.close();
+ FILE* stats_filef = fopen(stats_filename_.c_str(), "r");
+ ASSERT_TRUE(stats_filef != NULL);
+
+ auto clusters = CalculateFrameClusters(stats_filef, nullptr);
+ ASSERT_EQ(0, fclose(stats_filef));
+ decltype(clusters) expected = {std::make_pair(101, 1)};
+ ASSERT_EQ(expected, clusters);
+}
+
+TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersOneOneTwo) {
+ std::ofstream stats_file;
+
+ stats_file.open(stats_filename_.c_str());
+ stats_file << "frame_0001 0101\n";
+ stats_file << "frame_0002 0101\n";
+ stats_file << "frame_0003 0102\n";
+ stats_file.close();
+
+ FILE* stats_filef = fopen(stats_filename_.c_str(), "r");
+ ASSERT_TRUE(stats_filef != NULL);
+
+ auto clusters = CalculateFrameClusters(stats_filef, nullptr);
+ ASSERT_EQ(0, fclose(stats_filef));
+ decltype(clusters) expected = {std::make_pair(101, 2),
+ std::make_pair(102, 1)};
+ ASSERT_EQ(expected, clusters);
+}
+
+TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersOneOneErrErrThree) {
+ std::ofstream stats_file;
+
+ stats_file.open(stats_filename_.c_str());
+ stats_file << "frame_0001 0101\n";
+ stats_file << "frame_0002 0101\n";
+ stats_file << "frame_0003 Barcode error\n";
+ stats_file << "frame_0004 Barcode error\n";
+ stats_file << "frame_0005 0103\n";
+ stats_file.close();
+
+ FILE* stats_filef = fopen(stats_filename_.c_str(), "r");
+ ASSERT_TRUE(stats_filef != NULL);
+
+ auto clusters = CalculateFrameClusters(stats_filef, nullptr);
+ ASSERT_EQ(0, fclose(stats_filef));
+ decltype(clusters) expected = {std::make_pair(101, 2),
+ std::make_pair(DECODE_ERROR, 2),
+ std::make_pair(103, 1)};
+ ASSERT_EQ(expected, clusters);
+}
+
+TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersErrErr) {
+ std::ofstream stats_file;
+
+ stats_file.open(stats_filename_.c_str());
+ stats_file << "frame_0001 Barcode error\n";
+ stats_file << "frame_0002 Barcode error\n";
+ stats_file.close();
+
+ FILE* stats_filef = fopen(stats_filename_.c_str(), "r");
+ ASSERT_TRUE(stats_filef != NULL);
+
+ auto clusters = CalculateFrameClusters(stats_filef, nullptr);
+ ASSERT_EQ(0, fclose(stats_filef));
+ decltype(clusters) expected = {std::make_pair(DECODE_ERROR, 2)};
+ ASSERT_EQ(expected, clusters);
+}
+
+TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersOneOneErrErrOneOne) {
+ std::ofstream stats_file;
+
+ stats_file.open(stats_filename_.c_str());
+ stats_file << "frame_0001 0101\n";
+ stats_file << "frame_0002 0101\n";
+ stats_file << "frame_0003 Barcode error\n";
+ stats_file << "frame_0004 Barcode error\n";
+ stats_file << "frame_0005 0101\n";
+ stats_file << "frame_0006 0101\n";
+ stats_file.close();
+
+ FILE* stats_filef = fopen(stats_filename_.c_str(), "r");
+ ASSERT_TRUE(stats_filef != NULL);
+
+ auto clusters = CalculateFrameClusters(stats_filef, nullptr);
+ ASSERT_EQ(0, fclose(stats_filef));
+ decltype(clusters) expected = {std::make_pair(101, 6)};
+ ASSERT_EQ(expected, clusters);
+}
+
+TEST_F(VideoQualityAnalysisTest, CalculateFrameClustersEmpty) {
+ std::ofstream stats_file;
+
+ stats_file.open(stats_filename_.c_str());
+ stats_file.close();
+
+ FILE* stats_filef = fopen(stats_filename_.c_str(), "r");
+ ASSERT_TRUE(stats_filef != NULL);
+
+ auto clusters = CalculateFrameClusters(stats_filef, nullptr);
+ ASSERT_EQ(0, fclose(stats_filef));
+ decltype(clusters) expected;
+ ASSERT_EQ(expected, clusters);
+}
} // namespace test
} // namespace webrtc
« no previous file with comments | « webrtc/tools/frame_analyzer/video_quality_analysis.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698