Jörg Höhle : winealsa: Pulse knows handle_underrun only since 2010-07-09.
Alexandre Julliard
julliard at winehq.org
Fri Aug 26 10:40:53 CDT 2011
Module: wine
Branch: master
Commit: 8129b1847a13be248098b8d8ec773f8bdf821df6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8129b1847a13be248098b8d8ec773f8bdf821df6
Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date: Tue Aug 9 21:19:51 2011 +0200
winealsa: Pulse knows handle_underrun only since 2010-07-09.
---
dlls/winealsa.drv/mmdevdrv.c | 35 ++++++++++++++++-------------------
1 files changed, 16 insertions(+), 19 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
index 01fe4fd..ec75fec 100644
--- a/dlls/winealsa.drv/mmdevdrv.c
+++ b/dlls/winealsa.drv/mmdevdrv.c
@@ -497,6 +497,7 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(const char *key, IMMDevice *dev,
int err;
snd_pcm_stream_t stream;
snd_config_t *lconf;
+ static int handle_underrun = 1;
TRACE("\"%s\" %p %d %p\n", key, dev, dataflow, out);
@@ -520,27 +521,23 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(const char *key, IMMDevice *dev,
return E_UNEXPECTED;
}
- lconf = make_handle_underrun_config(key);
-
This->dataflow = dataflow;
- if(lconf){
- if((err = snd_pcm_open_lconf(&This->pcm_handle, key, stream,
- SND_PCM_NONBLOCK, lconf)) < 0){
- snd_config_delete(lconf);
- HeapFree(GetProcessHeap(), 0, This);
- WARN("Unable to open PCM \"%s\": %d (%s)\n", key, err,
- snd_strerror(err));
- return E_FAIL;
- }
+ if(handle_underrun && ((lconf = make_handle_underrun_config(key)))){
+ err = snd_pcm_open_lconf(&This->pcm_handle, key, stream, SND_PCM_NONBLOCK, lconf);
+ TRACE("Opening PCM device \"%s\" with handle_underrun: %d\n", key, err);
snd_config_delete(lconf);
- }else{
- if((err = snd_pcm_open(&This->pcm_handle, key, stream,
- SND_PCM_NONBLOCK)) < 0){
- HeapFree(GetProcessHeap(), 0, This);
- WARN("Unable to open PCM \"%s\": %d (%s)\n", key, err,
- snd_strerror(err));
- return E_FAIL;
- }
+ /* Pulse <= 2010 returns EINVAL, it does not know handle_underrun. */
+ if(err == -EINVAL)
+ handle_underrun = 0;
+ }else
+ err = -EINVAL;
+ if(err == -EINVAL){
+ err = snd_pcm_open(&This->pcm_handle, key, stream, SND_PCM_NONBLOCK);
+ }
+ if(err < 0){
+ HeapFree(GetProcessHeap(), 0, This);
+ WARN("Unable to open PCM \"%s\": %d (%s)\n", key, err, snd_strerror(err));
+ return E_FAIL;
}
This->hw_params = HeapAlloc(GetProcessHeap(), 0,
More information about the wine-cvs
mailing list