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);