diff --git a/dlls/dsound/primary.c b/dlls/dsound/primary.c index 39c097a0e4b..d8d7dc61395 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 2e8d1f39efe..2879d2e4312 100644 --- a/dlls/winealsa.drv/dsoutput.c +++ b/dlls/winealsa.drv/dsoutput.c @@ -596,7 +596,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 db48167681e..bb7f4c60316 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