]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/staging/echo/oslec.h
Staging: echo: A separate oslec.h for external interface
[karo-tx-linux.git] / drivers / staging / echo / oslec.h
1 /*
2  *  OSLEC - A line echo canceller.  This code is being developed
3  *          against and partially complies with G168. Using code from SpanDSP
4  *
5  * Written by Steve Underwood <steveu@coppice.org>
6  *         and David Rowe <david_at_rowetel_dot_com>
7  *
8  * Copyright (C) 2001 Steve Underwood and 2007-2008 David Rowe
9  *
10  * All rights reserved.
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License version 2, as
14  * published by the Free Software Foundation.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24  *
25  */
26
27 #ifndef __OSLEC_H
28 #define __OSLEC_H
29
30 /* TODO: document interface */
31
32 /* Mask bits for the adaption mode */
33 #define ECHO_CAN_USE_ADAPTION   0x01
34 #define ECHO_CAN_USE_NLP        0x02
35 #define ECHO_CAN_USE_CNG        0x04
36 #define ECHO_CAN_USE_CLIP       0x08
37 #define ECHO_CAN_USE_TX_HPF     0x10
38 #define ECHO_CAN_USE_RX_HPF     0x20
39 #define ECHO_CAN_DISABLE        0x40
40
41 /*!
42     G.168 echo canceller descriptor. This defines the working state for a line
43     echo canceller.
44 */
45 typedef struct echo_can_state echo_can_state_t;
46
47 /*! Create a voice echo canceller context.
48     \param len The length of the canceller, in samples.
49     \return The new canceller context, or NULL if the canceller could not be created.
50 */
51 echo_can_state_t *echo_can_create(int len, int adaption_mode);
52
53 /*! Free a voice echo canceller context.
54     \param ec The echo canceller context.
55 */
56 void echo_can_free(echo_can_state_t *ec);
57
58 /*! Flush (reinitialise) a voice echo canceller context.
59     \param ec The echo canceller context.
60 */
61 void echo_can_flush(echo_can_state_t *ec);
62
63 /*! Set the adaption mode of a voice echo canceller context.
64     \param ec The echo canceller context.
65     \param adapt The mode.
66 */
67 void echo_can_adaption_mode(echo_can_state_t *ec, int adaption_mode);
68
69 void echo_can_snapshot(echo_can_state_t *ec);
70
71 /*! Process a sample through a voice echo canceller.
72     \param ec The echo canceller context.
73     \param tx The transmitted audio sample.
74     \param rx The received audio sample.
75     \return The clean (echo cancelled) received sample.
76 */
77 int16_t echo_can_update(echo_can_state_t *ec, int16_t tx, int16_t rx);
78
79 /*! Process to high pass filter the tx signal.
80     \param ec The echo canceller context.
81     \param tx The transmitted auio sample.
82     \return The HP filtered transmit sample, send this to your D/A.
83 */
84 int16_t echo_can_hpf_tx(echo_can_state_t *ec, int16_t tx);
85
86 #endif  /* __OSLEC_H */