Andrew Eikum : wineoss.drv: Resolve some diff between winealsa and wineoss.
Alexandre Julliard
julliard at winehq.org
Tue May 22 14:21:30 CDT 2012
Module: wine
Branch: master
Commit: e5551393bd086dbdba1c15ad7e95e4154d1726df
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e5551393bd086dbdba1c15ad7e95e4154d1726df
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Tue May 22 13:11:09 2012 -0500
wineoss.drv: Resolve some diff between winealsa and wineoss.
---
dlls/wineoss.drv/mmdevdrv.c | 26 ++++++++++++++------------
1 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c
index c8b12a3..62ae7ca 100644
--- a/dlls/wineoss.drv/mmdevdrv.c
+++ b/dlls/wineoss.drv/mmdevdrv.c
@@ -1571,12 +1571,12 @@ static HRESULT WINAPI AudioClient_Reset(IAudioClient *iface)
if(This->dataflow == eRender){
This->written_frames = 0;
+ This->last_pos_frames = 0;
}else{
This->written_frames += This->held_frames;
}
- This->lcl_offs_frames = 0;
This->held_frames = 0;
- This->last_pos_frames = 0;
+ This->lcl_offs_frames = 0;
LeaveCriticalSection(&This->lock);
@@ -1752,8 +1752,7 @@ static HRESULT WINAPI AudioRenderClient_GetBuffer(IAudioRenderClient *iface,
UINT32 frames, BYTE **data)
{
ACImpl *This = impl_from_IAudioRenderClient(iface);
- UINT32 pad, write_pos;
- HRESULT hr;
+ UINT32 write_pos;
TRACE("(%p)->(%u, %p)\n", This, frames, data);
@@ -1774,13 +1773,7 @@ static HRESULT WINAPI AudioRenderClient_GetBuffer(IAudioRenderClient *iface,
return S_OK;
}
- hr = IAudioClient_GetCurrentPadding(&This->IAudioClient_iface, &pad);
- if(FAILED(hr)){
- LeaveCriticalSection(&This->lock);
- return hr;
- }
-
- if(pad + frames > This->bufsize_frames){
+ if(This->held_frames + frames > This->bufsize_frames){
LeaveCriticalSection(&This->lock);
return AUDCLNT_E_BUFFER_TOO_LARGE;
}
@@ -2029,7 +2022,16 @@ static HRESULT WINAPI AudioCaptureClient_GetNextPacketSize(
TRACE("(%p)->(%p)\n", This, frames);
- return AudioClient_GetCurrentPadding(&This->IAudioClient_iface, frames);
+ if(!frames)
+ return E_POINTER;
+
+ EnterCriticalSection(&This->lock);
+
+ *frames = This->held_frames < This->period_frames ? 0 : This->period_frames;
+
+ LeaveCriticalSection(&This->lock);
+
+ return S_OK;
}
static const IAudioCaptureClientVtbl AudioCaptureClient_Vtbl =
More information about the wine-cvs
mailing list