mirror of
https://github.com/danog/libtgvoip.git
synced 2024-12-02 17:51:06 +01:00
5caaaafa42
I'm now using the entire audio processing module from WebRTC as opposed to individual DSP algorithms pulled from there before. Seems to work better this way.
205 lines
7.7 KiB
C
205 lines
7.7 KiB
C
/*
|
|
* Copyright (c) 2012 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 MODULES_AUDIO_PROCESSING_AECM_ECHO_CONTROL_MOBILE_H_
|
|
#define MODULES_AUDIO_PROCESSING_AECM_ECHO_CONTROL_MOBILE_H_
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.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 {
|
|
int16_t cngMode; // AECM_FALSE, AECM_TRUE (default)
|
|
int16_t 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.
|
|
* Returns a pointer to the instance and a nullptr at failure.
|
|
*/
|
|
void* WebRtcAecm_Create();
|
|
|
|
/*
|
|
* This function releases the memory allocated by WebRtcAecm_Create()
|
|
*
|
|
* Inputs Description
|
|
* -------------------------------------------------------------------
|
|
* void* aecmInst Pointer to the AECM instance
|
|
*/
|
|
void WebRtcAecm_Free(void* aecmInst);
|
|
|
|
/*
|
|
* Initializes an AECM instance.
|
|
*
|
|
* Inputs Description
|
|
* -------------------------------------------------------------------
|
|
* void* aecmInst Pointer to the AECM instance
|
|
* int32_t sampFreq Sampling frequency of data
|
|
*
|
|
* Outputs Description
|
|
* -------------------------------------------------------------------
|
|
* int32_t return 0: OK
|
|
* 1200-12004,12100: error/warning
|
|
*/
|
|
int32_t WebRtcAecm_Init(void* aecmInst, int32_t sampFreq);
|
|
|
|
/*
|
|
* Inserts an 80 or 160 sample block of data into the farend buffer.
|
|
*
|
|
* Inputs Description
|
|
* -------------------------------------------------------------------
|
|
* void* aecmInst Pointer to the AECM instance
|
|
* int16_t* farend In buffer containing one frame of
|
|
* farend signal
|
|
* int16_t nrOfSamples Number of samples in farend buffer
|
|
*
|
|
* Outputs Description
|
|
* -------------------------------------------------------------------
|
|
* int32_t return 0: OK
|
|
* 1200-12004,12100: error/warning
|
|
*/
|
|
int32_t WebRtcAecm_BufferFarend(void* aecmInst,
|
|
const int16_t* farend,
|
|
size_t nrOfSamples);
|
|
|
|
/*
|
|
* Reports any errors that would arise when buffering a farend buffer.
|
|
*
|
|
* Inputs Description
|
|
* -------------------------------------------------------------------
|
|
* void* aecmInst Pointer to the AECM instance
|
|
* int16_t* farend In buffer containing one frame of
|
|
* farend signal
|
|
* int16_t nrOfSamples Number of samples in farend buffer
|
|
*
|
|
* Outputs Description
|
|
* -------------------------------------------------------------------
|
|
* int32_t return 0: OK
|
|
* 1200-12004,12100: error/warning
|
|
*/
|
|
int32_t WebRtcAecm_GetBufferFarendError(void* aecmInst,
|
|
const int16_t* farend,
|
|
size_t nrOfSamples);
|
|
|
|
/*
|
|
* Runs the AECM on an 80 or 160 sample blocks of data.
|
|
*
|
|
* Inputs Description
|
|
* -------------------------------------------------------------------
|
|
* void* aecmInst Pointer to the AECM instance
|
|
* int16_t* nearendNoisy In buffer containing one frame of
|
|
* reference nearend+echo signal. If
|
|
* noise reduction is active, provide
|
|
* the noisy signal here.
|
|
* int16_t* 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.
|
|
* int16_t nrOfSamples Number of samples in nearend buffer
|
|
* int16_t msInSndCardBuf Delay estimate for sound card and
|
|
* system buffers
|
|
*
|
|
* Outputs Description
|
|
* -------------------------------------------------------------------
|
|
* int16_t* out Out buffer, one frame of processed nearend
|
|
* int32_t return 0: OK
|
|
* 1200-12004,12100: error/warning
|
|
*/
|
|
int32_t WebRtcAecm_Process(void* aecmInst,
|
|
const int16_t* nearendNoisy,
|
|
const int16_t* nearendClean,
|
|
int16_t* out,
|
|
size_t nrOfSamples,
|
|
int16_t 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
|
|
* -------------------------------------------------------------------
|
|
* int32_t return 0: OK
|
|
* 1200-12004,12100: error/warning
|
|
*/
|
|
int32_t WebRtcAecm_set_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
|
|
* -------------------------------------------------------------------
|
|
* int32_t return 0: OK
|
|
* 1200-12004,12100: error/warning
|
|
*/
|
|
int32_t 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
|
|
* -------------------------------------------------------------------
|
|
* int32_t return 0: OK
|
|
* 1200-12004,12100: error/warning
|
|
*/
|
|
int32_t 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();
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif // MODULES_AUDIO_PROCESSING_AECM_ECHO_CONTROL_MOBILE_H_
|