Maarten Lankhorst : Revert "quartz: Fill up sound buffer while in paused state.".

Alexandre Julliard julliard at winehq.org
Thu Dec 2 12:23:56 CST 2010


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

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Wed Dec  1 23:17:28 2010 +0100

Revert "quartz: Fill up sound buffer while in paused state.".

This reverts commit e591700177ce80b0a0598a9a756111c5342ae554.
It's not fixing the real issue, filling up buffer while paused is
actually capable of producing quite a few headaches to get it working
right.

---

 dlls/quartz/dsoundrender.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index a26bd12..c0591ba 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -146,9 +146,7 @@ static HRESULT DSoundRender_GetWritePos(DSoundRenderImpl *This, DWORD *ret_write
 
     DSoundRender_UpdatePositions(This, &writepos, &min_writepos);
     playpos = This->last_playpos;
-    if (This->filter.state == State_Paused) {
-        write_at = cur = -1;
-    } else if (This->filter.pClock == (IReferenceClock*)&This->IReferenceClock_vtbl) {
+    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;
@@ -228,10 +226,12 @@ static HRESULT DSoundRender_SendSampleData(DSoundRenderImpl* This, REFERENCE_TIM
         DWORD writepos, skip = 0, free, size1, size2, ret;
         BYTE *buf1, *buf2;
 
-        hr = DSoundRender_GetWritePos(This, &writepos, tStart, &free, &skip);
+        if (This->filter.state == State_Running)
+            hr = DSoundRender_GetWritePos(This, &writepos, tStart, &free, &skip);
+        else
+            hr = S_FALSE;
 
         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)
-            break;
+            return S_OK;
         data += skip;
         size -= skip;
 
@@ -362,6 +362,7 @@ 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