Move code for setting field trials from NetEqTestFactory to the main function in neteq_rtpplay.
It is problematic to set field trials more than once, so to avoid running into problems, this functionality has been placed in the main function of neteq_rtpplay. Bug: webrtc:9667 Change-Id: Ib9b9990f30a1715b50889dbfc4d74787bcbe5dae Reviewed-on: https://webrtc-review.googlesource.com/98541 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Minyue Li <minyue@webrtc.org> Commit-Queue: Ivo Creusen <ivoc@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24673}
This commit is contained in:
@ -344,6 +344,8 @@ if (rtc_include_tests) {
|
|||||||
deps = [
|
deps = [
|
||||||
":neteq_simulator_api",
|
":neteq_simulator_api",
|
||||||
"../modules/audio_coding:neteq_test_factory",
|
"../modules/audio_coding:neteq_test_factory",
|
||||||
|
"../rtc_base:checks",
|
||||||
|
"../rtc_base:rtc_base_approved",
|
||||||
"//third_party/abseil-cpp/absl/memory",
|
"//third_party/abseil-cpp/absl/memory",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
#include "absl/memory/memory.h"
|
#include "absl/memory/memory.h"
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_test_factory.h"
|
#include "modules/audio_coding/neteq/tools/neteq_test_factory.h"
|
||||||
|
#include "rtc_base/checks.h"
|
||||||
|
#include "rtc_base/flags.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace test {
|
namespace test {
|
||||||
@ -24,7 +26,11 @@ NetEqSimulatorFactory::~NetEqSimulatorFactory() = default;
|
|||||||
std::unique_ptr<NetEqSimulator> NetEqSimulatorFactory::CreateSimulator(
|
std::unique_ptr<NetEqSimulator> NetEqSimulatorFactory::CreateSimulator(
|
||||||
int argc,
|
int argc,
|
||||||
char* argv[]) {
|
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
|
} // namespace test
|
||||||
|
@ -1515,7 +1515,6 @@ if (rtc_include_tests) {
|
|||||||
defines = []
|
defines = []
|
||||||
deps = [
|
deps = [
|
||||||
"../../rtc_base:checks",
|
"../../rtc_base:checks",
|
||||||
"../../test:field_trial",
|
|
||||||
"../../test:fileutils",
|
"../../test:fileutils",
|
||||||
]
|
]
|
||||||
sources = [
|
sources = [
|
||||||
@ -1545,6 +1544,9 @@ if (rtc_include_tests) {
|
|||||||
deps = [
|
deps = [
|
||||||
":neteq_test_factory",
|
":neteq_test_factory",
|
||||||
":neteq_test_tools",
|
":neteq_test_tools",
|
||||||
|
"../../rtc_base:rtc_base_approved",
|
||||||
|
"../../system_wrappers:field_trial_default",
|
||||||
|
"../../test:field_trial",
|
||||||
]
|
]
|
||||||
sources = [
|
sources = [
|
||||||
"neteq/tools/neteq_rtpplay.cc",
|
"neteq/tools/neteq_rtpplay.cc",
|
||||||
|
@ -8,15 +8,61 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_test.h"
|
#include "modules/audio_coding/neteq/tools/neteq_test.h"
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_test_factory.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[]) {
|
int main(int argc, char* argv[]) {
|
||||||
webrtc::test::NetEqTestFactory factory;
|
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<webrtc::test::NetEqTest> test =
|
std::unique_ptr<webrtc::test::NetEqTest> test =
|
||||||
factory.InitializeTest(argc, argv);
|
factory.InitializeTest(argv[1], argv[2]);
|
||||||
test->Run();
|
test->Run();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
#include "modules/audio_coding/neteq/tools/rtp_file_source.h"
|
#include "modules/audio_coding/neteq/tools/rtp_file_source.h"
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/flags.h"
|
#include "rtc_base/flags.h"
|
||||||
#include "test/field_trial.h"
|
|
||||||
#include "test/testsupport/fileutils.h"
|
#include "test/testsupport/fileutils.h"
|
||||||
|
|
||||||
namespace webrtc {
|
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_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_swb32, 99, "RTP payload type for comfort noise (32 kHz)");
|
||||||
DEFINE_int(cn_swb48, 100, "RTP payload type for comfort noise (48 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,
|
DEFINE_string(replacement_audio_file,
|
||||||
"",
|
"",
|
||||||
"A PCM file that will be used to populate "
|
"A PCM file that will be used to populate "
|
||||||
@ -136,14 +131,7 @@ DEFINE_bool(matlabplot,
|
|||||||
DEFINE_bool(pythonplot,
|
DEFINE_bool(pythonplot,
|
||||||
false,
|
false,
|
||||||
"Generates a python script for plotting the delay profile");
|
"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_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.
|
// Maps a codec type to a printable name string.
|
||||||
std::string CodecName(NetEqDecoder codec) {
|
std::string CodecName(NetEqDecoder codec) {
|
||||||
@ -279,42 +267,13 @@ NetEqTestFactory::NetEqTestFactory() = default;
|
|||||||
|
|
||||||
NetEqTestFactory::~NetEqTestFactory() = default;
|
NetEqTestFactory::~NetEqTestFactory() = default;
|
||||||
|
|
||||||
std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(int argc,
|
void NetEqTestFactory::PrintCodecMap() {
|
||||||
char* argv[]) {
|
PrintCodecMapping();
|
||||||
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);
|
|
||||||
|
|
||||||
|
std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(
|
||||||
|
std::string input_file_name,
|
||||||
|
std::string output_file_name) {
|
||||||
RTC_CHECK(ValidatePayloadType(FLAG_pcmu));
|
RTC_CHECK(ValidatePayloadType(FLAG_pcmu));
|
||||||
RTC_CHECK(ValidatePayloadType(FLAG_pcma));
|
RTC_CHECK(ValidatePayloadType(FLAG_pcma));
|
||||||
RTC_CHECK(ValidatePayloadType(FLAG_ilbc));
|
RTC_CHECK(ValidatePayloadType(FLAG_ilbc));
|
||||||
@ -350,7 +309,6 @@ std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(int argc,
|
|||||||
{FLAG_video_content_type, kRtpExtensionVideoContentType},
|
{FLAG_video_content_type, kRtpExtensionVideoContentType},
|
||||||
{FLAG_video_timing, kRtpExtensionVideoTiming}};
|
{FLAG_video_timing, kRtpExtensionVideoTiming}};
|
||||||
|
|
||||||
const std::string input_file_name = argv[1];
|
|
||||||
std::unique_ptr<NetEqInput> input;
|
std::unique_ptr<NetEqInput> input;
|
||||||
if (RtpFileSource::ValidRtpDump(input_file_name) ||
|
if (RtpFileSource::ValidRtpDump(input_file_name) ||
|
||||||
RtpFileSource::ValidPcap(input_file_name)) {
|
RtpFileSource::ValidPcap(input_file_name)) {
|
||||||
@ -406,7 +364,6 @@ std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(int argc,
|
|||||||
|
|
||||||
// Open the output file now that we know the sample rate. (Rate is only needed
|
// Open the output file now that we know the sample rate. (Rate is only needed
|
||||||
// for wav files.)
|
// for wav files.)
|
||||||
const std::string output_file_name = argv[2];
|
|
||||||
std::unique_ptr<AudioSink> output;
|
std::unique_ptr<AudioSink> output;
|
||||||
if (output_file_name.size() >= 4 &&
|
if (output_file_name.size() >= 4 &&
|
||||||
output_file_name.substr(output_file_name.size() - 4) == ".wav") {
|
output_file_name.substr(output_file_name.size() - 4) == ".wav") {
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#define MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_
|
#define MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_test.h"
|
#include "modules/audio_coding/neteq/tools/neteq_test.h"
|
||||||
|
|
||||||
@ -28,7 +29,9 @@ class NetEqTestFactory {
|
|||||||
public:
|
public:
|
||||||
NetEqTestFactory();
|
NetEqTestFactory();
|
||||||
~NetEqTestFactory();
|
~NetEqTestFactory();
|
||||||
std::unique_ptr<NetEqTest> InitializeTest(int argc, char* argv[]);
|
void PrintCodecMap();
|
||||||
|
std::unique_ptr<NetEqTest> InitializeTest(std::string input_filename,
|
||||||
|
std::string output_filename);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<AudioDecoder> replacement_decoder_;
|
std::unique_ptr<AudioDecoder> replacement_decoder_;
|
||||||
|
Reference in New Issue
Block a user