File portaudio-echocancel.diff of Package kiax
Index: iaxclient/lib/audio_portaudio.c
===================================================================
--- iaxclient.orig/lib/audio_portaudio.c
+++ iaxclient/lib/audio_portaudio.c
@@ -356,8 +356,25 @@ static void iaxc_echo_can(short *inputBu
return;
}
+ if (!outputBuffer) {
+ static int errmsg = 0;
+ if (!errmsg) {
+ printf("No echo cancellation due to outputBuffer=NULL\n");
+ fflush(stdout);
+ ++errmsg;
+ }
+ return;
+ } else {
+ static int errmsg = 0;
+ if (!errmsg) {
+ printf("Trying echo cancellation :-)\n");
+ fflush(stdout);
+ ++errmsg;
+ }
+ }
+
/* we want echo cancellation */
if(!ec) {
RingBuffer_Init(&outRing, EC_RING_SZ, &outRingBuf);
@@ -558,11 +575,15 @@ static int pa_open(int single, int inMon
* */
static int pa_openstreams (struct iaxc_audio_driver *d ) {
int err;
#ifdef LINUX
- err = pa_open(0, 1, 1) && /* two stream mono */
- pa_open(1, 1, 1) && /* one stream mono */
- pa_open(0, 0, 0); /* two stream stereo */
+ err =
+ pa_open(0, 1, 1) && /* two stream mono */
+ pa_open(0, 1, 0) && /* two stream mono in stereo out */
+ pa_open(0, 0, 0) && /* two stream stereo */
+ pa_open(1, 1, 1) && /* one stream mono */
+ pa_open(1, 1, 0) && /* one stream mono in stereo out */
+ pa_open(1, 0, 0); /* one stream stereo */
#else
#ifdef MACOSX
err = pa_open(1, 0, 0) && /* one stream stereo */
pa_open(1, 1, 0) && /* one stream mono in stereo out */