Hello everybody.
I have the same problem like you. I use ARM microcontroller too.
Here is the list of all functions called by speex_echo_cancel until goes
into infinite loop:
speex_echo_cancel()
|
spx_fft
|
kiss_fftr
|
kiss_fft
|
kiss_fft_stride
|
kf_work
Function kf_work looks like:
static void kf_work(kiss_fft_cpx * Fout, const kiss_fft_cpx * f, const
size_t fstride, int in_stride, int * factors, const kiss_fft_cfg st)
{
kiss_fft_cpx * Fout_beg=Fout;
const int p=*factors++; // the radix
const int m=*factors++; // stage's fft length/p
const kiss_fft_cpx * Fout_end = Fout + p*m;
if(m==1)
{
do
{
*Fout = *f;
f += fstride*in_stride;
}
while(++Fout != Fout_end );
}
else
{
do
{
kf_work(Fout , f, fstride*p, in_stride, factors,st); // <----------
here this function calls itself and that's why goes infinite
f += fstride*in_stride;
}
while( (Fout += m) != Fout_end );
}
...
...
If anybody knows how to work around this problem please help.
Regards
Andre
_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now!
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/
Le jeudi 08 juin 2006 ? 18:55 +0200, Andrzej Fien a ?crit :> Hello everybody. > I have the same problem like you. I use ARM microcontroller too. > Here is the list of all functions called by speex_echo_cancel until goes > into infinite loop:...> else > { > do > { > kf_work(Fout , f, fstride*p, in_stride, factors,st); // <---------- > here this function calls itself and that's why goes infinite > f += fstride*in_stride; > } > while( (Fout += m) != Fout_end ); > } > ...This is quite surprising. Can you reproduce the problem using only testecho? What happens on a PC with exactly the same options? Is the infinite loop the do{} while; one above or is it an infinite recustion calling kf_work (which should eventually crash). Does the program eventually crashes or does it loop forever? Jean-Marc
> > Hello everybody. > > I have the same problem like you. I use ARM microcontroller too. > > Here is the list of all functions called by speex_echo_cancel until goes > > into infinite loop: >... > > else > > { > > do > > { > > kf_work(Fout , f, fstride*p, in_stride, factors,st); // ><---------- > > here this function calls itself and that's why goes infinite > > f += fstride*in_stride; > > } > > while( (Fout += m) != Fout_end ); > > } > > ... > >This is quite surprising. Can you reproduce the problem using only >testecho? What happens on a PC with exactly the same options? Is the >infinite loop the do{} while; one above or is it an infinite recustion >calling kf_work (which should eventually crash). Does the program >eventually crashes or does it loop forever? > > Jean-MarcHello, The infinite loop is made by calling kf_work endless. That of cource crashes the program. If you want I can give you my data which I use in test program. Regards Andre _________________________________________________________________ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
>Is that data-dependent (if so, I'd like to have that data)? I would >assume the behaviour is the same on all data. Have you been able to >reproduce it on a PC with testecho? > > Jean-MarcWhat is testecho ? Is it a file with 16bit voice samples ? Where is the file located ?