1e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
2e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
4e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  Use of this source code is governed by a BSD-style license
5e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  that can be found in the LICENSE file in the root of the source
6e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  tree. An additional intellectual property rights grant can be found
7e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  in the file PATENTS.  All contributing project authors may
8e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  be found in the AUTHORS file in the root of the source tree.
9e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
10e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
11e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AEC_MAIN_INTERFACE_ECHO_CANCELLATION_H_
12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define WEBRTC_MODULES_AUDIO_PROCESSING_AEC_MAIN_INTERFACE_ECHO_CANCELLATION_H_
13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "typedefs.h"
15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent// Errors
17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AEC_UNSPECIFIED_ERROR           12000
18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AEC_UNSUPPORTED_FUNCTION_ERROR  12001
19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AEC_UNINITIALIZED_ERROR         12002
20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AEC_NULL_POINTER_ERROR          12003
21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AEC_BAD_PARAMETER_ERROR         12004
22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent// Warnings
24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define AEC_BAD_PARAMETER_WARNING       12050
25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentenum {
27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    kAecNlpConservative = 0,
28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    kAecNlpModerate,
29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    kAecNlpAggressive
30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent};
31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentenum {
33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    kAecFalse = 0,
34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    kAecTrue
35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent};
36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurenttypedef struct {
38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    WebRtc_Word16 nlpMode;        // default kAecNlpModerate
39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    WebRtc_Word16 skewMode;       // default kAecFalse
40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    WebRtc_Word16 metricsMode;    // default kAecFalse
41c55a96383497a772a307b346368133960b02ad03Eric Laurent    int delay_logging;            // default kAecFalse
42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    //float realSkew;
43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} AecConfig;
44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurenttypedef struct {
46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    WebRtc_Word16 instant;
47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    WebRtc_Word16 average;
48e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    WebRtc_Word16 max;
49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    WebRtc_Word16 min;
50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} AecLevel;
51e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurenttypedef struct {
53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    AecLevel rerl;
54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    AecLevel erl;
55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    AecLevel erle;
56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    AecLevel aNlp;
57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} AecMetrics;
58e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
59e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#ifdef __cplusplus
60e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentextern "C" {
61e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif
62e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
63e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
64e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Allocates the memory needed by the AEC. The memory needs to be initialized
65e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * separately using the WebRtcAec_Init() function.
66e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
67e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
68e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
69e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void **aecInst               Pointer to the AEC instance to be created
70c55a96383497a772a307b346368133960b02ad03Eric Laurent *                              and initialized
71e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
72e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
73e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
74e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32 return          0: OK
75e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
76e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
77e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_Create(void **aecInst);
78e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
79e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
80e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function releases the memory allocated by WebRtcAec_Create().
81e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
82e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
83e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
84e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void         *aecInst        Pointer to the AEC instance
85e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
86e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
87e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
88e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return         0: OK
89e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
90e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
91e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_Free(void *aecInst);
92e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
93e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
94e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Initializes an AEC instance.
95e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
96e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
97e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
98e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void           *aecInst      Pointer to the AEC instance
99e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  sampFreq      Sampling frequency of data
100e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  scSampFreq    Soundcard sampling frequency
101e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
102e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
103e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
104e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32 return          0: OK
105e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
106e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
107e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_Init(void *aecInst,
108e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                             WebRtc_Word32 sampFreq,
109e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                             WebRtc_Word32 scSampFreq);
110e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
111e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
112e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inserts an 80 or 160 sample block of data into the farend buffer.
113e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
114e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
115e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
116e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void           *aecInst      Pointer to the AEC instance
117e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16  *farend       In buffer containing one frame of
118e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              farend signal for L band
119e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16  nrOfSamples   Number of samples in farend buffer
120e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
121e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
122e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
123e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return         0: OK
124e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
125e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
126e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_BufferFarend(void *aecInst,
127e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                     const WebRtc_Word16 *farend,
128e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                     WebRtc_Word16 nrOfSamples);
129e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
130e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
131e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Runs the echo canceller on an 80 or 160 sample blocks of data.
132e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
133e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
134e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
135e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void          *aecInst       Pointer to the AEC instance
136e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16 *nearend       In buffer containing one frame of
137e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              nearend+echo signal for L band
138e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16 *nearendH      In buffer containing one frame of
139e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              nearend+echo signal for H band
140e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16 nrOfSamples    Number of samples in nearend buffer
141e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16 msInSndCardBuf Delay estimate for sound card and
142e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              system buffers
143e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16 skew           Difference between number of samples played
144e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              and recorded at the soundcard (for clock skew
145e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              compensation)
146e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
147e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
148e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
149e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16  *out          Out buffer, one frame of processed nearend
150e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              for L band
151e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16  *outH         Out buffer, one frame of processed nearend
152e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              for H band
153e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return         0: OK
154e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
155e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
156e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_Process(void *aecInst,
157e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                const WebRtc_Word16 *nearend,
158e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                const WebRtc_Word16 *nearendH,
159e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                WebRtc_Word16 *out,
160e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                WebRtc_Word16 *outH,
161e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                WebRtc_Word16 nrOfSamples,
162e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                WebRtc_Word16 msInSndCardBuf,
163e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                                WebRtc_Word32 skew);
164e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
165e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
166e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * This function enables the user to set certain parameters on-the-fly.
167e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
168e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
169e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
170e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void           *aecInst      Pointer to the AEC instance
171e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * AecConfig      config        Config instance that contains all
172e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              properties to be set
173e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
174e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
175e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
176e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return         0: OK
177e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
178e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
179e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_set_config(void *aecInst, AecConfig config);
180e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
181e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
182e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Gets the on-the-fly paramters.
183e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
184e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
185e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
186e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void           *aecInst      Pointer to the AEC instance
187e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
188e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
189e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
190e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * AecConfig      *config       Pointer to the config instance that
191e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              all properties will be written to
192e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return         0: OK
193e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
194e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
195e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_get_config(void *aecInst, AecConfig *config);
196e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
197e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
198e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Gets the current echo status of the nearend signal.
199e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
200e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
201e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
202e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void           *aecInst      Pointer to the AEC instance
203e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
204e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
205e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
206e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16  *status       0: Almost certainly nearend single-talk
207e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              1: Might not be neared single-talk
208e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return         0: OK
209e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
210e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
211e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_get_echo_status(void *aecInst, WebRtc_Word16 *status);
212e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
213e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
214e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Gets the current echo metrics for the session.
215e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
216e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
217e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
218e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void           *aecInst      Pointer to the AEC instance
219e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
220e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
221e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
222e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * AecMetrics     *metrics      Struct which will be filled out with the
223e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              current echo metrics.
224e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return         0: OK
225e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
226e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
227e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_GetMetrics(void *aecInst, AecMetrics *metrics);
228e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
229e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
230c55a96383497a772a307b346368133960b02ad03Eric Laurent * Gets the current delay metrics for the session.
231c55a96383497a772a307b346368133960b02ad03Eric Laurent *
232c55a96383497a772a307b346368133960b02ad03Eric Laurent * Inputs                       Description
233c55a96383497a772a307b346368133960b02ad03Eric Laurent * -------------------------------------------------------------------
234c55a96383497a772a307b346368133960b02ad03Eric Laurent * void*      handle            Pointer to the AEC instance
235c55a96383497a772a307b346368133960b02ad03Eric Laurent *
236c55a96383497a772a307b346368133960b02ad03Eric Laurent * Outputs                      Description
237c55a96383497a772a307b346368133960b02ad03Eric Laurent * -------------------------------------------------------------------
238c55a96383497a772a307b346368133960b02ad03Eric Laurent * int*       median            Delay median value.
239c55a96383497a772a307b346368133960b02ad03Eric Laurent * int*       std               Delay standard deviation.
240c55a96383497a772a307b346368133960b02ad03Eric Laurent *
241c55a96383497a772a307b346368133960b02ad03Eric Laurent * int        return             0: OK
242c55a96383497a772a307b346368133960b02ad03Eric Laurent *                              -1: error
243c55a96383497a772a307b346368133960b02ad03Eric Laurent */
244c55a96383497a772a307b346368133960b02ad03Eric Laurentint WebRtcAec_GetDelayMetrics(void* handle, int* median, int* std);
245c55a96383497a772a307b346368133960b02ad03Eric Laurent
246c55a96383497a772a307b346368133960b02ad03Eric Laurent/*
247e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Gets the last error code.
248e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
249e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
250e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
251e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * void           *aecInst      Pointer to the AEC instance
252e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
253e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
254e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
255e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return        11000-11100: error code
256e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
257e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_get_error_code(void *aecInst);
258e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
259e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
260e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Gets a version string.
261e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
262e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Inputs                       Description
263e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
264e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * char           *versionStr   Pointer to a string array
265e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word16  len           The maximum length of the string
266e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
267e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Outputs                      Description
268e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * -------------------------------------------------------------------
269e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word8   *versionStr   Pointer to a string array
270e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * WebRtc_Word32  return         0: OK
271e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *                              -1: error
272e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
273e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentWebRtc_Word32 WebRtcAec_get_version(WebRtc_Word8 *versionStr, WebRtc_Word16 len);
274e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
275e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#ifdef __cplusplus
276e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}
277e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif
278e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif  /* WEBRTC_MODULES_AUDIO_PROCESSING_AEC_MAIN_INTERFACE_ECHO_CANCELLATION_H_ */
279