dahdi_echocan_oslec: Call olsec_hpf_tx if CONFIG_DAHDI_PROCESS_ECHOCAN_TX is defined.
It can be necessary to have low frequency filter for tx signal of DAHDI. Otherwise, low-frequency signal from IP can reach a leased line, and return back with nonlinear distortions. This will break an echo canceler. (closes issue #13562) Reported by: biohumanoid Patches: dahdi_echocan_oslec.c.patch uploaded by biohumanoid (license 459) I slightly modified the above patch in order to use echocan_process_tx as the interface. Signed-off-by: Shaun Ruffell <sruffell@digium.com> Acked-by: Kinsey Moore <kmoore@digium.com> Acked-by: Russ Meyerriecks <rmeyerriecks@digium.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9443 a0bf4364-ded3-4de4-8d8a-66a801d63aff
This commit is contained in:
parent
2ba1b4c201
commit
072ccc9b69
@ -43,6 +43,10 @@ static int echo_can_create(struct dahdi_chan *chan, struct dahdi_echocanparams *
|
||||
static void echo_can_free(struct dahdi_chan *chan, struct dahdi_echocan_state *ec);
|
||||
static void echo_can_process(struct dahdi_echocan_state *ec, short *isig, const short *iref, u32 size);
|
||||
static int echo_can_traintap(struct dahdi_echocan_state *ec, int pos, short val);
|
||||
#ifdef CONFIG_DAHDI_ECHOCAN_PROCESS_TX
|
||||
static void echo_can_hpf_tx(struct dahdi_echocan_state *ec,
|
||||
short *tx, u32 size);
|
||||
#endif
|
||||
|
||||
static const struct dahdi_echocan_factory my_factory = {
|
||||
.name = "OSLEC",
|
||||
@ -55,6 +59,9 @@ static const struct dahdi_echocan_ops my_ops = {
|
||||
.echocan_free = echo_can_free,
|
||||
.echocan_process = echo_can_process,
|
||||
.echocan_traintap = echo_can_traintap,
|
||||
#ifdef CONFIG_DAHDI_ECHOCAN_PROCESS_TX
|
||||
.echocan_process_tx = echo_can_hpf_tx,
|
||||
#endif
|
||||
};
|
||||
|
||||
struct ec_pvt {
|
||||
@ -118,6 +125,21 @@ static int echo_can_traintap(struct dahdi_echocan_state *ec, int pos, short val)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DAHDI_ECHOCAN_PROCESS_TX
|
||||
static void echo_can_hpf_tx(struct dahdi_echocan_state *ec, short *tx, u32 size)
|
||||
{
|
||||
struct ec_pvt *pvt = dahdi_to_pvt(ec);
|
||||
u32 SampleNum;
|
||||
|
||||
for (SampleNum = 0; SampleNum < size; SampleNum++, tx++) {
|
||||
short iCleanSample;
|
||||
|
||||
iCleanSample = oslec_hpf_tx(pvt->oslec, *tx);
|
||||
*tx = iCleanSample;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int __init mod_init(void)
|
||||
{
|
||||
if (dahdi_register_echocan_factory(&my_factory)) {
|
||||
|
Loading…
Reference in New Issue
Block a user