Misc (#915): added WAVE_FORMAT_DIRECT flag when opening waveIn/Out in WMME audio dev, hopefully it can reduce latency


git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2841 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjmedia/src/pjmedia-audiodev/wmme_dev.c b/pjmedia/src/pjmedia-audiodev/wmme_dev.c
index 0244893..5b8461c 100644
--- a/pjmedia/src/pjmedia-audiodev/wmme_dev.c
+++ b/pjmedia/src/pjmedia-audiodev/wmme_dev.c
@@ -515,6 +515,7 @@
     MMRESULT mr;
     WAVEFORMATEX wfx; 
     unsigned i, ptime;
+    DWORD flag;
     pj_status_t status;
 
     PJ_ASSERT_RETURN(prm->play_id < (int)wf->dev_count, PJ_EINVAL);
@@ -537,12 +538,16 @@
 	    (prm->clock_rate * prm->channel_count);
     parent->bytes_per_frame = wfx.nAvgBytesPerSec * ptime / 1000;
 
+    flag = CALLBACK_EVENT;
+    if (prm->ext_fmt.id == PJMEDIA_FORMAT_L16)
+	flag |= WAVE_FORMAT_DIRECT;
+
     /*
      * Open wave device.
      */
     mr = waveOutOpen(&wmme_strm->hWave.Out, 
 		     wf->dev_info[prm->play_id].deviceId,
-		     &wfx, (DWORD)wmme_strm->hEvent, 0, CALLBACK_EVENT);
+		     &wfx, (DWORD)wmme_strm->hEvent, 0, flag);
     if (mr != MMSYSERR_NOERROR) {
 	return PJMEDIA_AUDIODEV_ERRNO_FROM_WMME_OUT(mr);
     }
@@ -603,6 +608,7 @@
 {
     MMRESULT mr;
     WAVEFORMATEX wfx; 
+    DWORD flag;
     unsigned i, ptime;
 
     PJ_ASSERT_RETURN(prm->rec_id < (int)wf->dev_count, PJ_EINVAL);
@@ -623,12 +629,16 @@
 	    (prm->clock_rate * prm->channel_count);
     parent->bytes_per_frame = wfx.nAvgBytesPerSec * ptime / 1000;
 
+    flag = CALLBACK_EVENT;
+    if (prm->ext_fmt.id == PJMEDIA_FORMAT_L16)
+	flag |= WAVE_FORMAT_DIRECT;
+
     /*
      * Open wave device.
      */
     mr = waveInOpen(&wmme_strm->hWave.In, 
 		    wf->dev_info[prm->rec_id].deviceId, 
-		    &wfx, (DWORD)wmme_strm->hEvent, 0, CALLBACK_EVENT);
+		    &wfx, (DWORD)wmme_strm->hEvent, 0, flag);
     if (mr != MMSYSERR_NOERROR) {
 	return PJMEDIA_AUDIODEV_ERRNO_FROM_WMME_IN(mr);
     }