dsound/winealsa: Remove writelead for alsa directsound

Maarten Lankhorst m.b.lankhorst at gmail.com
Wed Jun 27 16:43:45 CDT 2007


Due to the way alsa works it already has a huge writelead for mmap that
is guaranteed to be at least 10 ms, adding dsound's on top of it is
completely unwanted, so set a flag that it's not needed.
-------------- next part --------------
>From 91b880db26aa322dcb201eb3abc88c03f35e3ea8 Mon Sep 17 00:00:00 2001
From: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Sat, 23 Jun 2007 20:40:35 +0200
Subject: [PATCH] dsound/winealsa: Remove writelead for alsa driver

---
 dlls/dsound/primary.c        |    5 ++++-
 dlls/winealsa.drv/dsoutput.c |    2 +-
 include/dsdriver.h           |    1 +
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/dlls/dsound/primary.c b/dlls/dsound/primary.c
index 39c097a..d8d7dc6 100644
--- a/dlls/dsound/primary.c
+++ b/dlls/dsound/primary.c
@@ -64,8 +64,11 @@ static void DSOUND_RecalcPrimary(DirectSoundDevice *device)
 		device->fraglen = fraglen;
 		TRACE("fraglen=%d\n", device->fraglen);
 	}
+	if (device->hwbuf && device->drvdesc.dwFlags & DSDDESC_DONTNEEDWRITELEAD)
+		device->writelead = 0;
+	else
 	/* calculate the 10ms write lead */
-	device->writelead = (device->pwfx->nSamplesPerSec / 100) * nBlockAlign;
+		device->writelead = (device->pwfx->nSamplesPerSec / 100) * nBlockAlign;
 }
 
 static HRESULT DSOUND_PrimaryOpen(DirectSoundDevice *device)
diff --git a/dlls/winealsa.drv/dsoutput.c b/dlls/winealsa.drv/dsoutput.c
index e4c7d3f..2d14a2c 100644
--- a/dlls/winealsa.drv/dsoutput.c
+++ b/dlls/winealsa.drv/dsoutput.c
@@ -575,7 +575,7 @@ static HRESULT WINAPI IDsDriverImpl_GetDriverDesc(PIDSDRIVER iface, PDSDRIVERDES
     IDsDriverImpl *This = (IDsDriverImpl *)iface;
     TRACE("(%p,%p)\n",iface,pDesc);
     memcpy(pDesc, &(WOutDev[This->wDevID].ds_desc), sizeof(DSDRIVERDESC));
-    pDesc->dwFlags		= DSDDESC_DONTNEEDPRIMARYLOCK | DSDDESC_DONTNEEDSECONDARYLOCK;
+    pDesc->dwFlags		= DSDDESC_DONTNEEDPRIMARYLOCK | DSDDESC_DONTNEEDSECONDARYLOCK | DSDDESC_DONTNEEDWRITELEAD;
     pDesc->dnDevNode		= WOutDev[This->wDevID].waveDesc.dnDevNode;
     pDesc->wVxdId		= 0;
     pDesc->wReserved		= 0;
diff --git a/include/dsdriver.h b/include/dsdriver.h
index db48167..bb7f4c6 100644
--- a/include/dsdriver.h
+++ b/include/dsdriver.h
@@ -52,6 +52,7 @@ typedef struct IDsCaptureDriverBuffer *PIDSCDRIVERBUFFER;
 #define DSDDESC_USESYSTEMMEMORY		0x00000004
 #define DSDDESC_DONTNEEDPRIMARYLOCK	0x00000008
 #define DSDDESC_DONTNEEDSECONDARYLOCK	0x00000010
+#define DSDDESC_DONTNEEDWRITELEAD	0x00000020
 
 #define DSDHEAP_NOHEAP			0
 #define DSDHEAP_CREATEHEAP		1
-- 
1.4.4.2



More information about the wine-patches mailing list