Module: wine Branch: master Commit: 9c469e1a9487d81186642282de89048fc51c0864 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9c469e1a9487d81186642282de...
Author: Maarten Lankhorst m.b.lankhorst@gmail.com Date: Sun Aug 19 23:52:19 2007 +0200
dsound: Handle failing of IDsDriver_CreateSoundBuffer better.
---
dlls/dsound/primary.c | 15 +++++++++++++-- dlls/wineoss.drv/dsrender.c | 4 +--- 2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/dlls/dsound/primary.c b/dlls/dsound/primary.c index 3e75275..4063266 100644 --- a/dlls/dsound/primary.c +++ b/dlls/dsound/primary.c @@ -224,8 +224,19 @@ HRESULT DSOUND_PrimaryCreate(DirectSoundDevice *device) &(device->buflen),&(device->buffer), (LPVOID*)&(device->hwbuf)); if (err != DS_OK) { - WARN("IDsDriver_CreateSoundBuffer failed\n"); - return err; + WARN("IDsDriver_CreateSoundBuffer failed, falling back to waveout\n"); + /* Wine-only: close wine directsound driver, then reopen without WAVE_DIRECTSOUND */ + device->drvdesc.dwFlags = DSDDESC_DOMMSYSTEMOPEN | DSDDESC_DOMMSYSTEMSETFORMAT; + waveOutClose(device->hwo); + IDsDriver_Release(device->driver); + device->driver = device->buffer = NULL; + device->hwo = 0; + err = mmErr(waveOutOpen(&(device->hwo), device->drvdesc.dnDevNode, device->pwfx, (DWORD_PTR)DSOUND_callback, (DWORD)device, CALLBACK_FUNCTION)); + if (err != DS_OK) + { + WARN("Falling back to waveout failed too! Giving up\n"); + return err; + } } }
diff --git a/dlls/wineoss.drv/dsrender.c b/dlls/wineoss.drv/dsrender.c index aa9d373..27672fb 100644 --- a/dlls/wineoss.drv/dsrender.c +++ b/dlls/wineoss.drv/dsrender.c @@ -344,9 +344,7 @@ static HRESULT DSDB_MapBuffer(IDsDriverBufferImpl *dsdb) dsdb->mapping = mmap(NULL, dsdb->maplen, PROT_WRITE, MAP_SHARED, dsdb->fd, 0); if (dsdb->mapping == (LPBYTE)-1) { - ERR("Could not map sound device for direct access (%s)\n", strerror(errno)); - ERR("Please run winecfg, open "Audio" page and set\n" - ""Hardware Acceleration" to "Emulation".\n"); + WARN("Could not map sound device for direct access (%s)\n", strerror(errno)); return DSERR_GENERIC; } TRACE("The sound device has been mapped for direct access at %p, size=%d\n", dsdb->mapping, dsdb->maplen);