Jörg Höhle : mmdevapi: Do not mix frames and bytes.

Alexandre Julliard julliard at winehq.org
Tue Aug 30 12:48:39 CDT 2011


Module: wine
Branch: master
Commit: abf5b64f4c1a5adfeb20ef3ffe6cd4c6e89ec3b3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=abf5b64f4c1a5adfeb20ef3ffe6cd4c6e89ec3b3

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Tue Aug  9 21:29:00 2011 +0200

mmdevapi: Do not mix frames and bytes.

---

 dlls/winealsa.drv/mmdevdrv.c |    8 ++++----
 dlls/wineoss.drv/mmdevdrv.c  |    8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
index ec75fec..24dbeef 100644
--- a/dlls/winealsa.drv/mmdevdrv.c
+++ b/dlls/winealsa.drv/mmdevdrv.c
@@ -1994,15 +1994,16 @@ static HRESULT WINAPI AudioRenderClient_GetBuffer(IAudioRenderClient *iface,
     return S_OK;
 }
 
-static void alsa_wrap_buffer(ACImpl *This, BYTE *buffer, UINT32 written_bytes)
+static void alsa_wrap_buffer(ACImpl *This, BYTE *buffer, UINT32 written_frames)
 {
     snd_pcm_uframes_t write_offs_frames =
         (This->lcl_offs_frames + This->held_frames) % This->bufsize_frames;
     UINT32 write_offs_bytes = write_offs_frames * This->fmt->nBlockAlign;
     snd_pcm_uframes_t chunk_frames = This->bufsize_frames - write_offs_frames;
     UINT32 chunk_bytes = chunk_frames * This->fmt->nBlockAlign;
+    UINT32 written_bytes = written_frames * This->fmt->nBlockAlign;
 
-    if(written_bytes < chunk_bytes){
+    if(written_bytes <= chunk_bytes){
         memcpy(This->local_buffer + write_offs_bytes, buffer, written_bytes);
     }else{
         memcpy(This->local_buffer + write_offs_bytes, buffer, chunk_bytes);
@@ -2015,7 +2016,6 @@ static HRESULT WINAPI AudioRenderClient_ReleaseBuffer(
         IAudioRenderClient *iface, UINT32 written_frames, DWORD flags)
 {
     ACImpl *This = impl_from_IAudioRenderClient(iface);
-    UINT32 written_bytes = written_frames * This->fmt->nBlockAlign;
     BYTE *buffer;
     HRESULT hr;
 
@@ -2048,7 +2048,7 @@ static HRESULT WINAPI AudioRenderClient_ReleaseBuffer(
 
     if(This->held_frames){
         if(This->buf_state == LOCKED_WRAPPED)
-            alsa_wrap_buffer(This, buffer, written_bytes);
+            alsa_wrap_buffer(This, buffer, written_frames);
 
         This->held_frames += written_frames;
     }else{
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c
index 0e44842..64d60fe 100644
--- a/dlls/wineoss.drv/mmdevdrv.c
+++ b/dlls/wineoss.drv/mmdevdrv.c
@@ -1625,15 +1625,16 @@ static HRESULT WINAPI AudioRenderClient_GetBuffer(IAudioRenderClient *iface,
     return S_OK;
 }
 
-static void oss_wrap_buffer(ACImpl *This, BYTE *buffer, UINT32 written_bytes)
+static void oss_wrap_buffer(ACImpl *This, BYTE *buffer, UINT32 written_frames)
 {
     UINT32 write_offs_frames =
         (This->lcl_offs_frames + This->held_frames) % This->bufsize_frames;
     UINT32 write_offs_bytes = write_offs_frames * This->fmt->nBlockAlign;
     UINT32 chunk_frames = This->bufsize_frames - write_offs_frames;
     UINT32 chunk_bytes = chunk_frames * This->fmt->nBlockAlign;
+    UINT32 written_bytes = written_frames * This->fmt->nBlockAlign;
 
-    if(written_bytes < chunk_bytes){
+    if(written_bytes <= chunk_bytes){
         memcpy(This->local_buffer + write_offs_bytes, buffer, written_bytes);
     }else{
         memcpy(This->local_buffer + write_offs_bytes, buffer, chunk_bytes);
@@ -1647,7 +1648,6 @@ static HRESULT WINAPI AudioRenderClient_ReleaseBuffer(
 {
     ACImpl *This = impl_from_IAudioRenderClient(iface);
     BYTE *buffer;
-    UINT32 written_bytes = written_frames * This->fmt->nBlockAlign;
 
     TRACE("(%p)->(%u, %x)\n", This, written_frames, flags);
 
@@ -1670,7 +1670,7 @@ static HRESULT WINAPI AudioRenderClient_ReleaseBuffer(
 
     if(This->held_frames){
         if(This->buf_state == LOCKED_WRAPPED)
-            oss_wrap_buffer(This, buffer, written_bytes);
+            oss_wrap_buffer(This, buffer, written_frames);
 
         This->held_frames += written_frames;
     }else{




More information about the wine-cvs mailing list