[Bug 48677] Exact Audio Copy (EAC) 1.4 plugins don't function with Wine-Mono

WineHQ Bugzilla wine-bugs at winehq.org
Mon Mar 2 04:30:00 CST 2020


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

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |NEW

--- Comment #5 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

using Mono trace facility it reveals:

(NOTE: 'ChromaPlugin.dll' hosts AcoustID plugin)

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files (x86)/Exact Audio Copy

$ WINEDEBUG=+seh,+loaddll WINE_MONO_TRACE=all wine ./EAC.exe >>log.txt 2>&1
...
007a:trace:loaddll:load_native_dll Loaded L"C:\\Program Files (x86)\\Exact
Audio Copy\\PluginHandler.dll" at 0xf830000: native
007a:trace:loaddll:load_native_dll Loaded
L"C:\\windows\\mono\\mono-2.0\\lib\\mono\\gac\\System\\4.0.0.0__b77a5c561934e089\\System.dll"
at 0xf840000: native
[0000007A: 0.01398 0] ENTER: (wrapper runtime-invoke)
object:runtime_invoke_void__this__
(object,intptr,intptr,intptr)([MetadataPlugIn.PluginHandler:0DC00388],
00000000, 0134EFD4, 0F782DF0, )
[0000007A: 0.01401 1] ENTER: MetadataPlugIn.PluginHandler:.ctor
()(this:0DC00388[MetadataPlugIn.PluginHandler mscorlib.dll], )
[0000007A: 0.01417 2] ENTER: (wrapper alloc) object:AllocVector
(intptr,intptr)(01DC22C8, 00000000, )
[0000007A: 0.01418 2] LEAVE: (wrapper alloc) object:AllocVector
(intptr,intptr)[HelperFunctionsLib.IMetadataRetriever[]:0DC00458]
[0000007A: 0.01419 2] ENTER: (wrapper alloc) object:AllocVector
(intptr,intptr)(01DC24C8, 00000000, )
[0000007A: 0.01420 2] LEAVE: (wrapper alloc) object:AllocVector
(intptr,intptr)[HelperFunctionsLib.IAudioDataTransfer[]:0DC00468]
[0000007A: 0.01420 2] ENTER: (wrapper alloc) object:AllocSmall
(intptr,intptr)(01DC25E8, 00000018, )
...
[0000007A: 0.32151 7] ENTER: (wrapper managed-to-native)
System.Reflection.Assembly:LoadFile_internal
(string,System.Threading.StackCrawlMark&)([STRING:0DC0F998:C:\Program Files
(x86)\Exact Audio Copy\ChromaPlugin.dll], [BYREF:0134ED1C], )
007a:trace:loaddll:load_native_dll Loaded L"C:\\Program Files (x86)\\Exact
Audio Copy\\ChromaPlugin.dll" at 0xfb30000: native
[0000007A: 0.32389 7] LEAVE: (wrapper managed-to-native)
System.Reflection.Assembly:LoadFile_internal
(string,System.Threading.StackCrawlMark&)[System.Reflection.RuntimeAssembly:0DC0FA18]
[0000007A: 0.32401 7] ENTER: System.Reflection.Assembly:op_Inequality
(System.Reflection.Assembly,System.Reflection.Assembly)([System.Reflection.RuntimeAssembly:0DC0FA18],
00000000, )
[0000007A: 0.32403 7] LEAVE: System.Reflection.Assembly:op_Inequality
(System.Reflection.Assembly,System.Reflection.Assembly)result=277086977
[0000007A: 0.32403 6] LEAVE: System.Reflection.Assembly:LoadFile
(string,System.Security.Policy.Evidence)[System.Reflection.RuntimeAssembly:0DC0FA18]
[0000007A: 0.32404 5] LEAVE: System.Reflection.Assembly:LoadFile
(string)[System.Reflection.RuntimeAssembly:0DC0FA18]
[0000007A: 0.32411 5] ENTER: System.Reflection.Assembly:CreateInstance
(string)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll],
[STRING:0F7EC120:MetadataPlugIn.MetadataRetriever], )
[0000007A: 0.32425 6] ENTER: System.Reflection.Assembly:CreateInstance
(string,bool)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll],
[STRING:0F7EC120:MetadataPlugIn.MetadataRetriever], 0, )
[0000007A: 0.32437 7] ENTER: System.Reflection.RuntimeAssembly:GetType
(string,bool,bool)(this:0DC0FA18[System.Reflection.RuntimeAssembly
mscorlib.dll], [STRING:0F7EC120:MetadataPlugIn.MetadataRetriever], 0, 0, )
[0000007A: 0.32449 8] ENTER: string:memset (byte*,int,int)(0134EBA0, 0, 68, )
[0000007A: 0.32450 8] LEAVE: string:memset (byte*,int,int)
[0000007A: 0.32451 8] ENTER: (wrapper managed-to-native)
System.Reflection.Assembly:InternalGetType
(System.Reflection.Assembly,System.Reflection.Module,string,bool,bool)([System.Reflection.RuntimeAssembly:0DC0FA18],
00000000, [STRING:0F7EC120:MetadataPlugIn.MetadataRetriever], 0, 0, )
[0000007A: 0.32453 8] LEAVE: (wrapper managed-to-native)
System.Reflection.Assembly:InternalGetType
(System.Reflection.Assembly,System.Reflection.Module,string,bool,bool)[OBJECT:00000000]
[0000007A: 0.32454 7] LEAVE: System.Reflection.RuntimeAssembly:GetType
(string,bool,bool)[OBJECT:00000000]
[0000007A: 0.32454 6] LEAVE: System.Reflection.Assembly:CreateInstance
(string,bool)[OBJECT:00000000]
[0000007A: 0.32455 5] LEAVE: System.Reflection.Assembly:CreateInstance
(string)[OBJECT:00000000]
[0000007A: 0.32456 5] ENTER: System.Reflection.Assembly:CreateInstance
(string)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll],
[STRING:0F7EC170:AudioDataPlugIn.AudioDataTransfer], )
[0000007A: 0.32457 6] ENTER: System.Reflection.Assembly:CreateInstance
(string,bool)(this:0DC0FA18[System.Reflection.RuntimeAssembly mscorlib.dll],
[STRING:0F7EC170:AudioDataPlugIn.AudioDataTransfer], 0, )
[0000007A: 0.32458 7] ENTER: System.Reflection.RuntimeAssembly:GetType
(string,bool,bool)(this:0DC0FA18[System.Reflection.RuntimeAssembly
mscorlib.dll], [STRING:0F7EC170:AudioDataPlugIn.AudioDataTransfer], 0, 0, )
[0000007A: 0.32458 8] ENTER: string:memset (byte*,int,int)(0134EBA0, 0, 68, )
[0000007A: 0.32459 8] LEAVE: string:memset (byte*,int,int)
[0000007A: 0.32460 8] ENTER: (wrapper managed-to-native)
System.Reflection.Assembly:InternalGetType
(System.Reflection.Assembly,System.Reflection.Module,string,bool,bool)([System.Reflection.RuntimeAssembly:0DC0FA18],
00000000, [STRING:0F7EC170:AudioDataPlugIn.AudioDataTransfer], 0, 0, )
007a:trace:loaddll:load_native_dll Loaded L"C:\\Program Files (x86)\\Exact
Audio Copy\\Interop.HelperFunctionsLib.dll" at 0xfb40000: native
[0000007A: 0.32666 8] LEAVE: (wrapper managed-to-native)
System.Reflection.Assembly:InternalGetType
(System.Reflection.Assembly,System.Reflection.Module,string,bool,bool)[System.RuntimeType:0F80D188]
[0000007A: 0.32668 7] LEAVE: System.Reflection.RuntimeAssembly:GetType
(string,bool,bool)[System.RuntimeType:0F80D188]
[0000007A: 0.32680 7] ENTER: System.Activator:CreateInstance
(System.Type)([TYPE:AudioDataPlugIn.AudioDataTransfer], )
[0000007A: 0.32688 8] ENTER: System.Activator:CreateInstance
(System.Type,bool)([TYPE:AudioDataPlugIn.AudioDataTransfer], 0, )
[0000007A: 0.32702 9] ENTER: System.Activator:CreateInstance
(System.Type,bool,bool)([TYPE:AudioDataPlugIn.AudioDataTransfer], 0, 1, )
...
[0000007A: 0.33116 15] ENTER: (wrapper managed-to-native)
System.RuntimeTypeHandle:GetAttributes
(System.RuntimeType)([TYPE:AudioDataPlugIn.AudioDataTransfer], )
[0000007A: 0.33117 15] LEAVE: (wrapper managed-to-native)
System.RuntimeTypeHandle:GetAttributes (System.RuntimeType)result=1048577
[0000007A: 0.33118 14] LEAVE: System.RuntimeType:GetAttributeFlagsImpl
()result=1048577
[0000007A: 0.33118 13] LEAVE: System.Type:get_IsAbstract ()result=30932992
[0000007A: 0.33119 13] ENTER:
System.Reflection.RuntimeConstructorInfo:InternalInvoke
(object,object[],bool)(this:0DC0FB48[System.Reflection.RuntimeConstructorInfo
mscorlib.dll], 00000000, 00000000, 1, )
[0000007A: 0.33120 14] ENTER: (wrapper managed-to-native)
System.Reflection.RuntimeConstructorInfo:InternalInvoke
(System.Reflection.RuntimeConstructorInfo,object,object[],System.Exception&)([System.Reflection.RuntimeConstructorInfo:0DC0FB48],
00000000, 00000000, [BYREF:0134E8F8], )
[0000007A: 0.33150 15] ENTER: (wrapper runtime-invoke)
object:runtime_invoke_void__this__
(object,intptr,intptr,intptr)([AudioDataPlugIn.AudioDataTransfer:0DC0FB88],
00000000, 0134E63C, 0FB2D028, )
[0000007A: 0.33152 16] ENTER: AudioDataPlugIn.AudioDataTransfer:.ctor
()(this:0DC0FB88[AudioDataPlugIn.AudioDataTransfer mscorlib.dll], )
[0000007A: 0.33153 16] LEAVE: AudioDataPlugIn.AudioDataTransfer:.ctor ()
[0000007A: 0.33154 15] LEAVE: (wrapper runtime-invoke)
object:runtime_invoke_void__this__
(object,intptr,intptr,intptr)[OBJECT:00000000]
[0000007A: 0.33154 14] LEAVE: (wrapper managed-to-native)
System.Reflection.RuntimeConstructorInfo:InternalInvoke
(System.Reflection.RuntimeConstructorInfo,object,object[],System.Exception&)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33155 13] LEAVE:
System.Reflection.RuntimeConstructorInfo:InternalInvoke
(object,object[],bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33156 12] LEAVE: System.RuntimeType:CreateInstanceMono
(bool,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33157 11] LEAVE: System.RuntimeType:CreateInstanceSlow
(bool,bool,bool,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33157 10] LEAVE: System.RuntimeType:CreateInstanceDefaultCtor
(bool,bool,bool,bool,System.Threading.StackCrawlMark&)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33158 9] LEAVE: System.Activator:CreateInstance
(System.Type,bool,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33159 8] LEAVE: System.Activator:CreateInstance
(System.Type,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33159 7] LEAVE: System.Activator:CreateInstance
(System.Type)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33160 6] LEAVE: System.Reflection.Assembly:CreateInstance
(string,bool)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33161 5] LEAVE: System.Reflection.Assembly:CreateInstance
(string)[AudioDataPlugIn.AudioDataTransfer:0DC0FB88]
[0000007A: 0.33183 5] ENTER: (wrapper runtime-invoke)
object:runtime_invoke_void__this__
(object,intptr,intptr,intptr)([System.InvalidCastException:0DC0FBB0], 00000000,
0134EBCC, 0FB2D650, )
[0000007A: 0.33186 6] ENTER: System.InvalidCastException:.ctor
()(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], )
[0000007A: 0.33187 7] ENTER: System.SystemException:.ctor
(string)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll],
[STRING:0F7EC210:Specified cast is not valid.], )
[0000007A: 0.33189 8] ENTER: System.Exception:.ctor
(string)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll],
[STRING:0F7EC210:Specified cast is not valid.], )
[0000007A: 0.33191 9] ENTER: System.Exception:Init
()(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], )
[0000007A: 0.33192 10] ENTER: System.Exception:set_HResult
(int)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], -2146233088, )
[0000007A: 0.33192 10] LEAVE: System.Exception:set_HResult (int)
[0000007A: 0.33193 10] ENTER: (wrapper alloc) object:AllocSmall
(intptr,intptr)(01D88A30, 0000001C, )
[0000007A: 0.33194 10] LEAVE: (wrapper alloc) object:AllocSmall
(intptr,intptr)[System.Runtime.Serialization.SafeSerializationManager:0DC0FC40]
[0000007A: 0.33196 10] ENTER:
System.Runtime.Serialization.SafeSerializationManager:.ctor
()(this:0DC0FC40[System.Runtime.Serialization.SafeSerializationManager
mscorlib.dll], )
[0000007A: 0.33197 10] LEAVE:
System.Runtime.Serialization.SafeSerializationManager:.ctor ()
[0000007A: 0.33198 9] LEAVE: System.Exception:Init ()
[0000007A: 0.33198 8] LEAVE: System.Exception:.ctor (string)
[0000007A: 0.33199 8] ENTER: System.Exception:set_HResult
(int)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], -2146233087, )
[0000007A: 0.33200 8] LEAVE: System.Exception:set_HResult (int)
[0000007A: 0.33200 7] LEAVE: System.SystemException:.ctor (string)
[0000007A: 0.33201 7] ENTER: System.Exception:set_HResult
(int)(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], -2147467262, )
[0000007A: 0.33202 7] LEAVE: System.Exception:set_HResult (int)
[0000007A: 0.33202 6] LEAVE: System.InvalidCastException:.ctor ()
[0000007A: 0.33203 5] LEAVE: (wrapper runtime-invoke)
object:runtime_invoke_void__this__
(object,intptr,intptr,intptr)[OBJECT:00000000]
[0000007A: 0.33215 5] ENTER: (wrapper runtime-invoke)
<Module>:runtime_invoke_object__this__
(object,intptr,intptr,intptr)([System.InvalidCastException:0DC0FBB0], 00000000,
0134EBC0, 0FB2DC70, )
[0000007A: 0.33217 6] ENTER: System.Exception:get_Message
()(this:0DC0FBB0[System.InvalidCastException mscorlib.dll], )
[0000007A: 0.33217 6] LEAVE: System.Exception:get_Message
()[STRING:0F7EC210:Specified cast is not valid.]
[0000007A: 0.33218 5] LEAVE: (wrapper runtime-invoke)
<Module>:runtime_invoke_object__this__
(object,intptr,intptr,intptr)[STRING:0F7EC210:Specified cast is not valid.]
[0000007A:] EXCEPTION handling: System.InvalidCastException: Specified cast is
not valid.
EXCEPTION: catch found at clause 1 of MetadataPlugIn.PluginHandler:.ctor ()
--- snip ---

Apparently Wine-Mono can't create 'AudioDataPlugIn.AudioDataTransfer' instance
from the loaded plugin assembly hence the plugin is not considered valid.

The plugin loader handles two types of plugins, implementing either:

* IMetadataRetriever
* IAudioDataTransfer

--- snip ---
// Type: MetadataPlugIn.PluginHandler
// Assembly: PluginHandler, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=null
// MVID: AD42C4E0-3875-4A66-8CC3-3C98BCE8CEDF
// Assembly location: Z:\home\focht\.wine\drive_c\Program Files (x86)\Exact
Audio Copy\PluginHandler.dll

using HelperFunctionsLib;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;

namespace MetadataPlugIn
{
  [Guid("C55D92B1-4FDF-4b54-B817-98AB9569F4F4")]
  [ClassInterface(ClassInterfaceType.None)]
  [ComSourceInterfaces(typeof (IMetadataRetriever))]
  public class PluginHandler : IMetadataRetriever, IPluginSelector,
IAudioDataTransfer
  {
    private IMetadataRetriever[] m_plugins;
    private IAudioDataTransfer[] m_transfer;
    private int m_current_plugin;
    private List<string> m_excluded_guids;

    public PluginHandler()
    {
      this.m_plugins = new IMetadataRetriever[0];
      this.m_transfer = new IAudioDataTransfer[0];
      this.m_current_plugin = -1;
      this.m_excluded_guids = new List<string>();
      base.\u002Ector();
      List<IMetadataRetriever> metadataRetrieverList = new
List<IMetadataRetriever>();
      List<IAudioDataTransfer> audioDataTransferList = new
List<IAudioDataTransfer>();
      string directoryName =
Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
      foreach (FileInfo file in new DirectoryInfo(directoryName).GetFiles())
      {
        if (Path.GetExtension(file.Name) == ".dll")
        {
          try
          {
            Assembly assembly = Assembly.LoadFile(Path.Combine(directoryName,
file.Name));
            try
            {
              IMetadataRetriever instance = (IMetadataRetriever)
assembly.CreateInstance("MetadataPlugIn.MetadataRetriever");
              if (instance != null)
                metadataRetrieverList.Add(instance);
            }
            catch (Exception ex)
            {
            }
            try
            {
              IAudioDataTransfer instance = (IAudioDataTransfer)
assembly.CreateInstance("AudioDataPlugIn.AudioDataTransfer");
              if (instance != null)
                audioDataTransferList.Add(instance);
            }
            catch (Exception ex)
            {
            }
          }
          catch (Exception ex)
          {
          }
        }
      }
      this.m_plugins = metadataRetrieverList.ToArray();
      this.m_transfer = audioDataTransferList.ToArray();
    }
...
--- snip ---

The 'AcoustID' plugin, implementing 'IAudioDataTransfer' interface:

--- snip ---
// Type: AudioDataPlugIn.AudioDataTransfer
// Assembly: ChromaPlugin, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null
// MVID: 32E5E20C-367D-4D05-A362-003AA0FC4CB4
// Assembly location: Z:\home\focht\.wine\drive_c\Program Files (x86)\Exact
Audio Copy\ChromaPlugin.dll

using ChromaPlugin;
using ChromaPrint;
using HelperFunctionsLib;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Net;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Xml;

namespace AudioDataPlugIn
{
  [Guid("EFFF6AE3-3D3B-4f0c-A22E-217C566397B1")]
  [ClassInterface(ClassInterfaceType.None)]
  [ComSourceInterfaces(typeof (IAudioDataTransfer))]
  public class AudioDataTransfer : IAudioDataTransfer
  {
    private const string AppAPIKey = "<redacted>";
    private const string AppAPIKeyTitle = "<redacted>";
    private const string SubmissionURL = "http://api.acoustid.org/v2/submit";
    private const int FingerprintLength = 120;
    private const int SampleRate = 44100;
    private const int NumChannels = 2;
    private const int BitsPerSample = 16;
    private const int BytesPerSecond = 176400;
    private int m_expected_data_length_in_bytes;
    private int m_start_pos;
    private uint m_current_pos;
    private bool m_use_cd;
    private IMetadataLookup m_data;
    private AudioDataTransfer.ChromaTrack[] m_tracks;
    private Dictionary<int, string> m_recordings;
    private string m_discid;

    public string GetAudioTransferPluginGuid()
    {
      Attribute customAttribute = Attribute.GetCustomAttribute((MemberInfo)
typeof (AudioDataTransfer), typeof (GuidAttribute));
      if (customAttribute is GuidAttribute)
        return ((GuidAttribute) customAttribute).Value;
      return this.GetAudioTransferPluginName();
    }
...
--- snip ---

Nothing obvious with the metadata. Maybe Vincent (Wine-Mono maintainer) has
some idea where to look further.

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