Zebediah Figura : strmbase/renderer: Use base filter state change methods.

Alexandre Julliard julliard at winehq.org
Mon Oct 28 16:43:35 CDT 2019


Module: wine
Branch: master
Commit: 8655691a8add9448f3d44038ed43fd0860d96562
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=8655691a8add9448f3d44038ed43fd0860d96562

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Sun Oct 27 18:28:02 2019 -0500

strmbase/renderer: Use base filter state change methods.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/strmbase/renderer.c | 181 ++++++++++++++++++-----------------------------
 1 file changed, 69 insertions(+), 112 deletions(-)

diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index c75452aea6..1d37531bf2 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -205,11 +205,76 @@ static HRESULT renderer_query_interface(struct strmbase_filter *iface, REFIID ii
     return E_NOINTERFACE;
 }
 
+static HRESULT renderer_init_stream(struct strmbase_filter *iface)
+{
+    struct strmbase_renderer *filter = impl_from_strmbase_filter(iface);
+
+    if (filter->sink.pin.peer)
+        ResetEvent(filter->state_event);
+    filter->sink.end_of_stream = FALSE;
+    BaseRendererImpl_ClearPendingSample(filter);
+    ResetEvent(filter->flush_event);
+    if (filter->pFuncsTable->renderer_init_stream)
+        filter->pFuncsTable->renderer_init_stream(filter);
+
+    return S_OK;
+}
+
+static HRESULT renderer_start_stream(struct strmbase_filter *iface, REFERENCE_TIME start)
+{
+    struct strmbase_renderer *filter = impl_from_strmbase_filter(iface);
+
+    filter->stream_start = start;
+    SetEvent(filter->state_event);
+    if (filter->sink.pin.peer)
+        filter->sink.end_of_stream = FALSE;
+    QualityControlRender_Start(filter->qcimpl, filter->stream_start);
+    if (filter->sink.pin.peer && filter->pFuncsTable->renderer_start_stream)
+        filter->pFuncsTable->renderer_start_stream(filter);
+
+    return S_OK;
+}
+
+static HRESULT renderer_stop_stream(struct strmbase_filter *iface)
+{
+    struct strmbase_renderer *filter = impl_from_strmbase_filter(iface);
+
+    if (filter->sink.pin.peer && filter->pFuncsTable->renderer_stop_stream)
+        filter->pFuncsTable->renderer_stop_stream(filter);
+
+    return S_OK;
+}
+
+static HRESULT renderer_cleanup_stream(struct strmbase_filter *iface)
+{
+    struct strmbase_renderer *filter = impl_from_strmbase_filter(iface);
+
+    RendererPosPassThru_ResetMediaTime(filter->pPosition);
+    SetEvent(filter->state_event);
+    SetEvent(filter->flush_event);
+
+    return S_OK;
+}
+
+static HRESULT renderer_wait_state(struct strmbase_filter *iface, DWORD timeout)
+{
+    struct strmbase_renderer *filter = impl_from_strmbase_filter(iface);
+
+    if (WaitForSingleObject(filter->state_event, timeout) == WAIT_TIMEOUT)
+        return VFW_S_STATE_INTERMEDIATE;
+    return S_OK;
+}
+
 static const struct strmbase_filter_ops filter_ops =
 {
     .filter_get_pin = renderer_get_pin,
     .filter_destroy = renderer_destroy,
     .filter_query_interface = renderer_query_interface,
+    .filter_init_stream = renderer_init_stream,
+    .filter_start_stream = renderer_start_stream,
+    .filter_stop_stream = renderer_stop_stream,
+    .filter_cleanup_stream = renderer_cleanup_stream,
+    .filter_wait_state = renderer_wait_state,
 };
 
 static HRESULT sink_query_accept(struct strmbase_pin *pin, const AM_MEDIA_TYPE *mt)
@@ -371,96 +436,6 @@ HRESULT WINAPI BaseRendererImpl_Receive(struct strmbase_renderer *This, IMediaSa
     return hr;
 }
 
-static HRESULT WINAPI BaseRendererImpl_Stop(IBaseFilter *iface)
-{
-    struct strmbase_renderer *This = impl_from_IBaseFilter(iface);
-
-    TRACE("(%p)->()\n", This);
-
-    EnterCriticalSection(&This->csRenderLock);
-    {
-        RendererPosPassThru_ResetMediaTime(This->pPosition);
-        if (This->sink.pin.peer && This->pFuncsTable->renderer_stop_stream)
-            This->pFuncsTable->renderer_stop_stream(This);
-        This->filter.state = State_Stopped;
-        SetEvent(This->state_event);
-        SetEvent(This->flush_event);
-    }
-    LeaveCriticalSection(&This->csRenderLock);
-
-    return S_OK;
-}
-
-static HRESULT WINAPI BaseRendererImpl_Run(IBaseFilter *iface, REFERENCE_TIME tStart)
-{
-    struct strmbase_renderer *This = impl_from_IBaseFilter(iface);
-
-    TRACE("iface %p, start %s.\n", iface, debugstr_time(tStart));
-
-    EnterCriticalSection(&This->csRenderLock);
-    This->stream_start = tStart;
-    if (This->filter.state == State_Running)
-        goto out;
-
-    if (This->filter.state == State_Stopped && This->pFuncsTable->renderer_init_stream)
-        This->pFuncsTable->renderer_init_stream(This);
-
-    SetEvent(This->state_event);
-
-    if (This->sink.pin.peer)
-    {
-        This->sink.end_of_stream = FALSE;
-    }
-
-    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)
-        BaseRendererImpl_ClearPendingSample(This);
-    This->filter.state = State_Running;
-
-out:
-    LeaveCriticalSection(&This->csRenderLock);
-
-    return S_OK;
-}
-
-static HRESULT WINAPI BaseRendererImpl_Pause(IBaseFilter *iface)
-{
-    struct strmbase_renderer *This = impl_from_IBaseFilter(iface);
-    HRESULT hr = S_OK;
-
-    TRACE("(%p)->()\n", This);
-
-    EnterCriticalSection(&This->csRenderLock);
-    {
-     if (This->filter.state != State_Paused)
-        {
-            if (This->filter.state == State_Stopped)
-            {
-                if (This->sink.pin.peer)
-                {
-                    ResetEvent(This->state_event);
-                    hr = S_FALSE;
-                }
-                This->sink.end_of_stream = FALSE;
-                if (This->pFuncsTable->renderer_init_stream)
-                    This->pFuncsTable->renderer_init_stream(This);
-            }
-            else if (This->sink.pin.peer && This->pFuncsTable->renderer_stop_stream)
-                This->pFuncsTable->renderer_stop_stream(This);
-
-            if (This->filter.state == State_Stopped)
-                BaseRendererImpl_ClearPendingSample(This);
-            ResetEvent(This->flush_event);
-            This->filter.state = State_Paused;
-        }
-    }
-    LeaveCriticalSection(&This->csRenderLock);
-
-    return hr;
-}
-
 static HRESULT WINAPI BaseRendererImpl_SetSyncSource(IBaseFilter *iface, IReferenceClock *clock)
 {
     struct strmbase_renderer *This = impl_from_IBaseFilter(iface);
@@ -473,34 +448,16 @@ static HRESULT WINAPI BaseRendererImpl_SetSyncSource(IBaseFilter *iface, IRefere
     return hr;
 }
 
-
-static HRESULT WINAPI BaseRendererImpl_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState)
-{
-    HRESULT hr;
-    struct strmbase_renderer *This = impl_from_IBaseFilter(iface);
-
-    TRACE("(%p)->(%d, %p)\n", This, dwMilliSecsTimeout, pState);
-
-    if (WaitForSingleObject(This->state_event, dwMilliSecsTimeout) == WAIT_TIMEOUT)
-        hr = VFW_S_STATE_INTERMEDIATE;
-    else
-        hr = S_OK;
-
-    BaseFilterImpl_GetState(iface, dwMilliSecsTimeout, pState);
-
-    return hr;
-}
-
 static const IBaseFilterVtbl strmbase_renderer_vtbl =
 {
     BaseFilterImpl_QueryInterface,
     BaseFilterImpl_AddRef,
     BaseFilterImpl_Release,
     BaseFilterImpl_GetClassID,
-    BaseRendererImpl_Stop,
-    BaseRendererImpl_Pause,
-    BaseRendererImpl_Run,
-    BaseRendererImpl_GetState,
+    BaseFilterImpl_Stop,
+    BaseFilterImpl_Pause,
+    BaseFilterImpl_Run,
+    BaseFilterImpl_GetState,
     BaseRendererImpl_SetSyncSource,
     BaseFilterImpl_GetSyncSource,
     BaseFilterImpl_EnumPins,




More information about the wine-cvs mailing list