[PATCH 5/5] strmbase: Move tracking of the stream start time to the renderer.

Zebediah Figura z.figura12 at gmail.com
Wed Oct 2 22:01:10 CDT 2019


Only renderers should ever need to care about this.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/quartz/dsoundrender.c      |  4 ++--
 dlls/strmbase/renderer.c        | 10 +++++-----
 dlls/strmbase/transform.c       |  3 ---
 dlls/winegstreamer/gstdemux.c   |  5 -----
 dlls/wineqtdecoder/qtsplitter.c |  1 -
 include/wine/strmbase.h         |  2 +-
 6 files changed, 8 insertions(+), 17 deletions(-)

diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index b6eb7ba2587..fd0ff45d9d2 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -158,10 +158,10 @@ static HRESULT DSoundRender_GetWritePos(DSoundRenderImpl *This, DWORD *ret_write
     if (This->renderer.filter.pClock == &This->IReferenceClock_iface) {
         max_lag = min_lag;
         cur = This->play_time + time_from_pos(This, playpos);
-        cur -= This->renderer.filter.rtStreamStart;
+        cur -= This->renderer.stream_start;
     } else if (This->renderer.filter.pClock) {
         IReferenceClock_GetTime(This->renderer.filter.pClock, &cur);
-        cur -= This->renderer.filter.rtStreamStart;
+        cur -= This->renderer.stream_start;
     } else
         write_at = -1;
 
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index 25534154e95..7d8420e73c1 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -363,11 +363,11 @@ HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSamp
 
             IReferenceClock_GetTime(This->filter.pClock, &now);
 
-            if (now - This->filter.rtStreamStart - start <= -10000)
+            if (now - This->stream_start - start <= -10000)
             {
                 HANDLE handles[2] = {This->advise_event, This->flush_event};
 
-                IReferenceClock_AdviseTime(This->filter.pClock, This->filter.rtStreamStart,
+                IReferenceClock_AdviseTime(This->filter.pClock, This->stream_start,
                         start, (HEVENT)This->advise_event, &cookie);
 
                 LeaveCriticalSection(&This->csRenderLock);
@@ -429,7 +429,7 @@ HRESULT WINAPI BaseRendererImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart)
     TRACE("(%p)->(%s)\n", This, wine_dbgstr_longlong(tStart));
 
     EnterCriticalSection(&This->csRenderLock);
-    This->filter.rtStreamStart = tStart;
+    This->stream_start = tStart;
     if (This->filter.state == State_Running)
         goto out;
 
@@ -440,7 +440,7 @@ HRESULT WINAPI BaseRendererImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart)
         This->sink.end_of_stream = FALSE;
     }
 
-    QualityControlRender_Start(This->qcimpl, This->filter.rtStreamStart);
+    QualityControlRender_Start(This->qcimpl, This->stream_start);
     if (This->sink.pin.peer && This->pFuncsTable->renderer_start_stream)
         This->pFuncsTable->renderer_start_stream(This);
     if (This->filter.state == State_Stopped)
@@ -547,7 +547,7 @@ HRESULT WINAPI BaseRendererImpl_BeginFlush(BaseRenderer* iface)
 HRESULT WINAPI BaseRendererImpl_EndFlush(BaseRenderer* iface)
 {
     TRACE("(%p)\n", iface);
-    QualityControlRender_Start(iface->qcimpl, iface->filter.rtStreamStart);
+    QualityControlRender_Start(iface->qcimpl, iface->stream_start);
     RendererPosPassThru_ResetMediaTime(iface->pPosition);
     ResetEvent(iface->flush_event);
     return S_OK;
diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c
index 77de1227dd9..abf5ed34b3c 100644
--- a/dlls/strmbase/transform.c
+++ b/dlls/strmbase/transform.c
@@ -268,10 +268,7 @@ static HRESULT WINAPI TransformFilterImpl_Run(IBaseFilter *iface, REFERENCE_TIME
         }
 
         if (SUCCEEDED(hr))
-        {
-            This->filter.rtStreamStart = tStart;
             This->filter.state = State_Running;
-        }
     }
     LeaveCriticalSection(&This->csReceive);
 
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 66b7114c520..4a685b1bd5a 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -1406,10 +1406,6 @@ static HRESULT WINAPI GST_Run(IBaseFilter *iface, REFERENCE_TIME tStart)
     if (!This->container)
         return VFW_E_NOT_CONNECTED;
 
-    EnterCriticalSection(&This->filter.csFilter);
-    This->filter.rtStreamStart = tStart;
-    LeaveCriticalSection(&This->filter.csFilter);
-
     gst_element_get_state(This->container, &now, NULL, -1);
     if (now == GST_STATE_PLAYING)
         return S_OK;
@@ -1423,7 +1419,6 @@ static HRESULT WINAPI GST_Run(IBaseFilter *iface, REFERENCE_TIME tStart)
 
     EnterCriticalSection(&This->filter.csFilter);
     gst_element_set_state(This->container, GST_STATE_PLAYING);
-    This->filter.rtStreamStart = tStart;
 
     for (i = 0; i < This->cStreams; i++) {
         hr = BaseOutputPinImpl_Active(&This->ppPins[i]->pin);
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index 218ed5dad70..99539e5c895 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -753,7 +753,6 @@ static HRESULT WINAPI QT_Run(IBaseFilter *iface, REFERENCE_TIME tStart)
     TRACE("(%s)\n", wine_dbgstr_longlong(tStart));
 
     EnterCriticalSection(&This->csReceive);
-    This->filter.rtStreamStart = tStart;
 
     if (This->pVideo_Pin)
         hr = BaseOutputPinImpl_Active(&This->pVideo_Pin->pin);
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 5eaf204f471..99d680a365b 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -155,7 +155,6 @@ struct strmbase_filter
     CRITICAL_SECTION csFilter;
 
     FILTER_STATE state;
-    REFERENCE_TIME rtStreamStart;
     IReferenceClock * pClock;
     FILTER_INFO filterInfo;
     CLSID clsid;
@@ -538,6 +537,7 @@ typedef struct BaseRendererTag
      * to immediately unblock the streaming thread. */
     HANDLE flush_event;
     IMediaSample *pMediaSample;
+    REFERENCE_TIME stream_start;
 
     IQualityControl *pQSink;
     struct QualityControlImpl *qcimpl;
-- 
2.23.0




More information about the wine-devel mailing list