Attempt to reduce burst in wmme_dev by limiting the number of AddBuffer calls. It does not seem to affect the burst much as it seem to have come from the device/driver itself

git-svn-id: https://svn.pjsip.org/repos/pjproject/branches/projects/aps-direct@2495 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjmedia/src/pjmedia-audiodev/wmme_dev.c b/pjmedia/src/pjmedia-audiodev/wmme_dev.c
index 436c850..aafce59 100644
--- a/pjmedia/src/pjmedia-audiodev/wmme_dev.c
+++ b/pjmedia/src/pjmedia-audiodev/wmme_dev.c
@@ -673,6 +673,7 @@
     unsigned eventCount;
     pj_status_t status = PJ_SUCCESS;
     static unsigned rec_cnt, play_cnt;
+    enum { MAX_BURST = 1 };
 
     rec_cnt = play_cnt = 0;
 
@@ -706,7 +707,7 @@
 	DWORD rc;
 	pjmedia_dir signalled_dir;
 
-	/* Swap */
+	/* Swap hWaveIn and hWaveOut to get equal opportunity for both */
 	if (eventCount==3) {
 	    HANDLE hTemp = events[2];
 	    events[2] = events[1];
@@ -739,6 +740,7 @@
 	if (signalled_dir == PJMEDIA_DIR_PLAYBACK)
 	{
 	    struct wmme_channel *wmme_strm = &strm->play_strm;
+	    unsigned burst;
 
 	    status = PJ_SUCCESS;
 
@@ -747,7 +749,9 @@
 	     * playback buffer.
 	     */
 
-	    while (wmme_strm->WaveHdr[wmme_strm->dwBufIdx].dwFlags & WHDR_DONE)
+	    for (burst=0; burst<MAX_BURST &&
+		 (wmme_strm->WaveHdr[wmme_strm->dwBufIdx].dwFlags & WHDR_DONE);
+	         ++burst)
 	    {
 		void *buffer = wmme_strm->WaveHdr[wmme_strm->dwBufIdx].lpData;
 		pjmedia_frame pcm_frame, *frame;
@@ -828,11 +832,12 @@
 		    wmme_strm->dwBufIdx = 0;
 		wmme_strm->timestamp.u64 += strm->param.samples_per_frame /
 					    strm->param.channel_count;
-	    }
+	    } /* for */
 	}
 	else
 	{
 	    struct wmme_channel *wmme_strm = &strm->rec_strm;
+	    unsigned burst;
 	    MMRESULT mr = MMSYSERR_NOERROR;
 	    status = PJ_SUCCESS;
 
@@ -864,7 +869,9 @@
 	    }
 #endif
 
-	    while (wmme_strm->WaveHdr[wmme_strm->dwBufIdx].dwFlags & WHDR_DONE)
+	    for (burst=0; burst<MAX_BURST &&
+		 (wmme_strm->WaveHdr[wmme_strm->dwBufIdx].dwFlags & WHDR_DONE);
+	         ++burst)
 	    {
 		char* buffer = (char*)
 			       wmme_strm->WaveHdr[wmme_strm->dwBufIdx].lpData;
@@ -934,7 +941,7 @@
 		    wmme_strm->dwBufIdx = 0;
 		wmme_strm->timestamp.u64 += strm->param.samples_per_frame /
 					    strm->param.channel_count;
-	    }
+	    } /* for */
 	}
     }