[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Linphone-developers] Echo Canceler
From: |
Charles Eidsness |
Subject: |
Re: [Linphone-developers] Echo Canceler |
Date: |
Fri, 08 Oct 2004 10:59:33 -0400 |
User-agent: |
Mozilla Thunderbird 0.8 (Windows/20040913) |
Simon,
Thanks, and thank you for this excellent software. I particularly like
the mediastremaer framework. It's so simple and straight-forward it
didn't take me very long to figure out how to implement my own filter.
I had no "show-stopper" issues with a 2 input / 2 output filter but I do
get some strange errors logged to the terminal that I haven't had time
to take a look at. These errors don't seem to effect the call at all.
I get a bunch of these:
Debug: sleeping function called from invalid context at mm/slab.c:1989
in_atomic():1, irqs_disabled():1 .... followed by a long call trace
But this is probably just a result of the way I have my kernel / system
configured.
I get two "Opening soundcard" messages, i.e.:
Message:ms_filter_add_link: OssRead,0 -> EC,1
Message:ms_filter_add_link: EC,1 -> GSMEncoder,0
Message:ms_filter_add_link: GSMEncoder,0 -> RTPSend,0
Message:ms_filter_add_link: RTPRecv,0 -> GSMDecoder,0
Message:ms_filter_add_link: GSMDecoder,0 -> EC,0
Message:ms_filter_add_link: EC,0 -> OssWrite,0
Message:Opening sound card in capture mode with stereo=0,rate=8000,bits=16
Message:dsp blocksize is 512.
Message:Opening sound card in playback mode with stereo=0,rate=8000,bits=16
Message:Opening sound card in playback mode with stereo=0,rate=8000,bits=16
And it doesn't terminate the call very cleanly. I get a bunch of these:
msosswrite.c:148- assertionw->sndcard!=NULLfailed
msfilter.c:414- assertionf->finputs==0failed
msfilter.c:415- assertionf->foutputs==0failed
msfilter.c:414- assertionf->finputs==0failed
msfilter.c:414- assertionf->finputs==0failed
msfilter.c:415- assertionf->foutputs==0failed
As mentioned in my previous email I'm using a fairly unique system. I'm
running on an embedded MIPS processor using uclibc and using an ALSA
driver I wrote myself so these errors may not appear on a "normal"
system, or there may be different errors.
If you add a checkbox for this echo canceler make sure you mention it's
experimental. :)
I think the algorithm itself could still use some tweaking too. It will
behave in a different manner depending on the level of background noise
and so far I've only been testing it with a fixed level. I'll try to
improve it as I get more time but if there's anyone out there that is
interested in signal processing and wants to take a look at it that
would be really cool.
Cheers,
Charles
Simon MORLAT wrote:
Hello,
I've just had a look on your excellent work, thank you very much.
I saw that you implemented a 2-input 2-output MSFilter to achieve this,
this is actually exactly the right way... but I didn't think that the
mediastreamer was able to nearly correctly handle those kind of complex
graphs... Actually the scheduling algorithm I've implemented was first
designed to run simple linear graphs. You haven't experienced strange
things about that ?
Anyway as it works I will integrate it into linphone and add checkbutton
to enable/disable it. It may take some time, because the goal for now is
to stabilize the 1.0.0 release first.
Simon
Charles Eidsness wrote:
Hi All,
I've been working on an acoustic echo canceler for Linphone. I have
something that kind-of works for me and thought I'd post it in case
there's someone else out there interested. I think it just needs a
little more tuning, I hope to have it functional someday.
I've been using Linphone 0.12.1, and am using uClibc on an embedded
MIPS processor so there's a chance it may not work on another
platform. I've been trying to keep everything as fixed-point math
since there's no FPU on my processor but I did implement a couple
filters as floating point. (I'm using soft-float from gcc compiler)
Also, I borrowed liberally from the mark2 echo canceler which is part
of the Zaptel package for Asterisk so you can look at it as well if
you're super-keen.
I split my changes / additions into three patches to make them easier
to take a quick look at:
members.rogers.com/charles.eidsness/linphone.0.12.1-ec.source.patch
-- adds ec.c and ec.h to the mediastreamer
members.rogers.com/charles.eidsness/linphone.0.12.1-ec.msEC.patch
-- adds msEC.c, msEC.h and test_ec to the mediastreamer
members.rogers.com/charles.eidsness/linphone.0.12.1-ec.setup.patch
-- edits the mediastreamers Makefile.am, audiostream.c and
mediastream.h to add a echo canceler filter block in the audio stream
members.rogers.com/charles.eidsness/linphone.0.12.1-ec.patch
-- all three patches in one file
Cheers,
Charles
_______________________________________________
Linphone-developers mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/linphone-developers