[dahdi-commits] sruffell: linux/trunk r9443 - /linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c
SVN commits to the DAHDI project
dahdi-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 dahdi-commits
mailing list