[Bug 34622] Multiple games need CLSID_DMOWrapperFilter/DMO Wrapper Filter '{94297043-bd82-4dfd-b0de-8177739c6d20}', 'qasf.dll' (Neocron, Age of empires III Steam, .NET XNA 3.x/4.x games using Media classes)

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Jun 23 08:27:32 CDT 2018


https://bugs.winehq.org/show_bug.cgi?id=34622

Anastasius Focht <focht at 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 at 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).aspx

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

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list