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}
diff --git a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc
index 2968a22..d2dcdae 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 <stdio.h>
+#include <iostream>
+#include <string>
 
 #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<webrtc::test::NetEqTest> 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 9ab2310..51077bc 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_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(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;
 
-std::unique_ptr<NetEqTest> 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);
-  }
+void NetEqTestFactory::PrintCodecMap() {
+  PrintCodecMapping();
+}
 
-  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_pcma));
   RTC_CHECK(ValidatePayloadType(FLAG_ilbc));
@@ -350,7 +309,6 @@
       {FLAG_video_content_type, kRtpExtensionVideoContentType},
       {FLAG_video_timing, kRtpExtensionVideoTiming}};
 
-  const std::string input_file_name = argv[1];
   std::unique_ptr<NetEqInput> input;
   if (RtpFileSource::ValidRtpDump(input_file_name) ||
       RtpFileSource::ValidPcap(input_file_name)) {
@@ -406,7 +364,6 @@
 
   // 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<AudioSink> 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 210c3e3..a249186 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 <memory>
+#include <string>
 
 #include "modules/audio_coding/neteq/tools/neteq_test.h"
 
@@ -28,7 +29,9 @@
  public:
   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:
   std::unique_ptr<AudioDecoder> replacement_decoder_;