Maarten Lankhorst : quartz: Silence the directsound buffer on starting.
Alexandre Julliard
julliard at winehq.org
Sat Mar 15 05:53:50 CDT 2008
Module: wine
Branch: master
Commit: 6d965b8fb6cbb892662e5324155e6c5b2efb430d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6d965b8fb6cbb892662e5324155e6c5b2efb430d
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Fri Mar 14 11:47:42 2008 -0700
quartz: Silence the directsound buffer on starting.
If the buffer is created and stopped, the contents of the buffer are
indeterminate, by zeroing it you won't get leftovers from last play.
---
dlls/quartz/dsoundrender.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index af9fb37..6c5d3f1 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -498,6 +498,15 @@ static HRESULT WINAPI DSoundRender_Run(IBaseFilter * iface, REFERENCE_TIME tStar
/* It's okay if there's no buffer yet. It'll start when it's created */
if (This->dsbuffer)
{
+ if (This->state == State_Stopped)
+ {
+ char *buf1;
+ DWORD size1;
+
+ IDirectSoundBuffer_Lock(This->dsbuffer, 0, 0, (void**)&buf1, &size1, NULL, NULL, DSBLOCK_ENTIREBUFFER);
+ memset(buf1, 0, size1);
+ IDirectSoundBuffer_Unlock(This->dsbuffer, buf1, size1, NULL, 0);
+ }
hr = IDirectSoundBuffer_Play(This->dsbuffer, 0, 0, DSBPLAY_LOOPING);
if (FAILED(hr))
ERR("Can't start playing! (%x)\n", hr);
More information about the wine-cvs
mailing list