Module: wine Branch: master Commit: 14229c1176900663b89acc977d9c280a4d5de961 URL: http://source.winehq.org/git/wine.git/?a=commit;h=14229c1176900663b89acc977d...
Author: Maarten Lankhorst m.b.lankhorst@gmail.com Date: Thu Nov 4 17:54:27 2010 +0100
quartz: Simplify all_renderers_seek.
Since IAMFilterMiscFlags is supported by all source/renderer filters, use that instead.
---
dlls/quartz/filtergraph.c | 57 +++++++++++++++------------------------------ 1 files changed, 19 insertions(+), 38 deletions(-)
diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index c2f61f2..8189aaa 100644 --- a/dlls/quartz/filtergraph.c +++ b/dlls/quartz/filtergraph.c @@ -2136,53 +2136,34 @@ typedef HRESULT (WINAPI *fnFoundSeek)(IFilterGraphImpl *This, IMediaSeeking*, DW static HRESULT all_renderers_seek(IFilterGraphImpl *This, fnFoundSeek FoundSeek, DWORD_PTR arg) { BOOL allnotimpl = TRUE; int i; - IBaseFilter* pfilter; - IEnumPins* pEnum; HRESULT hr, hr_return = S_OK; - IPin* pPin; - DWORD dummy; - PIN_DIRECTION dir;
TRACE("(%p)->(%p %08lx)\n", This, FoundSeek, arg); /* Send a message to all renderers, they are responsible for broadcasting it further */
for(i = 0; i < This->nFilters; i++) { - BOOL renderer = TRUE; - pfilter = This->ppFiltersInGraph[i]; - hr = IBaseFilter_EnumPins(pfilter, &pEnum); - if (hr != S_OK) - { - WARN("Enum pins failed %x\n", hr); + IMediaSeeking *seek = NULL; + IBaseFilter* pfilter = This->ppFiltersInGraph[i]; + IAMFilterMiscFlags *flags = NULL; + ULONG filterflags; + IUnknown_QueryInterface(pfilter, &IID_IAMFilterMiscFlags, (void**)&flags); + if (!flags) + continue; + filterflags = IAMFilterMiscFlags_GetMiscFlags(flags); + IUnknown_Release(flags); + if (filterflags != AM_FILTER_MISC_FLAGS_IS_RENDERER) continue; - } - /* Check if it is a source filter */ - while(IEnumPins_Next(pEnum, 1, &pPin, &dummy) == S_OK) - { - IPin_QueryDirection(pPin, &dir); - IPin_Release(pPin); - if (dir != PINDIR_INPUT) - { - renderer = FALSE; - break; - } - } - IEnumPins_Release(pEnum); - if (renderer) - { - IMediaSeeking *seek = NULL; - IBaseFilter_QueryInterface(pfilter, &IID_IMediaSeeking, (void**)&seek); - if (!seek) - continue; - - hr = FoundSeek(This, seek, arg);
- IMediaSeeking_Release(seek); - if (hr_return != E_NOTIMPL) - allnotimpl = FALSE; - if (hr_return == S_OK || (FAILED(hr) && hr != E_NOTIMPL && SUCCEEDED(hr_return))) - hr_return = hr; - } + IBaseFilter_QueryInterface(pfilter, &IID_IMediaSeeking, (void**)&seek); + if (!seek) + continue; + hr = FoundSeek(This, seek, arg); + IMediaSeeking_Release(seek); + if (hr_return != E_NOTIMPL) + allnotimpl = FALSE; + if (hr_return == S_OK || (FAILED(hr) && hr != E_NOTIMPL && SUCCEEDED(hr_return))) + hr_return = hr; }
if (allnotimpl)