diff options
author | Benny Prijono <bennylp@teluu.com> | 2009-07-18 09:21:09 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2009-07-18 09:21:09 +0000 |
commit | b7d6ba9e3f1343cc42ecee41c28257171d350ebe (patch) | |
tree | a247427bdb407f1ef4cac27a0e44d12b7adf3938 /pjmedia/src/pjmedia-audiodev | |
parent | cc31ff27079508923376bc73c3d6bcad6cdcd1f2 (diff) |
Misc (#915): added WAVE_FORMAT_DIRECT flag when opening waveIn/Out in WMME audio dev, hopefully it can reduce latency
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2841 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-audiodev')
-rw-r--r-- | pjmedia/src/pjmedia-audiodev/wmme_dev.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/pjmedia/src/pjmedia-audiodev/wmme_dev.c b/pjmedia/src/pjmedia-audiodev/wmme_dev.c index 02448939..5b8461c6 100644 --- a/pjmedia/src/pjmedia-audiodev/wmme_dev.c +++ b/pjmedia/src/pjmedia-audiodev/wmme_dev.c @@ -515,6 +515,7 @@ static pj_status_t init_player_stream( struct wmme_factory *wf, 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 @@ static pj_status_t init_player_stream( struct wmme_factory *wf, (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 @@ static pj_status_t init_capture_stream( struct wmme_factory *wf, { 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 @@ static pj_status_t init_capture_stream( struct wmme_factory *wf, (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); } |