[PATCH] winealsa: Small mmdevapi fixes

Maarten Lankhorst m.b.lankhorst at gmail.com
Thu Jun 16 04:48:42 CDT 2011


Zero buffer, only write data if needed
---
 dlls/winealsa.drv/mmdevdrv.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
index 37e03a0..056f9f0 100644
--- a/dlls/winealsa.drv/mmdevdrv.c
+++ b/dlls/winealsa.drv/mmdevdrv.c
@@ -479,6 +479,10 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient *iface,
         hr = E_OUTOFMEMORY;
         goto exit;
     }
+    if (fmt->wBitsPerSample == 8)
+        memset(This->local_buffer, 128, This->bufsize_frames * fmt->nBlockAlign);
+    else
+        memset(This->local_buffer, 0, This->bufsize_frames * fmt->nBlockAlign);
 
     if((err = snd_pcm_sw_params_get_boundary(sw_params, &boundary)) < 0){
         WARN("Unable to get boundary: %d (%s)\n", err, snd_strerror(err));
@@ -1110,7 +1114,7 @@ static void CALLBACK alsa_push_buffer_data(void *user, BOOLEAN timer)
 
     EnterCriticalSection(&This->lock);
 
-    if(This->dataflow == eRender)
+    if(This->dataflow == eRender && This->held_frames)
         alsa_write_data(This);
     else if(This->dataflow == eCapture)
         alsa_read_data(This);
-- 
1.7.4.1




More information about the wine-patches mailing list