summaryrefslogtreecommitdiff
path: root/modules/video_coding/main/test/tester_main.cc
blob: bf17ab2741d58c4a9a99ba33c69db800d8a94d03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */


#include <stdlib.h>
#include <string.h>

#include "gflags/gflags.h"
#include "webrtc/modules/video_coding/main/interface/video_coding.h"
#include "webrtc/modules/video_coding/main/test/codec_database_test.h"
#include "webrtc/modules/video_coding/main/test/generic_codec_test.h"
#include "webrtc/modules/video_coding/main/test/media_opt_test.h"
#include "webrtc/modules/video_coding/main/test/normal_test.h"
#include "webrtc/modules/video_coding/main/test/quality_modes_test.h"
#include "webrtc/modules/video_coding/main/test/receiver_tests.h"
#include "webrtc/modules/video_coding/main/test/test_util.h"
#include "webrtc/test/testsupport/fileutils.h"

DEFINE_string(codec, "VP8", "Codec to use (VP8 or I420).");
DEFINE_int32(width, 352, "Width in pixels of the frames in the input file.");
DEFINE_int32(height, 288, "Height in pixels of the frames in the input file.");
DEFINE_int32(bitrate, 500, "Bit rate in kilobits/second.");
DEFINE_int32(framerate, 30, "Frame rate of the input file, in FPS "
             "(frames-per-second). ");
DEFINE_int32(packet_loss_percent, 0, "Packet loss probability, in percent.");
DEFINE_int32(rtt, 0, "RTT (round-trip time), in milliseconds.");
DEFINE_int32(protection_mode, 0, "Protection mode.");
DEFINE_int32(cama_enable, 0, "Cama enable.");
DEFINE_string(input_filename, webrtc::test::ProjectRootPath() +
              "/resources/foreman_cif.yuv", "Input file.");
DEFINE_string(output_filename, webrtc::test::OutputPath() +
              "video_coding_test_output_352x288.yuv", "Output file.");
DEFINE_string(fv_output_filename, webrtc::test::OutputPath() +
              "features.txt", "FV output file.");
DEFINE_int32(test_number, 0, "Test number.");

using namespace webrtc;

/*
 * Build with EVENT_DEBUG defined
 * to build the tests with simulated events.
 */

int vcmMacrosTests = 0;
int vcmMacrosErrors = 0;

int ParseArguments(CmdArgs& args) {
  args.width = FLAGS_width;
  args.height = FLAGS_height;
  args.bitRate = FLAGS_bitrate;
  args.frameRate = FLAGS_framerate;
  if (args.width  < 1 || args.height < 1 || args.bitRate < 1 ||
      args.frameRate < 1) {
    return -1;
  }
  args.codecName = FLAGS_codec;
  if (args.codecName == "VP8") {
    args.codecType = kVideoCodecVP8;
  } else if (args.codecName == "I420") {
    args.codecType = kVideoCodecI420;
  } else {
    printf("Invalid codec: %s\n", args.codecName.c_str());
    return -1;
  }
  args.inputFile = FLAGS_input_filename;
  args.outputFile = FLAGS_output_filename;
  args.testNum = FLAGS_test_number;
  args.packetLoss = FLAGS_packet_loss_percent;
  args.rtt = FLAGS_rtt;
  args.protectionMode = FLAGS_protection_mode;
  args.camaEnable = FLAGS_cama_enable;
  args.fv_outputfile = FLAGS_fv_output_filename;
  return 0;
}

int main(int argc, char **argv) {
  // Initialize WebRTC fileutils.h so paths to resources can be resolved.
  webrtc::test::SetExecutablePath(argv[0]);
  google::ParseCommandLineFlags(&argc, &argv, true);

  CmdArgs args;
  if (ParseArguments(args) != 0) {
    printf("Unable to parse input arguments\n");
    return -1;
  }

  printf("Running video coding tests...\n");
  int ret = 0;
  switch (args.testNum) {
    case 0:
      ret = NormalTest::RunTest(args);
      ret |= CodecDataBaseTest::RunTest(args);
      break;
    case 1:
      ret = NormalTest::RunTest(args);
      break;
    case 2:
      ret = MTRxTxTest(args);
      break;
    case 3:
      ret = GenericCodecTest::RunTest(args);
      break;
    case 4:
      ret = CodecDataBaseTest::RunTest(args);
      break;
    case 5:
      // 0- normal, 1-Release test(50 runs) 2- from file
      ret = MediaOptTest::RunTest(0, args);
      break;
    case 7:
      ret = RtpPlay(args);
      break;
    case 8:
      ret = RtpPlayMT(args);
      break;
    case 9:
      qualityModeTest(args);
      break;
    default:
      ret = -1;
      break;
  }
  return ret;
}