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