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