Hi, this patch caused regression in TES IV: Oblivion, now it can't run, here is output:
fixme:devenum:DEVENUM_ICreateDevEnum_CreateClassEnumerator Category {cc7bfb41-f175-11d1-a392-00e0291f3959} not found fixme:devenum:DEVENUM_ICreateDevEnum_CreateClassEnumerator Category {cc7bfb46-f175-11d1-a392-00e0291f3959} not found fixme:devenum:DEVENUM_ICreateDevEnum_CreateClassEnumerator Category {cc7bfb41-f175-11d1-a392-00e0291f3959} not found fixme:devenum:DEVENUM_ICreateDevEnum_CreateClassEnumerator Category {cc7bfb46-f175-11d1-a392-00e0291f3959} not found wine: Unhandled page fault on read access to 0xffffffea at address 0x7bfd278f (thread 0009), starting debugger... Unhandled exception: page fault on read access to 0xffffffea in 32-bit code (0x7bfd278f). Register dump: CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b EIP:7bfd278f ESP:0034f098 EBP:0034f1d0 EFLAGS:00010282( - 00 - RIS1) EAX:00000001 EBX:7bffec00 ECX:0034f198 EDX:ffffffea ESI:80004005 EDI:00000001 Stack dump: 0x0034f098: 115cc680 00000001 0034f198 0034f19c 0x0034f0a8: 00000000 00000001 00000001 0034f150 0x0034f0b8: 00000000 00000000 00000000 00000000 0x0034f0c8: 00000000 00000000 00000000 00000000 0x0034f0d8: 0034f108 7efa09be 7bff527c 0034f19c 0x0034f0e8: 0034f198 0034f1ac 0034f1a8 00000010 Backtrace: =>1 0x7bfd278f GraphBuilder_RenderFile+0x66f(iface=0x115cb968, lpcwstrFile=0x34f3f0, lpcwstrPlayList=0x0) [/usr/src/wine/dlls/q uartz/filtergraph.c:1094] in quartz (0x0034f1d0) 2 0x0069302b in oblivion (+0x29302b) (0x00000008) 3 0x00000000 (0x00000000) 0x7bfd278f GraphBuilder_RenderFile+0x66f [/usr/src/wine/dlls/quartz/filtergraph.c:1094] in quartz: movl 0x0(%edx),%eax 1094 IBaseFilter_Release(psplitter); Modules: Module Address Debug info Name (109 modules) PE 400000-b59000 Export oblivion PE b60000-daf000 Deferred d3dx9_27 PE 18000000-18068000 Deferred binkw32 PE 70000000-700b2000 Deferred dinput8 ELF 7b2de000-7b2f2000 Deferred avicap32<elf> -PE 7b2e0000-7b2f2000 \ avicap32 ELF 7b2f2000-7b38b000 Deferred oleaut32<elf> -PE 7b300000-7b38b000 \ oleaut32 ELF 7bf00000-7bf03000 Deferred <wine-loader> ELF 7bf81000-7bfa8000 Deferred msvfw32<elf> -PE 7bf90000-7bfa8000 \ msvfw32 ELF 7bfa8000-7c000000 Dwarf quartz<elf> -PE 7bfb0000-7c000000 \ quartz ELF 7c4b4000-7c4bf000 Deferred libgcc_s.so.1 ELF 7c5a4000-7c634000 Deferred libglu.so.1 ELF 7c634000-7c653000 Deferred devenum<elf> -PE 7c640000-7c653000 \ devenum ELF 7c653000-7c70d000 Deferred wined3d<elf> -PE 7c660000-7c70d000 \ wined3d ELF 7c70d000-7c737000 Deferred d3d9<elf> -PE 7c710000-7c737000 \ d3d9 ELF 7c857000-7c86b000 Deferred winejoystick<elf> -PE 7c860000-7c86b000 \ winejoystick ELF 7c86b000-7c882000 Deferred cfgmgr32<elf> -PE 7c870000-7c882000 \ cfgmgr32 ELF 7c882000-7c8de000 Deferred setupapi<elf> -PE 7c890000-7c8de000 \ setupapi ELF 7c8de000-7c8f2000 Deferred hid<elf> -PE 7c8e0000-7c8f2000 \ hid ELF 7c9ed000-7caae000 Deferred libasound.so.2 ELF 7caae000-7cad9000 Deferred winealsa<elf> -PE 7cac0000-7cad9000 \ winealsa ELF 7cad9000-7cb0b000 Deferred uxtheme<elf> -PE 7cae0000-7cb0b000 \ uxtheme ELF 7cd9e000-7cdb3000 Deferred midimap<elf> -PE 7cda0000-7cdb3000 \ midimap ELF 7cdb3000-7cdb8000 Deferred libxfixes.so.3 ELF 7cdbd000-7cdd5000 Deferred msacm32<elf> -PE 7cdc0000-7cdd5000 \ msacm32 ELF 7cdd7000-7cdda000 Deferred libxinerama.so.1 ELF 7cddd000-7cdf9000 Deferred imm32<elf> -PE 7cde0000-7cdf9000 \ imm32 ELF 7d7a3000-7d7a5000 Deferred libnvidia-tls.so.1 ELF 7d7a5000-7e116000 Deferred libglcore.so.1 ELF 7e116000-7e1aa000 Deferred libgl.so.1 ELF 7e1aa000-7e1af000 Deferred libxdmcp.so.6 ELF 7e1af000-7e1b2000 Deferred libxau.so.6 ELF 7e1b2000-7e29e000 Deferred libx11.so.6 ELF 7e29e000-7e2ac000 Deferred libxext.so.6 ELF 7e2ac000-7e2b1000 Deferred libxxf86vm.so.1 ELF 7e2b1000-7e2c9000 Deferred libice.so.6 ELF 7e2c9000-7e2d2000 Deferred libsm.so.6 ELF 7e2d3000-7e2dc000 Deferred libxcursor.so.1 ELF 7e2dc000-7e2df000 Deferred libxrandr.so.2 ELF 7e2df000-7e2e7000 Deferred libxrender.so.1 ELF 7e2f1000-7e37f000 Deferred winex11<elf> -PE 7e300000-7e37f000 \ winex11 ELF 7e3fb000-7e41b000 Deferred libexpat.so.1 ELF 7e41b000-7e446000 Deferred libfontconfig.so.1 ELF 7e446000-7e45a000 Deferred libz.so.1 ELF 7e45a000-7e4c4000 Deferred libfreetype.so.6 ELF 7e4e3000-7e50f000 Deferred ws2_32<elf> -PE 7e4f0000-7e50f000 \ ws2_32 ELF 7e50f000-7e529000 Deferred wsock32<elf> -PE 7e520000-7e529000 \ wsock32 ELF 7e529000-7e58d000 Deferred msvcrt<elf> -PE 7e540000-7e58d000 \ msvcrt ELF 7e58d000-7e5a1000 Deferred lz32<elf> -PE 7e590000-7e5a1000 \ lz32 ELF 7e5a1000-7e5f9000 Deferred shlwapi<elf> -PE 7e5b0000-7e5f9000 \ shlwapi ELF 7e5f9000-7e6ee000 Deferred shell32<elf> -PE 7e610000-7e6ee000 \ shell32 ELF 7e6ee000-7e701000 Deferred libresolv.so.2 ELF 7e707000-7e720000 Deferred version<elf> -PE 7e710000-7e720000 \ version ELF 7e720000-7e73e000 Deferred iphlpapi<elf> -PE 7e730000-7e73e000 \ iphlpapi ELF 7e73e000-7e793000 Deferred rpcrt4<elf> -PE 7e750000-7e793000 \ rpcrt4 ELF 7e793000-7e82c000 Deferred ole32<elf> -PE 7e7a0000-7e82c000 \ ole32 ELF 7e82c000-7e875000 Deferred dsound<elf> -PE 7e830000-7e875000 \ dsound ELF 7e875000-7e903000 Deferred winmm<elf> -PE 7e880000-7e903000 \ winmm ELF 7e903000-7e949000 Deferred advapi32<elf> -PE 7e910000-7e949000 \ advapi32 ELF 7e949000-7e9dc000 Deferred gdi32<elf> -PE 7e960000-7e9dc000 \ gdi32 ELF 7e9dc000-7eb16000 Deferred user32<elf> -PE 7ea00000-7eb16000 \ user32 ELF 7eb16000-7ebd6000 Deferred comctl32<elf> -PE 7eb20000-7ebd6000 \ comctl32 ELF 7edd6000-7eefc000 Deferred kernel32<elf> -PE 7edf0000-7eefc000 \ kernel32 ELF 7eefc000-7ef07000 Deferred libnss_files.so.2 ELF 7ef07000-7ef11000 Deferred libnss_nis.so.2 ELF 7ef11000-7ef27000 Deferred libnsl.so.1 ELF 7ef27000-7ef4c000 Deferred libm.so.6 ELF 7ef6b000-7f000000 Deferred ntdll<elf> -PE 7ef80000-7f000000 \ ntdll ELF b7cb6000-b7cba000 Deferred libdl.so.2 ELF b7cba000-b7dec000 Deferred libc.so.6 ELF b7dec000-b7dfe000 Deferred libpthread.so.0 ELF b7e11000-b7e15000 Deferred iso8859-2.so ELF b7e15000-b7e1e000 Deferred libnss_compat.so.2 ELF b7e1e000-b7f2f000 Deferred libwine.so.1 ELF b7f31000-b7f48000 Deferred ld-linux.so.2 Threads: process tid prio (all id:s are in hex) 0000000a 0000000c 0 0000000b 0 00000008 (D) G:\usr\games\oblivion\Oblivion.exe 00000010 2 0000000f -1 0000000e -1 0000000d 15 00000009 0 <==
Mirek
Chris Robinson napsal(a):
From 427782e216badd48afc917c85682bc5a1954b24b Mon Sep 17 00:00:00 2001 From: Chris Robinson chris.kcat@gmail.com Date: Wed, 14 Feb 2007 11:27:26 -0800 Subject: [PATCH] quartz: Return proper error codes from GraphBuilder_RenderFile
dlls/quartz/filtergraph.c | 82 +++++++++++++++++++++++---------------------- 1 files changed, 42 insertions(+), 40 deletions(-)
diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index 8b38a3b..a3db8dd 100644 --- a/dlls/quartz/filtergraph.c +++ b/dlls/quartz/filtergraph.c @@ -961,9 +961,9 @@ static HRESULT WINAPI GraphBuilder_RenderFile(IGraphBuilder *iface, IEnumPins* penumpins; ULONG pin; HRESULT hr;
- IEnumMoniker* pEnumMoniker;
- IEnumMoniker* pEnumMoniker = NULL; GUID tab[2];
- IPin** ppins;
- IPin** ppins = NULL; ULONG nb; IMoniker* pMoniker; IFileSourceFilter* pfile = NULL;
@@ -972,6 +972,9 @@ static HRESULT WINAPI GraphBuilder_RenderFile(IGraphBuilder *iface,
TRACE("(%p/%p)->(%s, %s)\n", This, iface, debugstr_w(lpcwstrFile), debugstr_w(lpcwstrPlayList));
if (lpcwstrPlayList != NULL)
return E_INVALIDARG;
hr = IGraphBuilder_AddSourceFilter(iface, lpcwstrFile, string, &preader);
/* Retrieve file media type */
@@ -982,6 +985,13 @@ static HRESULT WINAPI GraphBuilder_RenderFile(IGraphBuilder *iface, IFileSourceFilter_Release(pfile); }
- if (SUCCEEDED(hr))
hr = IBaseFilter_EnumPins(preader, &penumpins);
- if (SUCCEEDED(hr)) {
hr = IEnumPins_Next(penumpins, 1, &ppinreader, &pin);
IEnumPins_Release(penumpins);
- }
- if (SUCCEEDED(hr)) { tab[0] = mt.majortype; tab[1] = mt.subtype;
@@ -990,6 +1000,8 @@ static HRESULT WINAPI GraphBuilder_RenderFile(IGraphBuilder *iface,
if (FAILED(hr)) {
if (pEnumMoniker)
IEnumMoniker_Release(pEnumMoniker); if (preader) { IGraphBuilder_RemoveFilter(iface, preader); IBaseFilter_Release(preader);
@@ -1019,65 +1031,49 @@ static HRESULT WINAPI GraphBuilder_RenderFile(IGraphBuilder *iface, hr = IGraphBuilder_AddFilter(iface, psplitter, NULL); if (FAILED(hr)) { ERR("Unable add filter (%x)\n", hr);
return hr;
IBaseFilter_Release(psplitter);
continue; } /* Connect file source and splitter filters together */ /* Make the splitter analyze incoming data */
hr = IBaseFilter_EnumPins(preader, &penumpins);
if (FAILED(hr)) {
ERR("Enumpins (%x)\n", hr);
return hr;
}
hr = IEnumPins_Next(penumpins, 1, &ppinreader, &pin);
if (FAILED(hr)) {
ERR("Next (%x)\n", hr);
return hr;
}
if (pin == 0) {
ERR("No Pin\n");
return E_FAIL;
}
IEnumPins_Release(penumpins); hr = IBaseFilter_EnumPins(psplitter, &penumpins);
if (FAILED(hr)) {
ERR("Splitter Enumpins (%x)\n", hr);
return hr;
}
hr = IEnumPins_Next(penumpins, 1, &ppinsplitter, &pin);
if (FAILED(hr)) {
ERR("Next (%x)\n", hr);
return hr;
}
if (pin == 0) {
ERR("No Pin\n");
return E_FAIL;
if (SUCCEEDED(hr)) {
hr = IEnumPins_Next(penumpins, 1, &ppinsplitter, &pin);
IEnumPins_Release(penumpins); }
IEnumPins_Release(penumpins);
hr = IPin_Connect(ppinreader, ppinsplitter, NULL);
if (SUCCEEDED(hr))
hr = IPin_Connect(ppinreader, ppinsplitter, NULL); if (SUCCEEDED(hr)) { /* Make sure there's some output pins in the filter */ hr = GetInternalConnections(psplitter, ppinsplitter, &ppins, &nb);
if(SUCCEEDED(hr)) {
if (SUCCEEDED(hr)) { if(nb > 0) { TRACE("Successfully connected to filter\n"); break; } CoTaskMemFree(ppins); ppins = NULL;
TRACE("No output pins found in filter\n"); }
IBaseFilter_Release(ppinsplitter);
ppinsplitter = NULL;
TRACE("No output pins found in filter\n");
hr = VFW_E_CANNOT_RENDER; }
IPin_Release(ppinsplitter);
ppinsplitter = NULL;
IGraphBuilder_RemoveFilter(iface, psplitter);
IBaseFilter_Release(psplitter);
ppinsplitter = NULL;
TRACE("Cannot connect to filter (%x), trying next one\n", hr);
hr = E_FAIL;
}
/* Render all output pin of the splitter by calling IGraphBuilder_Render on each of them */ if (SUCCEEDED(hr)) {
int partial = 0; int i; TRACE("pins to consider: %d\n", nb); for(i = 0; i < nb; i++) {
@@ -1085,13 +1081,19 @@ static HRESULT WINAPI GraphBuilder_RenderFile(IGraphBuilder *iface, hr = IGraphBuilder_Render(iface, ppins[i]); if (FAILED(hr)) { ERR("Cannot render pin %p (%x)\n", ppins[i], hr);
/* FIXME: We should clean created things properly */
break;
partial = 1; }
IPin_Release(ppins[i]); } CoTaskMemFree(ppins);
}hr = (partial ? VFW_S_PARTIAL_RENDER : S_OK);
- if (psplitter)
IBaseFilter_Release(psplitter);
- IBaseFilter_Release(preader);
- return hr;
}