Home | History | Annotate | Download | only in test
      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 
     26 DEFINE_string(codec, "VP8", "Codec to use (VP8 or I420).");
     27 DEFINE_int32(width, 352, "Width in pixels of the frames in the input file.");
     28 DEFINE_int32(height, 288, "Height in pixels of the frames in the input file.");
     29 DEFINE_int32(bitrate, 500, "Bit rate in kilobits/second.");
     30 DEFINE_int32(framerate, 30, "Frame rate of the input file, in FPS "
     31              "(frames-per-second). ");
     32 DEFINE_int32(packet_loss_percent, 0, "Packet loss probability, in percent.");
     33 DEFINE_int32(rtt, 0, "RTT (round-trip time), in milliseconds.");
     34 DEFINE_int32(protection_mode, 0, "Protection mode.");
     35 DEFINE_int32(cama_enable, 0, "Cama enable.");
     36 DEFINE_string(input_filename, webrtc::test::ProjectRootPath() +
     37               "/resources/foreman_cif.yuv", "Input file.");
     38 DEFINE_string(output_filename, webrtc::test::OutputPath() +
     39               "video_coding_test_output_352x288.yuv", "Output file.");
     40 DEFINE_string(fv_output_filename, webrtc::test::OutputPath() +
     41               "features.txt", "FV output file.");
     42 DEFINE_int32(test_number, 0, "Test number.");
     43 
     44 using namespace webrtc;
     45 
     46 /*
     47  * Build with EVENT_DEBUG defined
     48  * to build the tests with simulated events.
     49  */
     50 
     51 int vcmMacrosTests = 0;
     52 int vcmMacrosErrors = 0;
     53 
     54 int 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 
     83 int 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