Reland "Add AudioDecoderFactory to NetEqTest constructor."

This is a reland of daa970f33e1923c5651a4a63c18e3d5361d0a795

Original change's description:
> Add AudioDecoderFactory to NetEqTest constructor.
>
> Update EventLogAnalyzer to not depend on builtin audio decoders.
>
> Bug: webrtc:8396, webrtc:10080
> Change-Id: Ie02ed9cda6d4f11bfdf2e65eb6482283b7520738
> Reviewed-on: https://webrtc-review.googlesource.com/c/114301
> Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
> Reviewed-by: Björn Terelius <terelius@webrtc.org>
> Commit-Queue: Niels Moller <nisse@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#26026}

Tbr: kwiberg@webrtc.org
Bug: webrtc:8396, webrtc:10080
Change-Id: I598ce1cd41676b1992b0973b09476eeeb0e602d2
Reviewed-on: https://webrtc-review.googlesource.com/c/114940
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26058}
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index aef8238..10f78be 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -238,7 +238,7 @@
 
     rtc_static_library("event_log_visualizer_utils") {
       visibility = [ "*" ]
-      allow_poison = [ "audio_codecs" ]  # TODO(bugs.webrtc.org/8396): Remove.
+      testonly = true
       sources = [
         "event_log_visualizer/analyzer.cc",
         "event_log_visualizer/analyzer.h",
@@ -258,6 +258,10 @@
       deps = [
         ":chart_proto",
         "../:webrtc_common",
+
+        # TODO(kwiberg): Remove this dependency.
+        "../api/audio_codecs:audio_codecs_api",
+        "../api/transport:goog_cc",
         "../call:call_interfaces",
         "../call:video_stream_api",
         "../logging:rtc_event_log_api",
@@ -267,15 +271,6 @@
         "../modules/audio_coding:ana_debug_dump_proto",
         "../modules/audio_coding:audio_network_adaptor",
         "../modules/audio_coding:neteq_tools",
-        "../modules/rtp_rtcp:rtp_rtcp_format",
-        "../rtc_base:checks",
-        "../rtc_base:rtc_base_approved",
-        "../rtc_base:rtc_numerics",
-        "../rtc_base:stringutils",
-
-        # TODO(kwiberg): Remove this dependency.
-        "../api/audio_codecs:audio_codecs_api",
-        "../api/transport:goog_cc",
         "../modules/congestion_controller",
         "../modules/congestion_controller/goog_cc:delay_based_bwe",
         "../modules/congestion_controller/goog_cc:estimators",
@@ -283,6 +278,12 @@
         "../modules/pacing",
         "../modules/remote_bitrate_estimator",
         "../modules/rtp_rtcp",
+        "../modules/rtp_rtcp:rtp_rtcp_format",
+        "../rtc_base:checks",
+        "../rtc_base:rtc_base_approved",
+        "../rtc_base:rtc_numerics",
+        "../rtc_base:stringutils",
+        "../test:audio_codec_mocks",
         "//third_party/abseil-cpp/absl/memory",
       ]
     }
diff --git a/rtc_tools/event_log_visualizer/analyzer.cc b/rtc_tools/event_log_visualizer/analyzer.cc
index 7cf0039..cae810c 100644
--- a/rtc_tools/event_log_visualizer/analyzer.cc
+++ b/rtc_tools/event_log_visualizer/analyzer.cc
@@ -57,6 +57,7 @@
 #include "rtc_base/numerics/sequence_number_util.h"
 #include "rtc_base/rate_statistics.h"
 #include "rtc_base/strings/string_builder.h"
+#include "test/function_audio_decoder_factory.h"
 
 #ifndef BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
 #define BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 0
@@ -1710,20 +1711,23 @@
 
   std::unique_ptr<test::VoidAudioSink> output(new test::VoidAudioSink());
 
+  // Factory to create a "replacement decoder" that produces the decoded audio
+  // by reading from a file rather than from the encoded payloads.
+  rtc::scoped_refptr<AudioDecoderFactory> decoder_factory =
+      new rtc::RefCountedObject<test::FunctionAudioDecoderFactory>(
+          [replacement_file_name, file_sample_rate_hz]() {
+            std::unique_ptr<test::ResampleInputAudioFile> replacement_file(
+                new test::ResampleInputAudioFile(replacement_file_name,
+                                                 file_sample_rate_hz));
+            replacement_file->set_output_rate_hz(48000);
+            return absl::make_unique<test::FakeDecodeFromFile>(
+                std::move(replacement_file), 48000, false);
+          });
+
   test::NetEqTest::DecoderMap codecs;
 
-  // Create a "replacement decoder" that produces the decoded audio by reading
-  // from a file rather than from the encoded payloads.
-  std::unique_ptr<test::ResampleInputAudioFile> replacement_file(
-      new test::ResampleInputAudioFile(replacement_file_name,
-                                       file_sample_rate_hz));
-  replacement_file->set_output_rate_hz(48000);
-  std::unique_ptr<AudioDecoder> replacement_decoder(
-      new test::FakeDecodeFromFile(std::move(replacement_file), 48000, false));
-  test::NetEqTest::ExtDecoderMap ext_codecs;
-  ext_codecs[kReplacementPt] = {replacement_decoder.get(),
-                                NetEqDecoder::kDecoderArbitrary,
-                                "replacement codec"};
+  codecs[kReplacementPt] = {NetEqDecoder::kDecoderPCM16Bswb48kHz,
+                            "replacement codec"};
 
   std::unique_ptr<test::NetEqDelayAnalyzer> delay_cb(
       new test::NetEqDelayAnalyzer);
@@ -1735,8 +1739,9 @@
   callbacks.post_insert_packet = neteq_stats_getter->delay_analyzer();
   callbacks.get_audio_callback = neteq_stats_getter.get();
 
-  test::NetEqTest test(config, codecs, ext_codecs, nullptr, std::move(input),
-                       std::move(output), callbacks);
+  test::NetEqTest::ExtDecoderMap ext_codecs;
+  test::NetEqTest test(config, decoder_factory, codecs, ext_codecs, nullptr,
+                       std::move(input), std::move(output), callbacks);
   test.Run();
   return neteq_stats_getter;
 }