1/*
2 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
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
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11
12#include <stdlib.h>
13#include <string.h>
14
15#include "gflags/gflags.h"
16#include "webrtc/modules/video_coding/main/interface/video_coding.h"
17#include "webrtc/modules/video_coding/main/test/codec_database_test.h"
18#include "webrtc/modules/video_coding/main/test/generic_codec_test.h"
19#include "webrtc/modules/video_coding/main/test/media_opt_test.h"
20#include "webrtc/modules/video_coding/main/test/normal_test.h"
21#include "webrtc/modules/video_coding/main/test/quality_modes_test.h"
22#include "webrtc/modules/video_coding/main/test/receiver_tests.h"
23#include "webrtc/modules/video_coding/main/test/test_util.h"
24#include "webrtc/test/testsupport/fileutils.h"
25
26DEFINE_string(codec, "VP8", "Codec to use (VP8 or I420).");
27DEFINE_int32(width, 352, "Width in pixels of the frames in the input file.");
28DEFINE_int32(height, 288, "Height in pixels of the frames in the input file.");
29DEFINE_int32(bitrate, 500, "Bit rate in kilobits/second.");
30DEFINE_int32(framerate, 30, "Frame rate of the input file, in FPS "
31             "(frames-per-second). ");
32DEFINE_int32(packet_loss_percent, 0, "Packet loss probability, in percent.");
33DEFINE_int32(rtt, 0, "RTT (round-trip time), in milliseconds.");
34DEFINE_int32(protection_mode, 0, "Protection mode.");
35DEFINE_int32(cama_enable, 0, "Cama enable.");
36DEFINE_string(input_filename, webrtc::test::ProjectRootPath() +
37              "/resources/foreman_cif.yuv", "Input file.");
38DEFINE_string(output_filename, webrtc::test::OutputPath() +
39              "video_coding_test_output_352x288.yuv", "Output file.");
40DEFINE_string(fv_output_filename, webrtc::test::OutputPath() +
41              "features.txt", "FV output file.");
42DEFINE_int32(test_number, 0, "Test number.");
43
44using namespace webrtc;
45
46/*
47 * Build with EVENT_DEBUG defined
48 * to build the tests with simulated events.
49 */
50
51int vcmMacrosTests = 0;
52int vcmMacrosErrors = 0;
53
54int ParseArguments(CmdArgs& args) {
55  args.width = FLAGS_width;
56  args.height = FLAGS_height;
57  args.bitRate = FLAGS_bitrate;
58  args.frameRate = FLAGS_framerate;
59  if (args.width  < 1 || args.height < 1 || args.bitRate < 1 ||
60      args.frameRate < 1) {
61    return -1;
62  }
63  args.codecName = FLAGS_codec;
64  if (args.codecName == "VP8") {
65    args.codecType = kVideoCodecVP8;
66  } else if (args.codecName == "I420") {
67    args.codecType = kVideoCodecI420;
68  } else {
69    printf("Invalid codec: %s\n", args.codecName.c_str());
70    return -1;
71  }
72  args.inputFile = FLAGS_input_filename;
73  args.outputFile = FLAGS_output_filename;
74  args.testNum = FLAGS_test_number;
75  args.packetLoss = FLAGS_packet_loss_percent;
76  args.rtt = FLAGS_rtt;
77  args.protectionMode = FLAGS_protection_mode;
78  args.camaEnable = FLAGS_cama_enable;
79  args.fv_outputfile = FLAGS_fv_output_filename;
80  return 0;
81}
82
83int main(int argc, char **argv) {
84  // Initialize WebRTC fileutils.h so paths to resources can be resolved.
85  webrtc::test::SetExecutablePath(argv[0]);
86  google::ParseCommandLineFlags(&argc, &argv, true);
87
88  CmdArgs args;
89  if (ParseArguments(args) != 0) {
90    printf("Unable to parse input arguments\n");
91    return -1;
92  }
93
94  printf("Running video coding tests...\n");
95  int ret = 0;
96  switch (args.testNum) {
97    case 0:
98      ret = NormalTest::RunTest(args);
99      ret |= CodecDataBaseTest::RunTest(args);
100      break;
101    case 1:
102      ret = NormalTest::RunTest(args);
103      break;
104    case 2:
105      ret = MTRxTxTest(args);
106      break;
107    case 3:
108      ret = GenericCodecTest::RunTest(args);
109      break;
110    case 4:
111      ret = CodecDataBaseTest::RunTest(args);
112      break;
113    case 5:
114      // 0- normal, 1-Release test(50 runs) 2- from file
115      ret = MediaOptTest::RunTest(0, args);
116      break;
117    case 7:
118      ret = RtpPlay(args);
119      break;
120    case 8:
121      ret = RtpPlayMT(args);
122      break;
123    case 9:
124      qualityModeTest(args);
125      break;
126    default:
127      ret = -1;
128      break;
129  }
130  return ret;
131}
132