Ticket #395: Added configuration to control maximum PortAudio sound buffer latency, and change default sound backend back to WMME

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1486 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjmedia/include/pjmedia/config.h b/pjmedia/include/pjmedia/config.h
index 0cabe3b..f438f18 100644
--- a/pjmedia/include/pjmedia/config.h
+++ b/pjmedia/include/pjmedia/config.h
@@ -75,10 +75,18 @@
 /**
  * Specify whether we prefer to use DirectSound on Windows.
  *
- * Say yes!
+ * Default: 0
  */
 #ifndef PJMEDIA_PREFER_DIRECT_SOUND
-#   define PJMEDIA_PREFER_DIRECT_SOUND	    1
+#   define PJMEDIA_PREFER_DIRECT_SOUND	    0
+#endif
+
+
+/**
+ * Specify PortAudio maximum buffering latency, in milliseconds.
+ */
+#ifndef PJMEDIA_PASOUND_MAX_LATENCY
+#   define PJMEDIA_PASOUND_MAX_LATENCY	    60
 #endif
 
 
diff --git a/pjmedia/src/pjmedia/pasound.c b/pjmedia/src/pjmedia/pasound.c
index 1a5e819..5472d9a 100644
--- a/pjmedia/src/pjmedia/pasound.c
+++ b/pjmedia/src/pjmedia/pasound.c
@@ -28,6 +28,8 @@
 
 #define THIS_FILE	"pasound.c"
 
+#define MAX_LATENCY	(PJMEDIA_PASOUND_MAX_LATENCY / 1000.0)
+
 static int snd_init_count;
 
 static struct snd_mgr
@@ -441,6 +443,8 @@
     inputParam.hostApiSpecificStreamInfo = NULL;
     inputParam.sampleFormat = sampleFormat;
     inputParam.suggestedLatency = paDevInfo->defaultLowInputLatency;
+    if (inputParam.suggestedLatency > MAX_LATENCY)
+	inputParam.suggestedLatency = MAX_LATENCY;
 
     paHostApiInfo = Pa_GetHostApiInfo(paDevInfo->hostApi);
 
@@ -536,7 +540,9 @@
     outputParam.channelCount = channel_count;
     outputParam.hostApiSpecificStreamInfo = NULL;
     outputParam.sampleFormat = sampleFormat;
-    outputParam.suggestedLatency = 1.0 * samples_per_frame / clock_rate;;
+    outputParam.suggestedLatency = paDevInfo->defaultLowOutputLatency;
+    if (outputParam.suggestedLatency > MAX_LATENCY)
+	outputParam.suggestedLatency = MAX_LATENCY;
 
     paHostApiInfo = Pa_GetHostApiInfo(paDevInfo->hostApi);
 
@@ -658,6 +664,8 @@
     inputParam.hostApiSpecificStreamInfo = NULL;
     inputParam.sampleFormat = sampleFormat;
     inputParam.suggestedLatency = paRecDevInfo->defaultLowInputLatency;
+    if (inputParam.suggestedLatency > MAX_LATENCY)
+	inputParam.suggestedLatency = MAX_LATENCY;
 
     paRecHostApiInfo = Pa_GetHostApiInfo(paRecDevInfo->hostApi);
 
@@ -667,6 +675,8 @@
     outputParam.hostApiSpecificStreamInfo = NULL;
     outputParam.sampleFormat = sampleFormat;
     outputParam.suggestedLatency = paPlayDevInfo->defaultLowOutputLatency;
+    if (outputParam.suggestedLatency > MAX_LATENCY)
+	outputParam.suggestedLatency = MAX_LATENCY;
 
     paPlayHostApiInfo = Pa_GetHostApiInfo(paPlayDevInfo->hostApi);