/* * Copyright (c) 2011 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 WEBRTC_MODULES_AUDIO_PROCESSING_AECM_MAIN_INTERFACE_ECHO_CONTROL_MOBILE_H_ #define WEBRTC_MODULES_AUDIO_PROCESSING_AECM_MAIN_INTERFACE_ECHO_CONTROL_MOBILE_H_ #include "typedefs.h" enum { AecmFalse = 0, AecmTrue }; // Errors #define AECM_UNSPECIFIED_ERROR 12000 #define AECM_UNSUPPORTED_FUNCTION_ERROR 12001 #define AECM_UNINITIALIZED_ERROR 12002 #define AECM_NULL_POINTER_ERROR 12003 #define AECM_BAD_PARAMETER_ERROR 12004 // Warnings #define AECM_BAD_PARAMETER_WARNING 12100 typedef struct { WebRtc_Word16 cngMode; // AECM_FALSE, AECM_TRUE (default) WebRtc_Word16 echoMode; // 0, 1, 2, 3 (default), 4 } AecmConfig; #ifdef __cplusplus extern "C" { #endif /* * Allocates the memory needed by the AECM. The memory needs to be * initialized separately using the WebRtcAecm_Init() function. * * Inputs Description * ------------------------------------------------------------------- * void **aecmInst Pointer to the AECM instance to be * created and initialized * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_Create(void **aecmInst); /* * This function releases the memory allocated by WebRtcAecm_Create() * * Inputs Description * ------------------------------------------------------------------- * void *aecmInst Pointer to the AECM instance * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_Free(void *aecmInst); /* * Initializes an AECM instance. * * Inputs Description * ------------------------------------------------------------------- * void *aecmInst Pointer to the AECM instance * WebRtc_Word32 sampFreq Sampling frequency of data * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_Init(void* aecmInst, WebRtc_Word32 sampFreq); /* * Inserts an 80 or 160 sample block of data into the farend buffer. * * Inputs Description * ------------------------------------------------------------------- * void *aecmInst Pointer to the AECM instance * WebRtc_Word16 *farend In buffer containing one frame of * farend signal * WebRtc_Word16 nrOfSamples Number of samples in farend buffer * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_BufferFarend(void* aecmInst, const WebRtc_Word16* farend, WebRtc_Word16 nrOfSamples); /* * Runs the AECM on an 80 or 160 sample blocks of data. * * Inputs Description * ------------------------------------------------------------------- * void *aecmInst Pointer to the AECM instance * WebRtc_Word16 *nearendNoisy In buffer containing one frame of * reference nearend+echo signal. If * noise reduction is active, provide * the noisy signal here. * WebRtc_Word16 *nearendClean In buffer containing one frame of * nearend+echo signal. If noise * reduction is active, provide the * clean signal here. Otherwise pass a * NULL pointer. * WebRtc_Word16 nrOfSamples Number of samples in nearend buffer * WebRtc_Word16 msInSndCardBuf Delay estimate for sound card and * system buffers * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word16 *out Out buffer, one frame of processed nearend * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_Process(void* aecmInst, const WebRtc_Word16* nearendNoisy, const WebRtc_Word16* nearendClean, WebRtc_Word16* out, WebRtc_Word16 nrOfSamples, WebRtc_Word16 msInSndCardBuf); /* * This function enables the user to set certain parameters on-the-fly * * Inputs Description * ------------------------------------------------------------------- * void *aecmInst Pointer to the AECM instance * AecmConfig config Config instance that contains all * properties to be set * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_set_config(void* aecmInst, AecmConfig config); /* * This function enables the user to set certain parameters on-the-fly * * Inputs Description * ------------------------------------------------------------------- * void *aecmInst Pointer to the AECM instance * * Outputs Description * ------------------------------------------------------------------- * AecmConfig *config Pointer to the config instance that * all properties will be written to * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_get_config(void *aecmInst, AecmConfig *config); /* * This function enables the user to set the echo path on-the-fly. * * Inputs Description * ------------------------------------------------------------------- * void* aecmInst Pointer to the AECM instance * void* echo_path Pointer to the echo path to be set * size_t size_bytes Size in bytes of the echo path * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_InitEchoPath(void* aecmInst, const void* echo_path, size_t size_bytes); /* * This function enables the user to get the currently used echo path * on-the-fly * * Inputs Description * ------------------------------------------------------------------- * void* aecmInst Pointer to the AECM instance * void* echo_path Pointer to echo path * size_t size_bytes Size in bytes of the echo path * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_GetEchoPath(void* aecmInst, void* echo_path, size_t size_bytes); /* * This function enables the user to get the echo path size in bytes * * Outputs Description * ------------------------------------------------------------------- * size_t return : size in bytes */ size_t WebRtcAecm_echo_path_size_bytes(); /* * Gets the last error code. * * Inputs Description * ------------------------------------------------------------------- * void *aecmInst Pointer to the AECM instance * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word32 return 11000-11100: error code */ WebRtc_Word32 WebRtcAecm_get_error_code(void *aecmInst); /* * Gets a version string * * Inputs Description * ------------------------------------------------------------------- * char *versionStr Pointer to a string array * WebRtc_Word16 len The maximum length of the string * * Outputs Description * ------------------------------------------------------------------- * WebRtc_Word8 *versionStr Pointer to a string array * WebRtc_Word32 return 0: OK * -1: error */ WebRtc_Word32 WebRtcAecm_get_version(WebRtc_Word8 *versionStr, WebRtc_Word16 len); #ifdef __cplusplus } #endif #endif /* WEBRTC_MODULES_AUDIO_PROCESSING_AECM_MAIN_INTERFACE_ECHO_CONTROL_MOBILE_H_ */