[PATCH 2/3] winealsa.drv: Make directsound notice underruns

Maarten Lankhorst (none) mlankhorst at patser.
Tue Sep 22 12:35:57 CDT 2009


---
 dlls/winealsa.drv/dsoutput.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/dlls/winealsa.drv/dsoutput.c b/dlls/winealsa.drv/dsoutput.c
index 9d63475..e5c7d4d 100644
--- a/dlls/winealsa.drv/dsoutput.c
+++ b/dlls/winealsa.drv/dsoutput.c
@@ -405,10 +405,15 @@ static HRESULT WINAPI IDsDriverBufferImpl_Unlock(PIDSDRIVERBUFFER iface,
                 snd_pcm_prepare(This->pcm);
                 ret = snd_pcm_writei(This->pcm, pvAudio1, writelen);
                 snd_pcm_start(This->pcm);
+
+                /* Advance mmap pointer a little to make dsound notice the underrun and respond to it */
+                This->mmap_pos += This->mmap_commitahead + writelen;
+                This->mmap_pos %= This->mmap_buflen_frames;
             }
+            else
+                This->mmap_pos += writelen;
             if (ret < 0)
                 WARN("Committing data: %d / %s (%p %ld)\n", ret, snd_strerror(ret), pvAudio1, writelen);
-            This->mmap_pos += writelen;
         }
 
         if (This->mmap_pos == This->mmap_buflen_frames)
-- 
1.6.3.3


--------------010907040606020403060501--



More information about the wine-patches mailing list