Reland of "Choose between APM-AGC-Limiter and Apm-AGC2-fixed-gain_controller."

The webrtc::AudioMixer uses a limiter component. This CL allows
changes the APM-AGC limiter to the APM-AGC2 limiter though a Chrome
field trial.

The AGC2 limiter has a float interface. We plan to eventually switch
to the AGC2 limiter. Therefore, we will now mix in de-interleaved
floats. Float mixing will happen both when using the old limiter and
when using the new one.

After this CL the mixer will support two limiters. The limiters have
different interfaces and need different processing steps. Because of
that, we make (rather big) changes to the control flow in
FrameCombiner. For a short while, we will mix in deinterleaved floats
when using any limiter.

Originally landed in https://webrtc-review.googlesource.com/c/src/+/56141/

Reverted in https://webrtc-review.googlesource.com/c/src/+/57940
because of both breaking compilation and having a severe error. The
error is fixed and a test is added. The compilation issue is fixed.

Bug: webrtc:8925
Change-Id: Ieba138dee9652c826459fe637ae2dccbbc06bcf0
Reviewed-on: https://webrtc-review.googlesource.com/58085
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22207}
diff --git a/modules/audio_mixer/frame_combiner.h b/modules/audio_mixer/frame_combiner.h
index 88ab0d7..3a60322 100644
--- a/modules/audio_mixer/frame_combiner.h
+++ b/modules/audio_mixer/frame_combiner.h
@@ -14,14 +14,19 @@
 #include <memory>
 #include <vector>
 
+#include "modules/audio_processing/agc2/fixed_gain_controller.h"
 #include "modules/audio_processing/include/audio_processing.h"
 #include "modules/include/module_common_types.h"
 
 namespace webrtc {
+class ApmDataDumper;
+class FixedGainController;
 
 class FrameCombiner {
  public:
-  explicit FrameCombiner(bool use_apm_limiter);
+  enum class LimiterType { kNoLimiter, kApmAgcLimiter, kApmAgc2Limiter };
+  explicit FrameCombiner(LimiterType limiter_type);
+  explicit FrameCombiner(bool use_limiter);
   ~FrameCombiner();
 
   // Combine several frames into one. Assumes sample_rate,
@@ -34,11 +39,13 @@
                size_t number_of_channels,
                int sample_rate,
                size_t number_of_streams,
-               AudioFrame* audio_frame_for_mixing) const;
+               AudioFrame* audio_frame_for_mixing);
 
  private:
-  const bool use_apm_limiter_;
-  std::unique_ptr<AudioProcessing> limiter_;
+  const LimiterType limiter_type_;
+  std::unique_ptr<AudioProcessing> apm_agc_limiter_;
+  std::unique_ptr<ApmDataDumper> data_dumper_;
+  FixedGainController apm_agc2_limiter_;
 };
 }  // namespace webrtc