[svn-commits] sruffell: linux/trunk r9443 - /linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Oct 20 07:23:15 CDT 2010


Author: sruffell
Date: Wed Oct 20 07:23:11 2010
New Revision: 9443

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=9443
Log:
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 at digium.com>
Acked-by: Kinsey Moore <kmoore at digium.com>
Acked-by: Russ Meyerriecks <rmeyerriecks at digium.com>

Modified:
    linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c

Modified: linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c?view=diff&rev=9443&r1=9442&r2=9443
==============================================================================
--- linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c (original)
+++ linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c Wed Oct 20 07:23:11 2010
@@ -43,6 +43,10 @@
 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 @@
 	.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 @@
 	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)) {




More information about the svn-commits mailing list