https://bugs.winehq.org/show_bug.cgi?id=34622
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|quartz |wmp&wmvcore URL| |https://www.fileplanet.com/ | |217883/download/A.R.E.S:-Ex | |tinction-Agenda-Demo Summary|Multiple games need |Multiple games need |CLSID_DMOWrapperFilter/DMO |CLSID_DMOWrapperFilter/DMO |Wrapper Filter |Wrapper Filter |{94297043-bd82-4dfd-b0de-81 |'{94297043-bd82-4dfd-b0de-8 |77739c6d20} (Neocron, Age |177739c6d20}', 'qasf.dll' |of empires III Steam) |(Neocron, Age of empires | |III Steam, .NET XNA 3.x/4.x | |games using Media classes) Keywords| |download
--- Comment #6 from Anastasius Focht focht@gmx.net --- Hello folks,
still present.
This ticket is about providing the component.
https://msdn.microsoft.com/en-us/library/windows/desktop/dd375519(v=vs.85).a...
--- quote --- Filter Interfaces IBaseFilter, IDMOWrapperFilter, IPersistStream Input Pin Media Types See Remarks Input Pin Interfaces IMemInputPin, IPin, IQualityControl Output Pin Media Types See Remarks Output Pin Interfaces IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl Filter CLSID CLSID_DMOWrapperFilter Property Page CLSID No property page Executable Qasf.dll --- quote ---
@Zebediah
--- quote --- It seems this is only a bug if native quartz is used. With builtin quartz, the sound seems to try to go through the MPEG splitter and fails before it can get to that point. --- quote ---
I guess that comment refers only to the case of Neocron2?
The problem is essentially encountered with all apps that make use of .NET XNA 3.x/4.x Microsoft.Xna.Framework.Media classes that make use of WMVideoDecoderDMO/WMAudioDecoderDMO.
While investigating bug 26369 I also stumbled across this problem.
A.R.E.S. Extinction Agenda 1.x (.NET 2.0, XNA 3.1 game): https://www.fileplanet.com/217883/download/A.R.E.S:-Extinction-Agenda-Demo
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/ARES - Demo
$ file *.{dll,exe} AssetLoader.dll: PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows FlatRedBall.dll: PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows X10.FRB.dll: PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows ARES.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows unins000.exe: PE32 executable (GUI) Intel 80386, for MS Windows
$ wine ./ARES.exe
... Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Song playback failed. Please verify that the song is not DRM protected. DRM protected songs are not supported for creator games. ---> System.InvalidOperationException: An unexpected error has occurred. --- End of inner exception stack trace --- at Microsoft.Xna.Framework.Media.MediaQueue.Play(Song song) at Microsoft.Xna.Framework.Media.MediaPlayer.Play(Song song) at Trashman.Screens.Screen.SetBGMusic(String soundName) at Trashman.Screens.MainMenuScreen..ctor() --- End of inner exception stack trace --- at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) at System.Activator.CreateInstance(Type type, Boolean nonPublic) at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) at Trashman.Screens.ScreenManager.LoadScreen(String screen, Layer layerToLoadScreenOn, Object[] args) at Trashman.Screens.ScreenManager.Activity() at Trashman.Trashman.Update(GameTime gameTime) at Microsoft.Xna.Framework.Game.Tick() at Microsoft.Xna.Framework.Game.HostIdle(Object sender, EventArgs e) at Microsoft.Xna.Framework.GameHost.OnIdle() at Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object sender, EventArgs e) at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at Microsoft.Xna.Framework.WindowsGameHost.Run() at Microsoft.Xna.Framework.Game.Run() at Trashman.Program.Main(String[] args) wine: Unhandled exception 0xe0434f4d in thread 9 at address 0x7b446fe6 (thread 0009), starting debugger... --- snip ---
--- snip --- ... 0043:Call quartz.DllGetClassObject(0998f428,7e260488,0998f438) ret=7e18123f 0043:trace:quartz:DllGetClassObject ({e436ebb3-524f-11ce-9f53-0020af0ba770},{00000001-0000-0000-c000-000000000046},0x998f438) ... 0043:Ret quartz.DllGetClassObject() retval=00000000 ret=7e18123f ... 0043:trace:quartz:DSCF_CreateInstance (0x72abd48)->(0x72accd0,{00000000-0000-0000-c000-000000000046},0x998f23c) 0043:trace:quartz:FilterMapper2_create (0x72accd0, 0x998f1dc) .. 0043:Ret ole32.CoCreateInstance() retval=00000000 ret=7a73c51a 0043:trace:quartz:FilterGraphInner_QueryInterface (0x72accd0)->({56a868a9-0ad4-11ce-b03a-0020af0ba770}, 0x998f43c) 0043:trace:quartz:FilterGraphInner_QueryInterface returning IGraphBuilder interface (0x72accd4) 0043:trace:quartz:FilterGraph2_AddRef (0x72accd0/0x72accd4)->() 0043:trace:quartz:FilterGraphInner_AddRef (0x72accd0)->(): new ref = 2 0043:trace:quartz:FilterGraphInner_Release (0x72accd0)->(): new ref = 1 ... 0043:Ret ole32.CoCreateInstance() retval=00000000 ret=1002e904 0043:trace:quartz:FilterGraph2_QueryInterface (0x72accd0/0x72accd4)->({56a868b1-0ad4-11ce-b03a-0020af0ba770}, 0x2f15dec) 0043:trace:quartz:FilterGraphInner_QueryInterface (0x72accd0)->({56a868b1-0ad4-11ce-b03a-0020af0ba770}, 0x2f15dec) 0043:trace:quartz:FilterGraphInner_QueryInterface returning IMediaControl interface (0x72accd8) 0043:trace:quartz:MediaControl_AddRef (0x72accd0/0x72accd8)->() 0043:trace:quartz:FilterGraphInner_AddRef (0x72accd0)->(): new ref = 2 0043:trace:quartz:FilterGraph2_QueryInterface (0x72accd0/0x72accd4)->({56a868c0-0ad4-11ce-b03a-0020af0ba770}, 0x2f15de4) 0043:trace:quartz:FilterGraphInner_QueryInterface (0x72accd0)->({56a868c0-0ad4-11ce-b03a-0020af0ba770}, 0x2f15de4) 0043:trace:quartz:FilterGraphInner_QueryInterface returning IMediaEvent(Ex) interface (0x72accec) 0043:trace:quartz:MediaEvent_AddRef (0x72accd0/0x72accec)->() 0043:trace:quartz:FilterGraphInner_AddRef (0x72accd0)->(): new ref = 3 0043:trace:quartz:FilterGraph2_QueryInterface (0x72accd0/0x72accd4)->({36b73880-c2c8-11cf-8b46-00805f6cef60}, 0x2f15de8) 0043:trace:quartz:FilterGraphInner_QueryInterface (0x72accd0)->({36b73880-c2c8-11cf-8b46-00805f6cef60}, 0x2f15de8) 0043:trace:quartz:FilterGraphInner_QueryInterface returning IMediaSeeking interface (0x72accdc) 0043:trace:quartz:MediaSeeking_AddRef (0x72accd0/0x72accdc)->() 0043:trace:quartz:FilterGraphInner_AddRef (0x72accd0)->(): new ref = 4 0043:trace:quartz:FilterGraph2_QueryInterface (0x72accd0/0x72accd4)->({56a868b3-0ad4-11ce-b03a-0020af0ba770}, 0x2f15df0) 0043:trace:quartz:FilterGraphInner_QueryInterface (0x72accd0)->({56a868b3-0ad4-11ce-b03a-0020af0ba770}, 0x2f15df0) 0043:trace:quartz:FilterGraphInner_QueryInterface returning IBasicAudio interface (0x72acce0) 0043:trace:quartz:BasicAudio_AddRef (0x72accd0/0x72acce0)->() 0043:trace:quartz:FilterGraphInner_AddRef (0x72accd0)->(): new ref = 5 0043:Call ole32.CoCreateInstance(10078e6c,00000000,00000001,10078fbc,02f15df8) ret=1002df1e 0043:Call ntdll.RtlInitUnicodeString(0998f2a0,0998f2f2 L"CLSID\{94297043-BD82-4DFD-B0DE-8177739C6D20}") ret=7e17eefa 0043:Ret ntdll.RtlInitUnicodeString() retval=0998f2a0 ret=7e17eefa ... 0043:err:ole:CoGetClassObject class {94297043-bd82-4dfd-b0de-8177739c6d20} not registered 0043:err:ole:CoGetClassObject no class object {94297043-bd82-4dfd-b0de-8177739c6d20} could be created for context 0x1 0043:Ret ole32.CoCreateInstance() retval=80040154 ret=1002df1e 0043:trace:quartz:FilterGraph2_Release (0x72accd0/0x72accd4)->() 0043:trace:quartz:FilterGraphInner_Release (0x72accd0)->(): new ref = 4 0043:trace:quartz:MediaControl_Release (0x72accd0/0x72accd8)->() 0043:trace:quartz:FilterGraphInner_Release (0x72accd0)->(): new ref = 3 0043:trace:quartz:MediaEvent_Release (0x72accd0/0x72accec)->() 0043:trace:quartz:FilterGraphInner_Release (0x72accd0)->(): new ref = 2 0043:trace:quartz:MediaSeeking_Release (0x72accd0/0x72accdc)->() 0043:trace:quartz:FilterGraphInner_Release (0x72accd0)->(): new ref = 1 0043:trace:quartz:BasicAudio_Release (0x72accd0/0x72acce0)->() 0043:trace:quartz:FilterGraphInner_Release (0x72accd0)->(): new ref = 0 0043:trace:quartz:MediaControl_Stop (0x72accd0/0x72accd8)->() 0043:trace:quartz:Inner_Release (0x72ad118)->(): new ref = 0 ... 0043:trace:wmp:OleObject_Release (0x72ab6a8) ref=0 0043:trace:wmp:WMPControls_stop (0x72ab6a8) 0043:Call user32.DestroyWindow(0001009e) ret=7afc9f9d ... 0043:Ret user32.DestroyWindow() retval=00000001 ret=7afc9f9d ... 0035:Call KERNEL32.RaiseException(e0434f4d,00000001,00000001,0033e934) ret=79f97065 0035:trace:seh:raise_exception code=e0434f4d flags=1 addr=0x7b446fe6 ip=7b446fe6 tid=0035 0035:trace:seh:raise_exception info[0]=80131509 0035:trace:seh:raise_exception eax=7b4356b1 ebx=0015c368 ecx=00000000 edx=0033e914 esi=0033e914 edi=0033e8e0 0035:trace:seh:raise_exception ebp=0033e8b8 esp=0033e854 cs=330023 ds=3966002b es=33002b fs=f7c20063 gs=7bd0006b flags=00200212 0035:trace:seh:call_stack_handlers calling handler at 0x79f9a3c8 code=e0434f4d flags=1 0035:Call msvcr80._except_handler4_common(7a381240,79e717fb,0033e860,0033e94c,0033e57c,0033e46c) ret=79f9a3e7 0035:trace:seh:_except_handler4_common exception e0434f4d flags=1 at 0x7b446fe6 handler=0x79f9a3c8 0x33e57c 0x33e46c cookie=242a3a09 scope table=0x79f97080 cookies=-2/0,-72/0 0035:trace:seh:_except_handler4_common level 0 prev -2 filter 0x79f9709c 0035:trace:seh:_except_handler4_common filter returned CONTINUE_SEARCH 0035:trace:seh:_except_handler4_common reached -2, returning ExceptionContinueSearch 0035:Ret msvcr80._except_handler4_common() retval=00000001 ret=79f9a3e7 0035:trace:seh:call_stack_handlers handler at 0x79f9a3c8 returned 1 0035:trace:seh:call_stack_handlers calling handler at 0x7a3197d4 code=e0434f4d flags=1 0035:trace:seh:cxx_frame_handler handling C exception code e0434f4d rec 0x33e860 frame 0x33ea14 trylevel 1 descr 0x7a3197f4 nested_frame (nil) 0035:trace:seh:call_stack_handlers handler at 0x7a3197d4 returned 1 0035:trace:seh:call_stack_handlers calling handler at 0x79f948ec code=e0434f4d flags=1 --- snip ---
'{94297043-BD82-4DFD-B0DE-8177739C6D20}' -> CLSID_WMAudioDecoderDMO
C++ calling C# COM interop error: HRESULT 0x80131509 = COR_E_INVALIDOPERATION
--- snip --- namespace Microsoft.Xna.Framework.Media { public sealed class MediaQueue { internal MediaQueue() { }
internal void Play(Song song) { if (song == (Song) null) throw new ArgumentNullException(nameof (song), FrameworkResources.NullNotAllowed); ErrorCodes error = !song.IsValidHandle ? ErrorCodes.E_FAIL : UnsafeNativeMethods.MediaQueue_PlaySong(song.Handle); if (Helpers.Failed(error)) throw new InvalidOperationException(FrameworkResources.SongPlaybackFailed, Helpers.GetExceptionFromResult((uint) error)); } ... --- snip ---
--- snip --- internal static ErrorCodes MediaQueue_PlaySong(uint handle) { return (ErrorCodes) WmpProxyThread.RunInRightApartment((WmpProxyFunction) (() => WmpInterface.MediaQueue_PlaySong(handle))); } --- snip ---
--- snip --- public static unsafe int MediaQueue_PlaySong(uint song) { Monitor.Enter(WmpInterface.pSyncObject); try { int num1 = WmpInterface.EnsureWMPInitialized(); ... int num2 = __calli((__FnPtr<int (IntPtr, ushort*, ushort*, IWMPPlaylist**)>) *(int*) (*(int*) WmpInterface.wmpPlayer + 116))((IWMPPlaylist**) WmpInterface.wmpPlayer, (ushort*) 0, (ushort*) 0, (IntPtr) &iwmpPlaylistPtr1); ...
} finally { Monitor.Exit(WmpInterface.pSyncObject); } } --- snip ---
Using native 'qasf.dll' (registering the COM inproc server) makes it work. The aforementioned game runs into other problems afterwards.
$ sha1sum ARES_Demo_setup.exe 042abbabd5f6b1bbe7418acba7c4cdd9d9df34f6 ARES_Demo_setup.exe
$ du -sh ARES_Demo_setup.exe 118M ARES_Demo_setup.exe
$ wine --version wine-3.11
Regards