AEC3: use different seed for different channels in CNG

Bug: webrtc:10913
Change-Id: Idca6be02b54b67753cfaf6ff588f5271e0cce892
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/155160
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29344}
diff --git a/modules/audio_processing/aec3/comfort_noise_generator.cc b/modules/audio_processing/aec3/comfort_noise_generator.cc
index bedd227..fd12a71 100644
--- a/modules/audio_processing/aec3/comfort_noise_generator.cc
+++ b/modules/audio_processing/aec3/comfort_noise_generator.cc
@@ -92,9 +92,10 @@
 
 }  // namespace
 
-ComfortNoiseGenerator::ComfortNoiseGenerator(Aec3Optimization optimization)
+ComfortNoiseGenerator::ComfortNoiseGenerator(Aec3Optimization optimization,
+                                             uint32_t seed)
     : optimization_(optimization),
-      seed_(42),
+      seed_(seed),
       N2_initial_(new std::array<float, kFftLengthBy2Plus1>()) {
   N2_initial_->fill(0.f);
   Y2_smoothed_.fill(0.f);
diff --git a/modules/audio_processing/aec3/comfort_noise_generator.h b/modules/audio_processing/aec3/comfort_noise_generator.h
index 79bf623..77967d8 100644
--- a/modules/audio_processing/aec3/comfort_noise_generator.h
+++ b/modules/audio_processing/aec3/comfort_noise_generator.h
@@ -41,7 +41,7 @@
 // Generates the comfort noise.
 class ComfortNoiseGenerator {
  public:
-  explicit ComfortNoiseGenerator(Aec3Optimization optimization);
+  ComfortNoiseGenerator(Aec3Optimization optimization, uint32_t seed);
   ~ComfortNoiseGenerator();
 
   // Computes the comfort noise.
diff --git a/modules/audio_processing/aec3/comfort_noise_generator_unittest.cc b/modules/audio_processing/aec3/comfort_noise_generator_unittest.cc
index 10ba696..bac30b4 100644
--- a/modules/audio_processing/aec3/comfort_noise_generator_unittest.cc
+++ b/modules/audio_processing/aec3/comfort_noise_generator_unittest.cc
@@ -36,7 +36,7 @@
   std::array<float, kFftLengthBy2Plus1> N2;
   FftData noise;
   EXPECT_DEATH(
-      ComfortNoiseGenerator(DetectOptimization())
+      ComfortNoiseGenerator(DetectOptimization(), 42)
           .Compute(AecState(EchoCanceller3Config{}), N2, nullptr, &noise),
       "");
 }
@@ -45,7 +45,7 @@
   std::array<float, kFftLengthBy2Plus1> N2;
   FftData noise;
   EXPECT_DEATH(
-      ComfortNoiseGenerator(DetectOptimization())
+      ComfortNoiseGenerator(DetectOptimization(), 42)
           .Compute(AecState(EchoCanceller3Config{}), N2, &noise, nullptr),
       "");
 }
@@ -53,7 +53,7 @@
 #endif
 
 TEST(ComfortNoiseGenerator, CorrectLevel) {
-  ComfortNoiseGenerator cng(DetectOptimization());
+  ComfortNoiseGenerator cng(DetectOptimization(), 42);
   AecState aec_state(EchoCanceller3Config{});
 
   std::array<float, kFftLengthBy2Plus1> N2;
diff --git a/modules/audio_processing/aec3/echo_remover.cc b/modules/audio_processing/aec3/echo_remover.cc
index ebd7981..c9a58ec 100644
--- a/modules/audio_processing/aec3/echo_remover.cc
+++ b/modules/audio_processing/aec3/echo_remover.cc
@@ -220,12 +220,14 @@
     e_k.fill(0.f);
   }
 
+  uint32_t cng_seed = 42;
   for (size_t ch = 0; ch < num_capture_channels_; ++ch) {
     residual_echo_estimators_[ch] =
         std::make_unique<ResidualEchoEstimator>(config_);
     suppression_gains_[ch] = std::make_unique<SuppressionGain>(
         config_, optimization_, sample_rate_hz);
-    cngs_[ch] = std::make_unique<ComfortNoiseGenerator>(optimization_);
+    cngs_[ch] =
+        std::make_unique<ComfortNoiseGenerator>(optimization_, cng_seed++);
     e_old_[ch].fill(0.f);
     y_old_[ch].fill(0.f);
   }