13524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org/*
23524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
33524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org *
43524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org *  Use of this source code is governed by a BSD-style license
53524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org *  that can be found in the LICENSE file in the root of the source
63524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org *  tree. An additional intellectual property rights grant can be found
73524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org *  in the file PATENTS.  All contributing project authors may
83524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
93524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org */
103524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
113524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org// This test doesn't actually verify the output since it's just printed
123524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org// to stdout by void functions, but it's still useful as it executes the code.
133524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
143524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org#include <fstream>
153524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org#include <string>
163524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
173524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org#include "testing/gtest/include/gtest/gtest.h"
183524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org#include "webrtc/test/testsupport/fileutils.h"
193524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org#include "webrtc/tools/frame_analyzer/video_quality_analysis.h"
203524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
213524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.orgnamespace webrtc {
223524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.orgnamespace test {
233524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
24f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org// Setup a log file to write the output to instead of stdout because we don't
25f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org// want those numbers to be picked up as perf numbers.
26f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.orgclass VideoQualityAnalysisTest : public ::testing::Test {
27f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org protected:
28f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  static void SetUpTestCase() {
29f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org    std::string log_filename = webrtc::test::OutputPath() +
30f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org        "VideoQualityAnalysisTest.log";
31f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org    logfile_ = fopen(log_filename.c_str(), "w");
32f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org    ASSERT_TRUE(logfile_ != NULL);
33f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  }
34f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  static void TearDownTestCase() {
35f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org    ASSERT_EQ(0, fclose(logfile_));
36f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  }
37f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  static FILE* logfile_;
38f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org};
39f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.orgFILE* VideoQualityAnalysisTest::logfile_ = NULL;
403524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
41f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintAnalysisResultsEmpty) {
423524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  ResultsContainer result;
43f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  PrintAnalysisResults(logfile_, "Empty", &result);
443524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org}
453524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
46f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintAnalysisResultsOneFrame) {
473524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  ResultsContainer result;
483524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  result.frames.push_back(AnalysisResult(0, 35.0, 0.9));
49f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  PrintAnalysisResults(logfile_, "OneFrame", &result);
503524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org}
513524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
52f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintAnalysisResultsThreeFrames) {
533524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  ResultsContainer result;
543524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  result.frames.push_back(AnalysisResult(0, 35.0, 0.9));
553524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  result.frames.push_back(AnalysisResult(1, 34.0, 0.8));
563524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  result.frames.push_back(AnalysisResult(2, 33.0, 0.7));
57f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  PrintAnalysisResults(logfile_, "ThreeFrames", &result);
583524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org}
593524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
60f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesInvalidFile) {
613524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  std::string stats_filename = OutputPath() + "non-existing-stats-file.txt";
623524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  remove(stats_filename.c_str());
63f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  PrintMaxRepeatedAndSkippedFrames(logfile_, "NonExistingStatsFile",
64f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org                                   stats_filename);
653524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org}
663524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
67f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest,
68f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org       PrintMaxRepeatedAndSkippedFramesEmptyStatsFile) {
693524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  std::string stats_filename = OutputPath() + "empty-stats.txt";
703524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  std::ofstream stats_file;
713524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  stats_file.open(stats_filename.c_str());
723524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  stats_file.close();
73f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  PrintMaxRepeatedAndSkippedFrames(logfile_, "EmptyStatsFile", stats_filename);
743524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org}
753524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
76f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesNormalFile) {
773524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  std::string stats_filename = OutputPath() + "stats.txt";
783524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  std::ofstream stats_file;
793524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  stats_file.open(stats_filename.c_str());
803524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  stats_file << "frame_0001 0100\n";
813524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  stats_file << "frame_0002 0101\n";
823524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  stats_file << "frame_0003 0101\n";
833524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  stats_file << "frame_0004 0106\n";
843524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org  stats_file.close();
853524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
86f8a17981af6b34af256873bb090f264ecaf977d0kjellander@webrtc.org  PrintMaxRepeatedAndSkippedFrames(logfile_, "NormalStatsFile", stats_filename);
873524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org}
883524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
893524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org
903524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org}  // namespace test
913524adea7db77f23c959a87847fd318a55986aa8kjellander@webrtc.org}  // namespace webrtc
92