Fixed error handling in Graphbuilder_RenderFile.

Improved traces.
oldstable
Christian Costa 2005-01-09 18:24:41 +00:00 committed by Alexandre Julliard
parent 921be0a87c
commit b3f064ccc7
4 changed files with 38 additions and 18 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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);