Remove the ability for EchoRemover to override the render vs capture alignment

This change removes the (unused) ability of EchoRemover overriding
the delay of the RenderDelayController. The change is tested for
bit-exactness.

Bug: webrtc:8671
Change-Id: I188ef740f1437de64ffe236d07a7dcd4128192c2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/130518
Commit-Queue: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Per Ã…hgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27414}
diff --git a/modules/audio_processing/aec3/block_processor.cc b/modules/audio_processing/aec3/block_processor.cc
index b08be68..2674827 100644
--- a/modules/audio_processing/aec3/block_processor.cc
+++ b/modules/audio_processing/aec3/block_processor.cc
@@ -71,7 +71,6 @@
   RenderDelayBuffer::BufferingEvent render_event_;
   size_t capture_call_counter_ = 0;
   absl::optional<DelayEstimate> estimated_delay_;
-  absl::optional<int> echo_remover_delay_;
 };
 
 int BlockProcessorImpl::instance_count_ = 0;
@@ -150,11 +149,11 @@
                         &(*capture_block)[0][0],
                         LowestBandRate(sample_rate_hz_), 1);
 
-  // Compute and and apply the render delay required to achieve proper signal
+  // Compute and apply the render delay required to achieve proper signal
   // alignment.
-  estimated_delay_ = delay_controller_->GetDelay(
-      render_buffer_->GetDownsampledRenderBuffer(), render_buffer_->Delay(),
-      echo_remover_delay_, (*capture_block)[0]);
+  estimated_delay_ =
+      delay_controller_->GetDelay(render_buffer_->GetDownsampledRenderBuffer(),
+                                  render_buffer_->Delay(), (*capture_block)[0]);
 
   if (estimated_delay_) {
     bool delay_change = render_buffer_->SetDelay(estimated_delay_->delay);
@@ -173,10 +172,6 @@
       echo_path_variability, capture_signal_saturation, estimated_delay_,
       render_buffer_->GetRenderBuffer(), capture_block);
 
-  // Check to see if a refined delay estimate has been obtained from the echo
-  // remover.
-  echo_remover_delay_ = echo_remover_->Delay();
-
   // Update the metrics.
   metrics_.UpdateCapture(false);
 }
diff --git a/modules/audio_processing/aec3/block_processor_unittest.cc b/modules/audio_processing/aec3/block_processor_unittest.cc
index 7145786..439419f 100644
--- a/modules/audio_processing/aec3/block_processor_unittest.cc
+++ b/modules/audio_processing/aec3/block_processor_unittest.cc
@@ -166,7 +166,7 @@
     EXPECT_CALL(*render_delay_buffer_mock, Delay())
         .Times(kNumBlocks)
         .WillRepeatedly(Return(0));
-    EXPECT_CALL(*render_delay_controller_mock, GetDelay(_, _, _, _))
+    EXPECT_CALL(*render_delay_controller_mock, GetDelay(_, _, _))
         .Times(kNumBlocks);
     EXPECT_CALL(*echo_remover_mock, ProcessCapture(_, _, _, _, _))
         .Times(kNumBlocks);
diff --git a/modules/audio_processing/aec3/echo_remover.cc b/modules/audio_processing/aec3/echo_remover.cc
index 534bab5..1ae9a8b 100644
--- a/modules/audio_processing/aec3/echo_remover.cc
+++ b/modules/audio_processing/aec3/echo_remover.cc
@@ -97,12 +97,6 @@
                       RenderBuffer* render_buffer,
                       std::vector<std::vector<float>>* capture) override;
 
-  // Returns the internal delay estimate in blocks.
-  absl::optional<int> Delay() const override {
-    // TODO(peah): Remove or reactivate this functionality.
-    return absl::nullopt;
-  }
-
   // Updates the status on whether echo leakage is detected in the output of the
   // echo remover.
   void UpdateEchoLeakageStatus(bool leakage_detected) override {
diff --git a/modules/audio_processing/aec3/echo_remover.h b/modules/audio_processing/aec3/echo_remover.h
index cc8dae9..357f67d 100644
--- a/modules/audio_processing/aec3/echo_remover.h
+++ b/modules/audio_processing/aec3/echo_remover.h
@@ -42,9 +42,6 @@
       RenderBuffer* render_buffer,
       std::vector<std::vector<float>>* capture) = 0;
 
-  // Returns the internal delay estimate in blocks.
-  virtual absl::optional<int> Delay() const = 0;
-
   // Updates the status on whether echo leakage is detected in the output of the
   // echo remover.
   virtual void UpdateEchoLeakageStatus(bool leakage_detected) = 0;
diff --git a/modules/audio_processing/aec3/mock/mock_render_delay_controller.h b/modules/audio_processing/aec3/mock/mock_render_delay_controller.h
index 5f652e1..097c8cc 100644
--- a/modules/audio_processing/aec3/mock/mock_render_delay_controller.h
+++ b/modules/audio_processing/aec3/mock/mock_render_delay_controller.h
@@ -27,11 +27,10 @@
 
   MOCK_METHOD1(Reset, void(bool reset_delay_statistics));
   MOCK_METHOD0(LogRenderCall, void());
-  MOCK_METHOD4(GetDelay,
+  MOCK_METHOD3(GetDelay,
                absl::optional<DelayEstimate>(
                    const DownsampledRenderBuffer& render_buffer,
                    size_t render_delay_buffer_delay,
-                   const absl::optional<int>& echo_remover_delay,
                    rtc::ArrayView<const float> capture));
   MOCK_CONST_METHOD0(HasClockdrift, bool());
 };
diff --git a/modules/audio_processing/aec3/render_delay_controller.cc b/modules/audio_processing/aec3/render_delay_controller.cc
index 4f9fa8e..e8423cb 100644
--- a/modules/audio_processing/aec3/render_delay_controller.cc
+++ b/modules/audio_processing/aec3/render_delay_controller.cc
@@ -39,7 +39,6 @@
   absl::optional<DelayEstimate> GetDelay(
       const DownsampledRenderBuffer& render_buffer,
       size_t render_delay_buffer_delay,
-      const absl::optional<int>& echo_remover_delay,
       rtc::ArrayView<const float> capture) override;
   bool HasClockdrift() const override;
 
@@ -117,21 +116,12 @@
 absl::optional<DelayEstimate> RenderDelayControllerImpl::GetDelay(
     const DownsampledRenderBuffer& render_buffer,
     size_t render_delay_buffer_delay,
-    const absl::optional<int>& echo_remover_delay,
     rtc::ArrayView<const float> capture) {
   RTC_DCHECK_EQ(kBlockSize, capture.size());
   ++capture_call_counter_;
 
   auto delay_samples = delay_estimator_.EstimateDelay(render_buffer, capture);
 
-  // Overrule the delay estimator delay if the echo remover reports a delay.
-  if (echo_remover_delay) {
-    int total_echo_remover_delay_samples =
-        (render_delay_buffer_delay + *echo_remover_delay) * kBlockSize;
-    delay_samples = DelayEstimate(DelayEstimate::Quality::kRefined,
-                                  total_echo_remover_delay_samples);
-  }
-
   if (delay_samples) {
     if (!delay_samples_ || delay_samples->delay != delay_samples_->delay) {
       delay_change_counter_ = 0;
diff --git a/modules/audio_processing/aec3/render_delay_controller.h b/modules/audio_processing/aec3/render_delay_controller.h
index fb86529..741d734 100644
--- a/modules/audio_processing/aec3/render_delay_controller.h
+++ b/modules/audio_processing/aec3/render_delay_controller.h
@@ -39,7 +39,6 @@
   virtual absl::optional<DelayEstimate> GetDelay(
       const DownsampledRenderBuffer& render_buffer,
       size_t render_delay_buffer_delay,
-      const absl::optional<int>& echo_remover_delay,
       rtc::ArrayView<const float> capture) = 0;
 
   // Returns true if clockdrift has been detected.
diff --git a/modules/audio_processing/aec3/render_delay_controller_unittest.cc b/modules/audio_processing/aec3/render_delay_controller_unittest.cc
index c8405d8..96c6217 100644
--- a/modules/audio_processing/aec3/render_delay_controller_unittest.cc
+++ b/modules/audio_processing/aec3/render_delay_controller_unittest.cc
@@ -48,7 +48,6 @@
 TEST(RenderDelayController, NoRenderSignal) {
   std::vector<float> block(kBlockSize, 0.f);
   EchoCanceller3Config config;
-  absl::optional<int> echo_remover_delay_;
   for (size_t num_matched_filters = 4; num_matched_filters == 10;
        num_matched_filters++) {
     for (auto down_sampling_factor : kDownSamplingFactors) {
@@ -63,7 +62,7 @@
         for (size_t k = 0; k < 100; ++k) {
           auto delay = delay_controller->GetDelay(
               delay_buffer->GetDownsampledRenderBuffer(), delay_buffer->Delay(),
-              echo_remover_delay_, block);
+              block);
           EXPECT_FALSE(delay->delay);
         }
       }
@@ -75,7 +74,6 @@
 TEST(RenderDelayController, BasicApiCalls) {
   std::vector<float> capture_block(kBlockSize, 0.f);
   absl::optional<DelayEstimate> delay_blocks;
-  absl::optional<int> echo_remover_delay;
   for (size_t num_matched_filters = 4; num_matched_filters == 10;
        num_matched_filters++) {
     for (auto down_sampling_factor : kDownSamplingFactors) {
@@ -95,7 +93,7 @@
 
           delay_blocks = delay_controller->GetDelay(
               render_delay_buffer->GetDownsampledRenderBuffer(),
-              render_delay_buffer->Delay(), echo_remover_delay, capture_block);
+              render_delay_buffer->Delay(), capture_block);
         }
         EXPECT_TRUE(delay_blocks);
         EXPECT_FALSE(delay_blocks->delay);
@@ -108,7 +106,6 @@
 // simple timeshifts between the signals.
 TEST(RenderDelayController, Alignment) {
   Random random_generator(42U);
-  absl::optional<int> echo_remover_delay;
   std::vector<float> capture_block(kBlockSize, 0.f);
   for (size_t num_matched_filters = 4; num_matched_filters == 10;
        num_matched_filters++) {
@@ -136,8 +133,7 @@
             render_delay_buffer->PrepareCaptureProcessing();
             delay_blocks = delay_controller->GetDelay(
                 render_delay_buffer->GetDownsampledRenderBuffer(),
-                render_delay_buffer->Delay(), echo_remover_delay,
-                capture_block);
+                render_delay_buffer->Delay(), capture_block);
           }
           ASSERT_TRUE(!!delay_blocks);
 
@@ -157,7 +153,6 @@
 // delays.
 TEST(RenderDelayController, NonCausalAlignment) {
   Random random_generator(42U);
-  absl::optional<int> echo_remover_delay;
   for (size_t num_matched_filters = 4; num_matched_filters == 10;
        num_matched_filters++) {
     for (auto down_sampling_factor : kDownSamplingFactors) {
@@ -186,8 +181,7 @@
             render_delay_buffer->PrepareCaptureProcessing();
             delay_blocks = delay_controller->GetDelay(
                 render_delay_buffer->GetDownsampledRenderBuffer(),
-                render_delay_buffer->Delay(), echo_remover_delay,
-                capture_block[0]);
+                render_delay_buffer->Delay(), capture_block[0]);
           }
 
           ASSERT_FALSE(delay_blocks);
@@ -201,7 +195,6 @@
 // simple timeshifts between the signals when there is jitter in the API calls.
 TEST(RenderDelayController, AlignmentWithJitter) {
   Random random_generator(42U);
-  absl::optional<int> echo_remover_delay;
   std::vector<float> capture_block(kBlockSize, 0.f);
   for (size_t num_matched_filters = 4; num_matched_filters == 10;
        num_matched_filters++) {
@@ -236,8 +229,7 @@
               render_delay_buffer->PrepareCaptureProcessing();
               delay_blocks = delay_controller->GetDelay(
                   render_delay_buffer->GetDownsampledRenderBuffer(),
-                  render_delay_buffer->Delay(), echo_remover_delay,
-                  capture_block_buffer[k]);
+                  render_delay_buffer->Delay(), capture_block_buffer[k]);
             }
           }
 
@@ -285,7 +277,6 @@
 TEST(RenderDelayController, WrongCaptureSize) {
   std::vector<float> block(kBlockSize - 1, 0.f);
   EchoCanceller3Config config;
-  absl::optional<int> echo_remover_delay;
   for (auto rate : {8000, 16000, 32000, 48000}) {
     SCOPED_TRACE(ProduceDebugText(rate));
     std::unique_ptr<RenderDelayBuffer> render_delay_buffer(
@@ -294,7 +285,7 @@
         std::unique_ptr<RenderDelayController>(
             RenderDelayController::Create(EchoCanceller3Config(), rate))
             ->GetDelay(render_delay_buffer->GetDownsampledRenderBuffer(),
-                       render_delay_buffer->Delay(), echo_remover_delay, block),
+                       render_delay_buffer->Delay(), block),
         "");
   }
 }