[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