Maarten Lankhorst : quartz: Reset stream time when paused after seeking.

Alexandre Julliard julliard at winehq.org
Wed Nov 10 11:09:38 CST 2010


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

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Tue Nov  9 23:42:43 2010 +0100

quartz: Reset stream time when paused after seeking.

---

 dlls/quartz/filtergraph.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c
index f8d2ff2..eeafe32 100644
--- a/dlls/quartz/filtergraph.c
+++ b/dlls/quartz/filtergraph.c
@@ -1937,8 +1937,10 @@ static HRESULT WINAPI MediaControl_Run(IMediaControl *iface) {
         IReferenceClock_GetTime(This->refClock, &now);
         if (This->state == State_Stopped)
             This->start_time = now + 500000;
-        else
+        else if (This->pause_time >= 0)
             This->start_time += now - This->pause_time;
+        else
+            This->start_time = now;
     }
     else This->start_time = 0;
 
@@ -1957,8 +1959,10 @@ static HRESULT WINAPI MediaControl_Pause(IMediaControl *iface) {
     if (This->state == State_Paused)
         goto out;
 
-    if (This->state == State_Running && This->refClock)
+    if (This->state == State_Running && This->refClock && This->start_time >= 0)
         IReferenceClock_GetTime(This->refClock, &This->pause_time);
+    else
+        This->pause_time = -1;
 
     SendFilterMessage(iface, SendPause, 0);
     This->state = State_Paused;
@@ -2433,10 +2437,10 @@ static HRESULT WINAPI MediaSeeking_SetPositions(IMediaSeeking *iface,
     args.stopflags = dwStopFlags;
     hr = all_renderers_seek(This, found_setposition, (DWORD_PTR)&args);
 
-    if (This->refClock && ((dwCurrentFlags & 0x7) != AM_SEEKING_NoPositioning))
-    {
-        /* Update start time, prevents weird jumps */
-        IReferenceClock_GetTime(This->refClock, &This->start_time);
+    if ((dwCurrentFlags & 0x7) != AM_SEEKING_NoPositioning) {
+        if (This->state == State_Running)
+            FIXME("Seeking while graph is running is not properly supported!\n");
+        This->pause_time = This->start_time = -1;
     }
     LeaveCriticalSection(&This->cs);
 




More information about the wine-cvs mailing list