Maarten Lankhorst : quartz: Fill up sound buffer while in paused state.
Alexandre Julliard
julliard at winehq.org
Wed Dec 1 12:56:47 CST 2010
Module: wine
Branch: master
Commit: e591700177ce80b0a0598a9a756111c5342ae554
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e591700177ce80b0a0598a9a756111c5342ae554
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Wed Dec 1 13:14:59 2010 +0100
quartz: Fill up sound buffer while in paused state.
---
dlls/quartz/dsoundrender.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index c0591ba..a26bd12 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -146,7 +146,9 @@ static HRESULT DSoundRender_GetWritePos(DSoundRenderImpl *This, DWORD *ret_write
DSoundRender_UpdatePositions(This, &writepos, &min_writepos);
playpos = This->last_playpos;
- if (This->filter.pClock == (IReferenceClock*)&This->IReferenceClock_vtbl) {
+ if (This->filter.state == State_Paused) {
+ write_at = cur = -1;
+ } else if (This->filter.pClock == (IReferenceClock*)&This->IReferenceClock_vtbl) {
max_lag = min_lag;
cur = This->play_time + time_from_pos(This, playpos);
cur -= This->filter.rtStreamStart;
@@ -226,12 +228,10 @@ static HRESULT DSoundRender_SendSampleData(DSoundRenderImpl* This, REFERENCE_TIM
DWORD writepos, skip = 0, free, size1, size2, ret;
BYTE *buf1, *buf2;
- if (This->filter.state == State_Running)
- hr = DSoundRender_GetWritePos(This, &writepos, tStart, &free, &skip);
- else
- hr = S_FALSE;
+ hr = DSoundRender_GetWritePos(This, &writepos, tStart, &free, &skip);
if (hr != S_OK) {
+ SetEvent(This->state_change);
This->in_loop = 1;
LeaveCriticalSection(&This->filter.csFilter);
ret = WaitForSingleObject(This->blocked, 10);
@@ -251,7 +251,7 @@ static HRESULT DSoundRender_SendSampleData(DSoundRenderImpl* This, REFERENCE_TIM
if (skip)
FIXME("Sample dropped %u of %u bytes\n", skip, size);
if (skip >= size)
- return S_OK;
+ break;
data += skip;
size -= skip;
@@ -362,7 +362,6 @@ static HRESULT WINAPI DSoundRender_Receive(BaseInputPin *pin, IMediaSample * pSa
cbSrcStream = IMediaSample_GetActualDataLength(pSample);
TRACE("Sample data ptr = %p, size = %d\n", pbSrcStream, cbSrcStream);
- SetEvent(This->state_change);
hr = DSoundRender_SendSampleData(This, tStart, tStop, pbSrcStream, cbSrcStream);
LeaveCriticalSection(&This->filter.csFilter);
return hr;
More information about the wine-cvs
mailing list