[PATCH 4/5] strmbase: Get rid of BaseRendererImpl_EndOfStream().
Zebediah Figura
z.figura12 at gmail.com
Wed Nov 27 19:27:17 CST 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/dsoundrender.c | 15 +----------
dlls/strmbase/renderer.c | 52 +++++++++++++++-----------------------
include/wine/strmbase.h | 1 -
3 files changed, 21 insertions(+), 47 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index 3979853b8b..b6757fa76a 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -500,20 +500,7 @@ static HRESULT WINAPI DSoundRender_BreakConnect(struct strmbase_renderer *iface)
static HRESULT WINAPI DSoundRender_EndOfStream(struct strmbase_renderer *iface)
{
DSoundRenderImpl *This = impl_from_strmbase_renderer(iface);
- HRESULT hr;
-
- TRACE("(%p)->()\n",iface);
-
- hr = BaseRendererImpl_EndOfStream(iface);
- if (hr != S_OK)
- {
- ERR("%08x\n", hr);
- return hr;
- }
-
- hr = DSoundRender_HandleEndOfStream(This);
-
- return hr;
+ return DSoundRender_HandleEndOfStream(This);
}
static HRESULT WINAPI DSoundRender_EndFlush(struct strmbase_renderer *iface)
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index 5aee4380f2..50bd33715d 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -82,18 +82,29 @@ static HRESULT WINAPI BaseRenderer_InputPin_Disconnect(IPin * iface)
static HRESULT WINAPI BaseRenderer_InputPin_EndOfStream(IPin * iface)
{
- struct strmbase_renderer *pFilter = impl_from_IPin(iface);
- HRESULT hr;
+ struct strmbase_renderer *filter = impl_from_IPin(iface);
+ IFilterGraph *graph = filter->filter.filterInfo.pGraph;
+ IMediaEventSink *event_sink;
+ HRESULT hr = S_OK;
TRACE("iface %p.\n", iface);
- EnterCriticalSection(&pFilter->csRenderLock);
- pFilter->eos = TRUE;
- if (pFilter->pFuncsTable->pfnEndOfStream)
- hr = pFilter->pFuncsTable->pfnEndOfStream(pFilter);
- else
- hr = BaseRendererImpl_EndOfStream(pFilter);
- LeaveCriticalSection(&pFilter->csRenderLock);
+ EnterCriticalSection(&filter->csRenderLock);
+ filter->eos = TRUE;
+
+ if (graph && SUCCEEDED(IFilterGraph_QueryInterface(graph,
+ &IID_IMediaEventSink, (void **)&event_sink)))
+ {
+ IMediaEventSink_Notify(event_sink, EC_COMPLETE, S_OK,
+ (LONG_PTR)&filter->filter.IBaseFilter_iface);
+ IMediaEventSink_Release(event_sink);
+ }
+ RendererPosPassThru_EOS(filter->pPosition);
+ SetEvent(filter->state_event);
+
+ if (filter->pFuncsTable->pfnEndOfStream)
+ hr = filter->pFuncsTable->pfnEndOfStream(filter);
+ LeaveCriticalSection(&filter->csRenderLock);
return hr;
}
@@ -458,29 +469,6 @@ static const IBaseFilterVtbl strmbase_renderer_vtbl =
BaseFilterImpl_QueryVendorInfo
};
-HRESULT WINAPI BaseRendererImpl_EndOfStream(struct strmbase_renderer *iface)
-{
- IMediaEventSink* pEventSink;
- IFilterGraph *graph;
- HRESULT hr = S_OK;
-
- TRACE("(%p)\n", iface);
-
- graph = iface->filter.filterInfo.pGraph;
- if (graph)
- { hr = IFilterGraph_QueryInterface(iface->filter.filterInfo.pGraph, &IID_IMediaEventSink, (LPVOID*)&pEventSink);
- if (SUCCEEDED(hr))
- {
- hr = IMediaEventSink_Notify(pEventSink, EC_COMPLETE, S_OK, (LONG_PTR)iface);
- IMediaEventSink_Release(pEventSink);
- }
- }
- RendererPosPassThru_EOS(iface->pPosition);
- SetEvent(iface->state_event);
-
- return hr;
-}
-
HRESULT WINAPI BaseRendererImpl_ClearPendingSample(struct strmbase_renderer *iface)
{
if (iface->pMediaSample)
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 1dbc9ea4d8..b08303f93d 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -568,7 +568,6 @@ struct strmbase_renderer_ops
};
HRESULT WINAPI BaseRendererImpl_ClearPendingSample(struct strmbase_renderer *filter);
-HRESULT WINAPI BaseRendererImpl_EndOfStream(struct strmbase_renderer *filter);
HRESULT WINAPI BaseRendererImpl_Receive(struct strmbase_renderer *filter, IMediaSample *sample);
HRESULT WINAPI strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer,
--
2.24.0
More information about the wine-devel
mailing list