Surface ResidualEchoDetector creation to API

This allows users to inject the residual echo detector, as a step toward making it an optional part of compilation.

Bug: webrtc:11292, webrtc:11539
Change-Id: I7fcc8dbaced67a82851cd6cdcbc115eb01c21fcf
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174040
Reviewed-by: Per Ã…hgren <peah@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31222}
diff --git a/api/DEPS b/api/DEPS
index 1e92b12..1212b43 100644
--- a/api/DEPS
+++ b/api/DEPS
@@ -246,6 +246,10 @@
     "+modules/audio_processing/include/audio_processing.h",
   ],
 
+  "echo_detector_creator\.h": [
+    "+modules/audio_processing/include/audio_processing.h",
+  ],
+
   "fake_frame_decryptor\.h": [
     "+rtc_base/ref_counted_object.h",
   ],
diff --git a/api/audio/BUILD.gn b/api/audio/BUILD.gn
index 2405d9d..4c8004e 100644
--- a/api/audio/BUILD.gn
+++ b/api/audio/BUILD.gn
@@ -87,3 +87,17 @@
   sources = [ "echo_control.h" ]
   deps = [ "../../rtc_base:checks" ]
 }
+
+rtc_source_set("echo_detector_creator") {
+  visibility = [ "*" ]
+  sources = [
+    "echo_detector_creator.cc",
+    "echo_detector_creator.h",
+  ]
+  deps = [
+    "../../api:scoped_refptr",
+    "../../modules/audio_processing:api",
+    "../../modules/audio_processing:audio_processing",
+    "../../rtc_base:refcount",
+  ]
+}
diff --git a/api/audio/echo_detector_creator.cc b/api/audio/echo_detector_creator.cc
new file mode 100644
index 0000000..4c3d9e6
--- /dev/null
+++ b/api/audio/echo_detector_creator.cc
@@ -0,0 +1,21 @@
+/*
+ *  Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+#include "api/audio/echo_detector_creator.h"
+
+#include "modules/audio_processing/residual_echo_detector.h"
+#include "rtc_base/ref_counted_object.h"
+
+namespace webrtc {
+
+rtc::scoped_refptr<EchoDetector> CreateEchoDetector() {
+  return new rtc::RefCountedObject<ResidualEchoDetector>();
+}
+
+}  // namespace webrtc
diff --git a/api/audio/echo_detector_creator.h b/api/audio/echo_detector_creator.h
new file mode 100644
index 0000000..5ba171d
--- /dev/null
+++ b/api/audio/echo_detector_creator.h
@@ -0,0 +1,26 @@
+/*
+ *  Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_AUDIO_ECHO_DETECTOR_CREATOR_H_
+#define API_AUDIO_ECHO_DETECTOR_CREATOR_H_
+
+#include "api/scoped_refptr.h"
+#include "modules/audio_processing/include/audio_processing.h"
+
+namespace webrtc {
+
+// Returns an instance of the WebRTC implementation of a residual echo detector.
+// It can be provided to the webrtc::AudioProcessingBuilder to obtain the
+// usual residual echo metrics.
+rtc::scoped_refptr<EchoDetector> CreateEchoDetector();
+
+}  // namespace webrtc
+
+#endif  // API_AUDIO_ECHO_DETECTOR_CREATOR_H_
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index a7aa058..96376a2 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -373,7 +373,7 @@
 webrtc_fuzzer_test("residual_echo_detector_fuzzer") {
   sources = [ "residual_echo_detector_fuzzer.cc" ]
   deps = [
-    "../../modules/audio_processing",
+    "../../api/audio:echo_detector_creator",
     "../../rtc_base:checks",
     "../../rtc_base:rtc_base_approved",
   ]
diff --git a/test/fuzzers/residual_echo_detector_fuzzer.cc b/test/fuzzers/residual_echo_detector_fuzzer.cc
index 99ea06a..da4b6ed 100644
--- a/test/fuzzers/residual_echo_detector_fuzzer.cc
+++ b/test/fuzzers/residual_echo_detector_fuzzer.cc
@@ -15,7 +15,7 @@
 #include <bitset>
 #include <vector>
 
-#include "modules/audio_processing/residual_echo_detector.h"
+#include "api/audio/echo_detector_creator.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/ref_counted_object.h"
 
@@ -43,8 +43,7 @@
   read_idx += 2;
   std::bitset<16> call_order(call_order_int);
 
-  rtc::scoped_refptr<ResidualEchoDetector> echo_detector =
-      new rtc::RefCountedObject<ResidualEchoDetector>();
+  rtc::scoped_refptr<EchoDetector> echo_detector = CreateEchoDetector();
   std::vector<float> input(1);
   // Call AnalyzeCaptureAudio once to prevent the flushing of the buffer.
   echo_detector->AnalyzeCaptureAudio(input);