Staging: echo: coding style cleanups
Some remaining coding style cleanups to the header files and the echo.c file. Cc: David Rowe <david@rowetel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
c8b3953c4c
commit
56791f0a85
|
@ -220,12 +220,12 @@ static inline void lms_adapt_bg(struct oslec_state *ec, int clean,
|
|||
}
|
||||
#endif
|
||||
|
||||
static __inline__ int top_bit(unsigned int bits)
|
||||
static inline int top_bit(unsigned int bits)
|
||||
{
|
||||
if (bits == 0)
|
||||
return -1;
|
||||
else
|
||||
return (int)fls((int32_t)bits)-1;
|
||||
return -1;
|
||||
else
|
||||
return (int)fls((int32_t)bits)-1;
|
||||
}
|
||||
|
||||
struct oslec_state *oslec_create(int len, int adaption_mode)
|
||||
|
@ -466,7 +466,7 @@ int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx)
|
|||
|
||||
factor = (2^30) * (2^-2) * clean_bg_rx/P
|
||||
|
||||
(30 - 2 - log2(P))
|
||||
(30 - 2 - log2(P))
|
||||
factor = clean_bg_rx 2 ----- (3)
|
||||
|
||||
To avoid a divide we approximate log2(P) as top_bit(P),
|
||||
|
|
|
@ -28,13 +28,17 @@
|
|||
#ifndef __ECHO_H
|
||||
#define __ECHO_H
|
||||
|
||||
/*! \page echo_can_page Line echo cancellation for voice
|
||||
/*
|
||||
Line echo cancellation for voice
|
||||
|
||||
What does it do?
|
||||
|
||||
\section echo_can_page_sec_1 What does it do?
|
||||
This module aims to provide G.168-2002 compliant echo cancellation, to remove
|
||||
electrical echoes (e.g. from 2-4 wire hybrids) from voice calls.
|
||||
|
||||
\section echo_can_page_sec_2 How does it work?
|
||||
|
||||
How does it work?
|
||||
|
||||
The heart of the echo cancellor is FIR filter. This is adapted to match the
|
||||
echo impulse response of the telephone line. It must be long enough to
|
||||
adequately cover the duration of that impulse response. The signal transmitted
|
||||
|
@ -108,7 +112,8 @@ major mis-convergence in the adaption process. An assessment algorithm is
|
|||
needed which produces a fairly accurate result from a very short burst of far
|
||||
end energy.
|
||||
|
||||
\section echo_can_page_sec_3 How do I use it?
|
||||
How do I use it?
|
||||
|
||||
The echo cancellor processes both the transmit and receive streams sample by
|
||||
sample. The processing function is not declared inline. Unfortunately,
|
||||
cancellation requires many operations per sample, so the call overhead is only
|
||||
|
@ -118,7 +123,7 @@ a minor burden.
|
|||
#include "fir.h"
|
||||
#include "oslec.h"
|
||||
|
||||
/*!
|
||||
/*
|
||||
G.168 echo canceller descriptor. This defines the working state for a line
|
||||
echo canceller.
|
||||
*/
|
||||
|
|
|
@ -23,14 +23,6 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/*! \page fir_page FIR filtering
|
||||
\section fir_page_sec_1 What does it do?
|
||||
???.
|
||||
|
||||
\section fir_page_sec_2 How does it work?
|
||||
???.
|
||||
*/
|
||||
|
||||
#if !defined(_FIR_H_)
|
||||
#define _FIR_H_
|
||||
|
||||
|
@ -62,10 +54,10 @@
|
|||
can.
|
||||
*/
|
||||
|
||||
/*!
|
||||
16 bit integer FIR descriptor. This defines the working state for a single
|
||||
instance of an FIR filter using 16 bit integer coefficients.
|
||||
*/
|
||||
/*
|
||||
* 16 bit integer FIR descriptor. This defines the working state for a single
|
||||
* instance of an FIR filter using 16 bit integer coefficients.
|
||||
*/
|
||||
struct fir16_state_t {
|
||||
int taps;
|
||||
int curr_pos;
|
||||
|
@ -73,11 +65,11 @@ struct fir16_state_t {
|
|||
int16_t *history;
|
||||
};
|
||||
|
||||
/*!
|
||||
32 bit integer FIR descriptor. This defines the working state for a single
|
||||
instance of an FIR filter using 32 bit integer coefficients, and filtering
|
||||
16 bit integer data.
|
||||
*/
|
||||
/*
|
||||
* 32 bit integer FIR descriptor. This defines the working state for a single
|
||||
* instance of an FIR filter using 32 bit integer coefficients, and filtering
|
||||
* 16 bit integer data.
|
||||
*/
|
||||
struct fir32_state_t {
|
||||
int taps;
|
||||
int curr_pos;
|
||||
|
@ -85,10 +77,10 @@ struct fir32_state_t {
|
|||
int16_t *history;
|
||||
};
|
||||
|
||||
/*!
|
||||
Floating point FIR descriptor. This defines the working state for a single
|
||||
instance of an FIR filter using floating point coefficients and data.
|
||||
*/
|
||||
/*
|
||||
* Floating point FIR descriptor. This defines the working state for a single
|
||||
* instance of an FIR filter using floating point coefficients and data.
|
||||
*/
|
||||
struct fir_float_state_t {
|
||||
int taps;
|
||||
int curr_pos;
|
||||
|
@ -222,4 +214,3 @@ static inline int16_t fir32(struct fir32_state_t *fir, int16_t sample)
|
|||
}
|
||||
|
||||
#endif
|
||||
/*- End of file ------------------------------------------------------------*/
|
||||
|
|
|
@ -27,8 +27,6 @@
|
|||
#ifndef __OSLEC_H
|
||||
#define __OSLEC_H
|
||||
|
||||
/* TODO: document interface */
|
||||
|
||||
/* Mask bits for the adaption mode */
|
||||
#define ECHO_CAN_USE_ADAPTION 0x01
|
||||
#define ECHO_CAN_USE_NLP 0x02
|
||||
|
@ -38,49 +36,59 @@
|
|||
#define ECHO_CAN_USE_RX_HPF 0x20
|
||||
#define ECHO_CAN_DISABLE 0x40
|
||||
|
||||
/*!
|
||||
G.168 echo canceller descriptor. This defines the working state for a line
|
||||
echo canceller.
|
||||
*/
|
||||
/**
|
||||
* oslec_state: G.168 echo canceller descriptor.
|
||||
*
|
||||
* This defines the working state for a line echo canceller.
|
||||
*/
|
||||
struct oslec_state;
|
||||
|
||||
/*! Create a voice echo canceller context.
|
||||
\param len The length of the canceller, in samples.
|
||||
\return The new canceller context, or NULL if the canceller could not be created.
|
||||
*/
|
||||
/**
|
||||
* oslec_create - Create a voice echo canceller context.
|
||||
* @len: The length of the canceller, in samples.
|
||||
* @return: The new canceller context, or NULL if the canceller could not be
|
||||
* created.
|
||||
*/
|
||||
struct oslec_state *oslec_create(int len, int adaption_mode);
|
||||
|
||||
/*! Free a voice echo canceller context.
|
||||
\param ec The echo canceller context.
|
||||
*/
|
||||
/**
|
||||
* oslec_free - Free a voice echo canceller context.
|
||||
* @ec: The echo canceller context.
|
||||
*/
|
||||
void oslec_free(struct oslec_state *ec);
|
||||
|
||||
/*! Flush (reinitialise) a voice echo canceller context.
|
||||
\param ec The echo canceller context.
|
||||
*/
|
||||
/**
|
||||
* oslec_flush - Flush (reinitialise) a voice echo canceller context.
|
||||
* @ec: The echo canceller context.
|
||||
*/
|
||||
void oslec_flush(struct oslec_state *ec);
|
||||
|
||||
/*! Set the adaption mode of a voice echo canceller context.
|
||||
\param ec The echo canceller context.
|
||||
\param adapt The mode.
|
||||
*/
|
||||
/**
|
||||
* oslec_adaption_mode - set the adaption mode of a voice echo canceller context.
|
||||
* @ec The echo canceller context.
|
||||
* @adaption_mode: The mode.
|
||||
*/
|
||||
void oslec_adaption_mode(struct oslec_state *ec, int adaption_mode);
|
||||
|
||||
void oslec_snapshot(struct oslec_state *ec);
|
||||
|
||||
/*! Process a sample through a voice echo canceller.
|
||||
\param ec The echo canceller context.
|
||||
\param tx The transmitted audio sample.
|
||||
\param rx The received audio sample.
|
||||
\return The clean (echo cancelled) received sample.
|
||||
*/
|
||||
/**
|
||||
* oslec_update: Process a sample through a voice echo canceller.
|
||||
* @ec: The echo canceller context.
|
||||
* @tx: The transmitted audio sample.
|
||||
* @rx: The received audio sample.
|
||||
*
|
||||
* The return value is the clean (echo cancelled) received sample.
|
||||
*/
|
||||
int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx);
|
||||
|
||||
/*! Process to high pass filter the tx signal.
|
||||
\param ec The echo canceller context.
|
||||
\param tx The transmitted auio sample.
|
||||
\return The HP filtered transmit sample, send this to your D/A.
|
||||
*/
|
||||
/**
|
||||
* oslec_hpf_tx: Process to high pass filter the tx signal.
|
||||
* @ec: The echo canceller context.
|
||||
* @tx: The transmitted auio sample.
|
||||
*
|
||||
* The return value is the HP filtered transmit sample, send this to your D/A.
|
||||
*/
|
||||
int16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx);
|
||||
|
||||
#endif /* __OSLEC_H */
|
||||
|
|
Loading…
Reference in New Issue