|  | /* | 
|  | *  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 == "VP9") { | 
|  | args.codecType = kVideoCodecVP9; | 
|  | } 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; | 
|  | } |