blob: 7fe4f3bbdaf1c7fe39286907cce38a59b7b4ac53 [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
11#ifndef MODULES_AUDIO_PROCESSING_INCLUDE_ECHO_CONTROL_H_
12#define MODULES_AUDIO_PROCESSING_INCLUDE_ECHO_CONTROL_H_
13
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
41 virtual ~EchoControl() {}
42};
43
44// Interface for a factory that creates EchoControllers.
45class EchoControlFactory {
46 public:
47 virtual std::unique_ptr<EchoControl> Create(int sample_rate_hz) = 0;
48 virtual ~EchoControlFactory() = default;
49};
50} // namespace webrtc
51
52#endif // MODULES_AUDIO_PROCESSING_INCLUDE_ECHO_CONTROL_H_