From 10c51a80f03bd541dc391e41355ee13307d40580 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Tue, 9 Nov 2010 23:42:43 +0100 Subject: [PATCH] quartz: Reset stream time when paused after seeking. --- dlls/quartz/filtergraph.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index f8d2ff22990..eeafe32d59e 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);