From b0bd0708d6542ce837d0499975fab7b22d2fad20 Mon Sep 17 00:00:00 2001 From: Sam Zackrisson Date: Tue, 12 May 2020 10:48:19 +0200 Subject: [PATCH] Surface ResidualEchoDetector creation to API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Karl Wiberg Commit-Queue: Sam Zackrisson Cr-Commit-Position: refs/heads/master@{#31222} --- api/DEPS | 4 +++ api/audio/BUILD.gn | 14 ++++++++++ api/audio/echo_detector_creator.cc | 21 +++++++++++++++ api/audio/echo_detector_creator.h | 26 +++++++++++++++++++ test/fuzzers/BUILD.gn | 2 +- test/fuzzers/residual_echo_detector_fuzzer.cc | 5 ++-- 6 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 api/audio/echo_detector_creator.cc create mode 100644 api/audio/echo_detector_creator.h diff --git a/api/DEPS b/api/DEPS index 1e92b12281..1212b43be8 100644 --- a/api/DEPS +++ b/api/DEPS @@ -246,6 +246,10 @@ specific_include_rules = { "+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 2405d9d041..4c8004ed2d 100644 --- a/api/audio/BUILD.gn +++ b/api/audio/BUILD.gn @@ -87,3 +87,17 @@ rtc_source_set("echo_control") { 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 0000000000..4c3d9e61fe --- /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 CreateEchoDetector() { + return new rtc::RefCountedObject(); +} + +} // namespace webrtc diff --git a/api/audio/echo_detector_creator.h b/api/audio/echo_detector_creator.h new file mode 100644 index 0000000000..5ba171de97 --- /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 CreateEchoDetector(); + +} // namespace webrtc + +#endif // API_AUDIO_ECHO_DETECTOR_CREATOR_H_ diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn index a7aa058ecb..96376a2e83 100644 --- a/test/fuzzers/BUILD.gn +++ b/test/fuzzers/BUILD.gn @@ -373,7 +373,7 @@ webrtc_fuzzer_test("neteq_signal_fuzzer") { 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 99ea06a08e..da4b6ededf 100644 --- a/test/fuzzers/residual_echo_detector_fuzzer.cc +++ b/test/fuzzers/residual_echo_detector_fuzzer.cc @@ -15,7 +15,7 @@ #include #include -#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 @@ void FuzzOneInput(const uint8_t* data, size_t size) { read_idx += 2; std::bitset<16> call_order(call_order_int); - rtc::scoped_refptr echo_detector = - new rtc::RefCountedObject(); + rtc::scoped_refptr echo_detector = CreateEchoDetector(); std::vector input(1); // Call AnalyzeCaptureAudio once to prevent the flushing of the buffer. echo_detector->AnalyzeCaptureAudio(input);