EXPORT void speex_echo_capture(SpeexEchoState *st, const spx_int16_t *rec, spx_int16_t *out)
{
int i;
/*speex_warning_int("capture with fill level ", st->play_buf_pos/st->frame_size);*/
st->play_buf_started = 1;
if (st->play_buf_pos>=st->frame_size)
{
#if 0
printf("%s(%d)\n",__FUNCTION__,__LINE__);
speex_echo_cancellation(st, rec, st->play_buf, out);
#endif
st->play_buf_pos -= st->frame_size;
for (i=0;i<st->play_buf_pos;i++)
st->play_buf[i] = st->play_buf[i+st->frame_size];
} else {
speex_warning("No playback frame available (your application is buggy and/or got xruns)");
if (st->play_buf_pos!=0)
{
speex_warning("internal playback buffer corruption?");
st->play_buf_pos = 0;
}
for (i=0;i<st->frame_size;i++)
out[i] = rec[i];
}
}
закомментировал функцию speex_echo_cancellation, теперь в наушниках я слышу то, что говорю в микрофон, а ну удалённом телефоне вообще ничего не слышно - это доказательство того, что echo cancelation по умолчанию работает?