blob: 9872889204a7229281177e11a3bec0b2a4fa2bd7 [file] [log] [blame]
Gustaf Ullberg8e467df2018-02-05 14:39:38 +01001/*
2 * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Gustaf Ullbergfd4ce502018-02-15 10:09:09 +010011#ifndef API_AUDIO_ECHO_CONTROL_H_
12#define API_AUDIO_ECHO_CONTROL_H_
Gustaf Ullberg8e467df2018-02-05 14:39:38 +010013
14#include <memory>
15
16namespace webrtc {
17
18class AudioBuffer;
19
20// Interface for an acoustic echo cancellation (AEC) submodule.
21class EchoControl {
22 public:
23 // Analysis (not changing) of the render signal.
24 virtual void AnalyzeRender(AudioBuffer* render) = 0;
25
26 // Analysis (not changing) of the capture signal.
27 virtual void AnalyzeCapture(AudioBuffer* capture) = 0;
28
29 // Processes the capture signal in order to remove the echo.
30 virtual void ProcessCapture(AudioBuffer* capture, bool echo_path_change) = 0;
31
32 struct Metrics {
33 double echo_return_loss;
34 double echo_return_loss_enhancement;
35 int delay_ms;
36 };
37
38 // Collect current metrics from the echo controller.
39 virtual Metrics GetMetrics() const = 0;
40
Per Åhgrend0fa8202018-04-18 09:35:13 +020041 // Provides an optional external estimate of the audio buffer delay.
Gustaf Ullberg3cb61042019-10-24 15:52:10 +020042 virtual void SetAudioBufferDelay(size_t delay_ms) {}
43 virtual void SetAudioBufferDelay(int delay_ms) {
44 // Default to old implementation.
45 SetAudioBufferDelay(static_cast<size_t>(delay_ms));
46 }
Per Åhgrend0fa8202018-04-18 09:35:13 +020047
Gustaf Ullberg8675eee2019-10-09 13:34:36 +020048 // Returns wheter the signal is altered.
49 virtual bool ActiveProcessing() const = 0;
50
Gustaf Ullberg8e467df2018-02-05 14:39:38 +010051 virtual ~EchoControl() {}
52};
53
54// Interface for a factory that creates EchoControllers.
55class EchoControlFactory {
56 public:
57 virtual std::unique_ptr<EchoControl> Create(int sample_rate_hz) = 0;
58 virtual ~EchoControlFactory() = default;
59};
60} // namespace webrtc
61
Gustaf Ullbergfd4ce502018-02-15 10:09:09 +010062#endif // API_AUDIO_ECHO_CONTROL_H_