From b3f064ccc7592628ea0a1fc67507750dcc70b572 Mon Sep 17 00:00:00 2001 From: Christian Costa Date: Sun, 9 Jan 2005 18:24:41 +0000 Subject: [PATCH] Fixed error handling in Graphbuilder_RenderFile. Improved traces. --- dlls/devenum/mediacatenum.c | 20 +++++++++++--------- dlls/quartz/enummoniker.c | 21 +++++++++++++-------- dlls/quartz/filtergraph.c | 6 +++++- dlls/quartz/filtermapper.c | 9 +++++++++ 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/dlls/devenum/mediacatenum.c b/dlls/devenum/mediacatenum.c index d47cfafbeda..1d8552d16b6 100644 --- a/dlls/devenum/mediacatenum.c +++ b/dlls/devenum/mediacatenum.c @@ -717,10 +717,11 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_QueryInterface( static ULONG WINAPI DEVENUM_IEnumMoniker_AddRef(LPENUMMONIKER iface) { EnumMonikerImpl *This = (EnumMonikerImpl *)iface; + ULONG ref = InterlockedIncrement(&This->ref); - TRACE("\n"); + TRACE("(%p)->() AddRef from %ld\n", iface, ref - 1); - return InterlockedIncrement(&This->ref); + return ref; } /********************************************************************** @@ -729,17 +730,18 @@ static ULONG WINAPI DEVENUM_IEnumMoniker_AddRef(LPENUMMONIKER iface) static ULONG WINAPI DEVENUM_IEnumMoniker_Release(LPENUMMONIKER iface) { EnumMonikerImpl *This = (EnumMonikerImpl *)iface; + ULONG ref = InterlockedDecrement(&This->ref); - TRACE("\n"); + TRACE("(%p)->() Release from %ld\n", iface, ref + 1); - if (!InterlockedDecrement(&This->ref)) + if (!ref) { RegCloseKey(This->hkey); CoTaskMemFree(This); DEVENUM_UnlockModule(); return 0; } - return This->ref; + return ref; } static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(LPENUMMONIKER iface, ULONG celt, IMoniker ** rgelt, ULONG * pceltFetched) @@ -750,7 +752,7 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Next(LPENUMMONIKER iface, ULONG celt, MediaCatMoniker * pMoniker; EnumMonikerImpl *This = (EnumMonikerImpl *)iface; - TRACE("(%ld, %p, %p)\n", celt, rgelt, pceltFetched); + TRACE("(%p)->(%ld, %p, %p)\n", iface, celt, rgelt, pceltFetched); while (fetched < celt) { @@ -789,7 +791,7 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Skip(LPENUMMONIKER iface, ULONG celt) { EnumMonikerImpl *This = (EnumMonikerImpl *)iface; - TRACE("(%ld)\n", celt); + TRACE("(%p)->(%ld)\n", iface, celt); This->index += celt; @@ -800,7 +802,7 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Reset(LPENUMMONIKER iface) { EnumMonikerImpl *This = (EnumMonikerImpl *)iface; - TRACE("()\n"); + TRACE("(%p)->()\n", iface); This->index = 0; @@ -809,7 +811,7 @@ static HRESULT WINAPI DEVENUM_IEnumMoniker_Reset(LPENUMMONIKER iface) static HRESULT WINAPI DEVENUM_IEnumMoniker_Clone(LPENUMMONIKER iface, IEnumMoniker ** ppenum) { - FIXME("(%p): stub\n", ppenum); + FIXME("(%p)->(%p): stub\n", iface, ppenum); return E_NOTIMPL; } diff --git a/dlls/quartz/enummoniker.c b/dlls/quartz/enummoniker.c index 0338a28dd90..879d80a68bd 100644 --- a/dlls/quartz/enummoniker.c +++ b/dlls/quartz/enummoniker.c @@ -106,12 +106,15 @@ static HRESULT WINAPI EnumMonikerImpl_QueryInterface( static ULONG WINAPI EnumMonikerImpl_AddRef(LPENUMMONIKER iface) { EnumMonikerImpl *This = (EnumMonikerImpl *)iface; - - TRACE("\n"); + ULONG ref; if (This == NULL) return E_POINTER; - return InterlockedIncrement(&This->ref); + ref = InterlockedIncrement(&This->ref); + + TRACE("(%p)->() AddRef from %ld\n", iface, ref - 1); + + return ref; } /********************************************************************** @@ -122,7 +125,7 @@ static ULONG WINAPI EnumMonikerImpl_Release(LPENUMMONIKER iface) EnumMonikerImpl *This = (EnumMonikerImpl *)iface; ULONG ref = InterlockedDecrement(&This->ref); - TRACE("\n"); + TRACE("(%p)->() Release from %ld\n", iface, ref + 1); if (!ref) { @@ -139,7 +142,7 @@ static HRESULT WINAPI EnumMonikerImpl_Next(LPENUMMONIKER iface, ULONG celt, IMon ULONG fetched; EnumMonikerImpl *This = (EnumMonikerImpl *)iface; - TRACE("(%ld, %p, %p)\n", celt, rgelt, pceltFetched); + TRACE("(%p)->(%ld, %p, %p)\n", iface, celt, rgelt, pceltFetched); for (fetched = 0; (This->index + fetched < This->nMonikerCount) && (fetched < celt); fetched++) { @@ -149,6 +152,8 @@ static HRESULT WINAPI EnumMonikerImpl_Next(LPENUMMONIKER iface, ULONG celt, IMon This->index += fetched; + TRACE("-- fetched %ld\n", fetched); + if (pceltFetched) *pceltFetched = fetched; @@ -162,7 +167,7 @@ static HRESULT WINAPI EnumMonikerImpl_Skip(LPENUMMONIKER iface, ULONG celt) { EnumMonikerImpl *This = (EnumMonikerImpl *)iface; - TRACE("(%ld)\n", celt); + TRACE("(%p)->(%ld)\n", iface, celt); This->index += celt; @@ -173,7 +178,7 @@ static HRESULT WINAPI EnumMonikerImpl_Reset(LPENUMMONIKER iface) { EnumMonikerImpl *This = (EnumMonikerImpl *)iface; - TRACE("()\n"); + TRACE("(%p)->()\n", iface); This->index = 0; @@ -182,7 +187,7 @@ static HRESULT WINAPI EnumMonikerImpl_Reset(LPENUMMONIKER iface) static HRESULT WINAPI EnumMonikerImpl_Clone(LPENUMMONIKER iface, IEnumMoniker ** ppenum) { - FIXME("(%p): stub\n", ppenum); + FIXME("(%p)->(%p): stub\n", iface, ppenum); return E_NOTIMPL; } diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index d568db3ea13..6d555929541 100644 --- a/dlls/quartz/filtergraph.c +++ b/dlls/quartz/filtergraph.c @@ -875,7 +875,10 @@ static HRESULT WINAPI Graphbuilder_RenderFile(IGraphBuilder *iface, tab[0] = mt.majortype; tab[1] = mt.subtype; hr = IFilterMapper2_EnumMatchingFilters(This->pFilterMapper2, &pEnumMoniker, 0, FALSE, 0, TRUE, 1, tab, NULL, NULL, FALSE, FALSE, 0, NULL, NULL, NULL); - } else { + } + + if (FAILED(hr)) + { if (preader) { IGraphBuilder_RemoveFilter(iface, preader); IBaseFilter_Release(preader); @@ -883,6 +886,7 @@ static HRESULT WINAPI Graphbuilder_RenderFile(IGraphBuilder *iface, return hr; } + hr = E_FAIL; while(IEnumMoniker_Next(pEnumMoniker, 1, &pMoniker, &nb) == S_OK) { VARIANT var; diff --git a/dlls/quartz/filtermapper.c b/dlls/quartz/filtermapper.c index 19c5cac90f4..07b914a9b60 100644 --- a/dlls/quartz/filtermapper.c +++ b/dlls/quartz/filtermapper.c @@ -950,6 +950,15 @@ static HRESULT WINAPI FilterMapper2_EnumMatchingFilters( hrSub = IMoniker_BindToStorage(pMoniker, NULL, NULL, &IID_IPropertyBag, (LPVOID*)&pPropBag); + if (TRACE_ON(quartz)) + { + VARIANT temp; + V_VT(&temp) = VT_EMPTY; + IPropertyBag_Read(pPropBag, wszFriendlyName, &temp, NULL); + TRACE("Considering filter %s\n", debugstr_w(V_UNION(&temp, bstrVal))); + VariantClear(&temp); + } + if (SUCCEEDED(hrSub)) hrSub = FM2_ReadFilterData(pPropBag, &rf2);