quartz: Remove the source filter on failure in IGraphBuilder::RenderFile().

Signed-off-by: Tim Clem <tclem@codeweavers.com>
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Tim Clem 2021-06-29 14:59:58 -05:00 committed by Alexandre Julliard
parent d9b95ac0df
commit 83ae1ff59a
2 changed files with 11 additions and 3 deletions

View File

@ -1431,11 +1431,19 @@ static HRESULT WINAPI FilterGraph2_RenderFile(IFilterGraph2 *iface, LPCWSTR lpcw
IEnumPins_Release(penumpins);
if (!any)
{
if (FAILED(hr = IFilterGraph2_RemoveFilter(iface, preader)))
ERR("Failed to remove source filter, hr %#x.\n", hr);
hr = VFW_E_CANNOT_RENDER;
}
else if (partial)
{
hr = VFW_S_PARTIAL_RENDER;
}
else
{
hr = S_OK;
}
}
IBaseFilter_Release(preader);

View File

@ -4216,17 +4216,17 @@ static void test_renderfile_failure(void)
hr = IEnumFilters_Next(filterenum, 1, &filter, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
todo_wine ok(filter == &testfilter.IBaseFilter_iface, "Got unexpected filter %p.\n", filter);
ok(filter == &testfilter.IBaseFilter_iface, "Got unexpected filter %p.\n", filter);
hr = IEnumFilters_Next(filterenum, 1, &filter, NULL);
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
IEnumFilters_Release(filterenum);
ref = IFilterGraph2_Release(graph);
ok(!ref, "Got outstanding refcount %d.\n", ref);
ret = DeleteFileW(filename);
todo_wine ok(ret, "Failed to delete %s, error %u.\n", debugstr_w(filename), GetLastError());
ok(ret, "Failed to delete %s, error %u.\n", debugstr_w(filename), GetLastError());
}
/* Remove and re-add the filter, to flush the graph's internal