diff --git a/api/BUILD.gn b/api/BUILD.gn index c5c5713585..a267894588 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -344,6 +344,8 @@ if (rtc_include_tests) { deps = [ ":neteq_simulator_api", "../modules/audio_coding:neteq_test_factory", + "../rtc_base:checks", + "../rtc_base:rtc_base_approved", "//third_party/abseil-cpp/absl/memory", ] } diff --git a/api/test/neteq_simulator_factory.cc b/api/test/neteq_simulator_factory.cc index 568e8a97e3..88ed158a45 100644 --- a/api/test/neteq_simulator_factory.cc +++ b/api/test/neteq_simulator_factory.cc @@ -12,6 +12,8 @@ #include "absl/memory/memory.h" #include "modules/audio_coding/neteq/tools/neteq_test_factory.h" +#include "rtc_base/checks.h" +#include "rtc_base/flags.h" namespace webrtc { namespace test { @@ -24,7 +26,11 @@ NetEqSimulatorFactory::~NetEqSimulatorFactory() = default; std::unique_ptr NetEqSimulatorFactory::CreateSimulator( int argc, char* argv[]) { - return factory_->InitializeTest(argc, argv); + RTC_CHECK(!rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, true)) + << "Error while parsing command-line flags"; + RTC_CHECK_EQ(argc, 3) << "Wrong number of input arguments. Expected 3, got " + << argc; + return factory_->InitializeTest(argv[1], argv[2]); } } // namespace test diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn index 09b9df577a..ff5ae13872 100644 --- a/modules/audio_coding/BUILD.gn +++ b/modules/audio_coding/BUILD.gn @@ -1515,7 +1515,6 @@ if (rtc_include_tests) { defines = [] deps = [ "../../rtc_base:checks", - "../../test:field_trial", "../../test:fileutils", ] sources = [ @@ -1545,6 +1544,9 @@ if (rtc_include_tests) { deps = [ ":neteq_test_factory", ":neteq_test_tools", + "../../rtc_base:rtc_base_approved", + "../../system_wrappers:field_trial_default", + "../../test:field_trial", ] sources = [ "neteq/tools/neteq_rtpplay.cc", diff --git a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc index 2968a22885..d2dcdae482 100644 --- a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc +++ b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc @@ -8,15 +8,61 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include +#include +#include #include "modules/audio_coding/neteq/tools/neteq_test.h" #include "modules/audio_coding/neteq/tools/neteq_test_factory.h" +#include "rtc_base/flags.h" +#include "system_wrappers/include/field_trial_default.h" +#include "test/field_trial.h" + +DEFINE_bool(codec_map, + false, + "Prints the mapping between RTP payload type and " + "codec"); +DEFINE_string( + force_fieldtrials, + "", + "Field trials control experimental feature code which can be forced. " + "E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/" + " will assign the group Enable to field trial WebRTC-FooFeature."); +DEFINE_bool(help, false, "Prints this message"); int main(int argc, char* argv[]) { webrtc::test::NetEqTestFactory factory; + std::string program_name = argv[0]; + std::string usage = + "Tool for decoding an RTP dump file using NetEq.\n" + "Run " + + program_name + + " --help for usage.\n" + "Example usage:\n" + + program_name + " input.rtp output.{pcm, wav}\n"; + if (rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, true)) { + exit(1); + } + if (FLAG_help) { + std::cout << usage; + rtc::FlagList::Print(nullptr, false); + exit(0); + } + if (FLAG_codec_map) { + factory.PrintCodecMap(); + } + if (argc != 3) { + if (FLAG_codec_map) { + // We have already printed the codec map. Just end the program. + exit(0); + } + // Print usage information. + std::cout << usage; + exit(0); + } + webrtc::test::ValidateFieldTrialsStringOrDie(FLAG_force_fieldtrials); + webrtc::field_trial::InitFieldTrialsFromString(FLAG_force_fieldtrials); std::unique_ptr test = - factory.InitializeTest(argc, argv); + factory.InitializeTest(argv[1], argv[2]); test->Run(); return 0; } diff --git a/modules/audio_coding/neteq/tools/neteq_test_factory.cc b/modules/audio_coding/neteq/tools/neteq_test_factory.cc index 9ab2310593..51077bc6b8 100644 --- a/modules/audio_coding/neteq/tools/neteq_test_factory.cc +++ b/modules/audio_coding/neteq/tools/neteq_test_factory.cc @@ -36,7 +36,6 @@ #include "modules/audio_coding/neteq/tools/rtp_file_source.h" #include "rtc_base/checks.h" #include "rtc_base/flags.h" -#include "test/field_trial.h" #include "test/testsupport/fileutils.h" namespace webrtc { @@ -112,10 +111,6 @@ DEFINE_int(cn_nb, 13, "RTP payload type for comfort noise (8 kHz)"); DEFINE_int(cn_wb, 98, "RTP payload type for comfort noise (16 kHz)"); DEFINE_int(cn_swb32, 99, "RTP payload type for comfort noise (32 kHz)"); DEFINE_int(cn_swb48, 100, "RTP payload type for comfort noise (48 kHz)"); -DEFINE_bool(codec_map, - false, - "Prints the mapping between RTP payload type and " - "codec"); DEFINE_string(replacement_audio_file, "", "A PCM file that will be used to populate " @@ -136,14 +131,7 @@ DEFINE_bool(matlabplot, DEFINE_bool(pythonplot, false, "Generates a python script for plotting the delay profile"); -DEFINE_bool(help, false, "Prints this message"); DEFINE_bool(concealment_events, false, "Prints concealment events"); -DEFINE_string( - force_fieldtrials, - "", - "Field trials control experimental feature code which can be forced. " - "E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/" - " will assign the group Enable to field trial WebRTC-FooFeature."); // Maps a codec type to a printable name string. std::string CodecName(NetEqDecoder codec) { @@ -279,42 +267,13 @@ NetEqTestFactory::NetEqTestFactory() = default; NetEqTestFactory::~NetEqTestFactory() = default; -std::unique_ptr NetEqTestFactory::InitializeTest(int argc, - char* argv[]) { - std::string program_name = argv[0]; - std::string usage = - "Tool for decoding an RTP dump file using NetEq.\n" - "Run " + - program_name + - " --help for usage.\n" - "Example usage:\n" + - program_name + " input.rtp output.{pcm, wav}\n"; - if (rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, true)) { - exit(1); - } - if (FLAG_help) { - std::cout << usage; - rtc::FlagList::Print(nullptr, false); - exit(0); - } - - if (FLAG_codec_map) { - PrintCodecMapping(); - } - - if (argc != 3) { - if (FLAG_codec_map) { - // We have already printed the codec map. Just end the program. - exit(0); - } - // Print usage information. - std::cout << usage; - exit(0); - } - - ValidateFieldTrialsStringOrDie(FLAG_force_fieldtrials); - ScopedFieldTrials field_trials(FLAG_force_fieldtrials); +void NetEqTestFactory::PrintCodecMap() { + PrintCodecMapping(); +} +std::unique_ptr NetEqTestFactory::InitializeTest( + std::string input_file_name, + std::string output_file_name) { RTC_CHECK(ValidatePayloadType(FLAG_pcmu)); RTC_CHECK(ValidatePayloadType(FLAG_pcma)); RTC_CHECK(ValidatePayloadType(FLAG_ilbc)); @@ -350,7 +309,6 @@ std::unique_ptr NetEqTestFactory::InitializeTest(int argc, {FLAG_video_content_type, kRtpExtensionVideoContentType}, {FLAG_video_timing, kRtpExtensionVideoTiming}}; - const std::string input_file_name = argv[1]; std::unique_ptr input; if (RtpFileSource::ValidRtpDump(input_file_name) || RtpFileSource::ValidPcap(input_file_name)) { @@ -406,7 +364,6 @@ std::unique_ptr NetEqTestFactory::InitializeTest(int argc, // Open the output file now that we know the sample rate. (Rate is only needed // for wav files.) - const std::string output_file_name = argv[2]; std::unique_ptr output; if (output_file_name.size() >= 4 && output_file_name.substr(output_file_name.size() - 4) == ".wav") { diff --git a/modules/audio_coding/neteq/tools/neteq_test_factory.h b/modules/audio_coding/neteq/tools/neteq_test_factory.h index 210c3e36a7..a249186bd9 100644 --- a/modules/audio_coding/neteq/tools/neteq_test_factory.h +++ b/modules/audio_coding/neteq/tools/neteq_test_factory.h @@ -12,6 +12,7 @@ #define MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_ #include +#include #include "modules/audio_coding/neteq/tools/neteq_test.h" @@ -28,7 +29,9 @@ class NetEqTestFactory { public: NetEqTestFactory(); ~NetEqTestFactory(); - std::unique_ptr InitializeTest(int argc, char* argv[]); + void PrintCodecMap(); + std::unique_ptr InitializeTest(std::string input_filename, + std::string output_filename); private: std::unique_ptr replacement_decoder_;