~ubuntu-branches/ubuntu/trusty/bml/trusty-proposed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
$Id: TODO 3726 2011-12-02 21:34:15Z ensonic $

= general =
* rename public API in BuzzMachineLoader.h
  BuzzMachine -> BMLMachine
  BuzzMachineProperty -> BMLMachineProperty
  ...

* charsets, should we convert all strings to UTF-8 in here already?

= more tools =
== bmldump_src_skel ==
dump a source skelleton for rewriting a machine

== debugging ==
write a gdb script that enhances backtraces like:https://github.com/shinh/maloader/blob/master/gdb_maloader.py
https://github.com/shinh/maloader/blob/master/gdb_maloader.py

= testing =
modify tests/testmachine.sh
eventually improve scrolling:
  http://www.litotes.demon.co.uk/example_scripts/tableScroll.html
result should go to a given directory (use date-time when not provided)

= unemulated used libs =

grep -ho "Win32 LoadLibrary failed to load.*" testmachine/*.txt* | sort | uniq -c | sort -g

      3 wine/module: Win32 LoadLibrary failed to load: COMCTL32.dll
     28 wine/module: Win32 LoadLibrary failed to load: comdlg32.dll
      1 wine/module: Win32 LoadLibrary failed to load: DSOUND.dll
   2588 wine/module: Win32 LoadLibrary failed to load: GDI32.dll
  81803 wine/module: Win32 LoadLibrary failed to load: KERNEL32.dll
    147 wine/module: Win32 LoadLibrary failed to load: MSVCRT.dll
    254 wine/module: Win32 LoadLibrary failed to load: ole32.dll
     30 wine/module: Win32 LoadLibrary failed to load: OLEAUT32.dll
     20 wine/module: Win32 LoadLibrary failed to load: oledlg.dll
     18 wine/module: Win32 LoadLibrary failed to load: OLEPRO32.DLL
      2 wine/module: Win32 LoadLibrary failed to load: SHELL32.dll
      1 wine/module: Win32 LoadLibrary failed to load: SHLWAPI.dll
   4775 wine/module: Win32 LoadLibrary failed to load: USER32.dll
     44 wine/module: Win32 LoadLibrary failed to load: WINMM.dll
     63 wine/module: Win32 LoadLibrary failed to load: WINSPOOL.DRV

* ole stuff could be machines using auxbus
* DSOUND.dll
  Geonik's Dx Input.dll
* SHLWAPI.dll
  BuzzInAMovie.dll
* SHELL32.dll
  Rout VST Plugin Loader.dll
  mimo's miXo.dll

= missing window function entries =

unk_??0_Lockit@std@@QAE@XZ
unk_??1_Lockit@std@@QAE@XZ

unk_joyGetDevCapsA
unk_joyGetNumDevs
unk_joyGetPos

unk_waveInOpen

unk_midiOutGetNumDevs
unk_midiOutOpen

MFC42.DLL (check MFC42.DEF file)
  unk_MFC42.DLL:823 : ??2@YAPAXI@Z
  unk_MFC42.DLL:1176 : ?AfxGetThreadState@@YGPAV_AFX_THREAD_STATE@@XZ
  unk_MFC42.DLL:1243 : ?AfxSetModuleState@@YGPAVAFX_MODULE_STATE@@PAV1@@Z

user32.dll
  unk_CreateDialogParamA : http://msdn.microsoft.com/en-us/library/ms645445(VS.85).aspx
  unk_GetWindowTextA : http://msdn.microsoft.com/en-us/library/ms633520(VS.85).aspx
  unk_LoadIconA : http://msdn.microsoft.com/en-us/library/ms648072.aspx
  unk_SendMessageA : http://msdn.microsoft.com/en-us/library/ms644950.aspx
  unk_SetWindowPos : http://msdn.microsoft.com/en-us/library/ms633545.aspx
  unk_VkKeyScanA : http://msdn.microsoft.com/en-us/library/ms646329.aspx

Microsoft DirectShow 9.0
  unk_DMOEnum : http://msdn.microsoft.com/en-us/library/ms783373(VS.85).aspx

Kernel32.dll
  unk_FlsAlloc : http://msdn.microsoft.com/en-us/library/ms682664(VS.85).aspx
  unk_FlsFree
  unk_FlsSetValue
  unk_ResumeThread : http://msdn.microsoft.com/en-us/library/ms685086(VS.85).aspx

Gdi32.lib
  unk_GetStockObject : http://msdn.microsoft.com/en-us/library/ms533223.aspx

= list missing machine for songs =
for file in *.bmx; do ~/buzztard/bin/bt-cmd 2>/dev/null --command=info --input-file=$file | grep "  bml-"; done | sort | uniq -c | sort -n

= list songs that have no missing machines =
for file in *.bmx; do ~/buzztard/bin/bt-cmd 2>/dev/null --command=info --input-file=$file | grep -q "  bml-" || echo $file; done

= missing features =
* getting access to Patterns/Sequence

= getting better diagnostics on failure
http://www.eptacom.net/pubblicazioni/pub_eng/except.html
http://www.eptacom.net/pubblicazioni/pub_eng/assert.html
http://www.codeproject.com/KB/threads/StackWalker.aspx

== tools ==
use mingw-binutils to dump win32 binaries
/usr/local/i386-mingw32/bin/objdump -t MSVCRT.DLL
/usr/i586-mingw32msvc/bin/objdump ...


= x86_64 bit support for native plugins =
- we need to build a launcher+libbml with -m32
- in libbml's #ifdef HAVE_X86 section, we need to have alternative implementations
  for 64bit
  - the 32bit build would use the one we have there
  - the 64bit build would need to do IPC
  - the 32bit launcher would need to receive IPC and dispatch
- the front-env tests (bmltest_*) would remain as they are
- will we launch 1 helper per using process or 1 herlper per machine
  - 1 helper per process: 1 shm key
- creating the BuzzMachineHandle / BuzzMachine will create proxy structures with
  the ids for the launcher (index values to arrays on the launcher side)
- for the IPC we need to marshall (function, parameters, data)
  - we can just enumerate the API calls
  - the parameters will be hardcoded for each function

= test single plugins =
G_SLICE=always-malloc G_DEBUG=gc-friendly GLIBCPP_FORCE_NEW=1 GLIBCXX_FORCE_NEW=1 valgrind --tool=memcheck --leak-check=full --leak-resolution=high --trace-children=yes --num-callers=20 -v ../src/.libs/bmltest_info ~/buzztard/lib/Gear-real/Effects/Static\ Duafilt\ II.dll
../src/.libs/bmltest_info ~/buzztard/lib/Gear-real/Effects/Static\ Duafilt\ II.dll


= what windows dll to copy and which not =
== don't (we need to emulate) ==
kernel32.dll ntdll.dll
== seems safe ==
msvcp50.dll  msvcp60.dll MFC42.DLL MSVCRT.DLL


= buzz emulation =
== mdk machine ==
* we need to do ::AddInput() and ::DeleteInput to get input-mixing working
 (even though we would always just give one input).
* before we call WorkXXX() we need to call
  MachineInterfaceEx::Input(float *psamples, int numsamples, float amp)

other-sources/buzz-sources/__BUZZ1PLAYER__NOT_FOR_PUBLIC!/CMachine.cpp
* stereo output MIF_DOES_INPUT_MIXING machines will get stereo input
* bm->callbacks->mdkHelper->numChannels
== auxbus machines ==
* currently all auxbus using machines fail

= machine tests =
== hoshi ==
2008.02.22 : Of 532 machine(s) 448 worked and 84 failed to load.
2008.02.23 : Of 533 machine(s) 457 worked and 76 failed to load.
2008.11.19 : Of 533 machine(s) 458 worked and 75 failed to load.
2009.01.29 : Of 533 machine(s) 451 worked, 9 did not processed data and 73 failed to load.
2009.11.02 : Of 537 machine(s) 454 worked, 10 did not processed data and 73 failed to load
2010.02.03 : Of 517 machine(s) 433 worked, 9 did not processed data and 75 failed to load
2011.01.09 : Of 517 machine(s) 444 worked, 6 did not processed data and 67 failed to load.

== sterni/mautz ==
2008.10.14 : Of 853 machine(s) 759 worked and 94 failed to load.
2008.11.20 : Of 853 machine(s) 758 worked and 95 failed to load.
2011.01.11 : Of 857 machine(s) 760 worked, 7 did not processed data and 90 failed to load.

In gst-buzztard/src/bml/plugin.c I maintain a black list.

There seems to be several machines failing when calling GetInfo()
tail -n1 *.fail | grep -B1 "GetInfo"

== Generators ==
Geonik's PrimiFun.dll
  if we don't have MFC42.dll
    Called unk_MFC42.DLL:1176
    Called unk_MFC42.DLL:1243
    Called unk_MFC42.DLL:823
      - its library:ordinal
  if we have MFC42.DLL
    Called unk_GetConsoleMode
m4wii.dll
  if we don't have MFC42.dll
    Called unk_MFC42.DLL:1176
    Called unk_MFC42.DLL:1243
  if we have MFC42.DLL
    Called unk__CxxThrowException
    http://www.winehq.org/pipermail/wine-patches/2002-October/003917.html
    http://source.winehq.org/source/dlls/msvcrt/cppexcept.c
    http://source.winehq.org/source/dlls/msvcrt/cppexcept.h
    If we wrap this localy, the unk__ is gone (empty impl), but it segfaults.
    Maybe we need a full impl.
mimo's MidiGen.dll
  win32.c: TLS_COUNT is not enough
Jeskola Bass 2.dll
  buzzmachinecallbackspre12.cpp:105:BuzzMachineCallbacksPre12::MidiOut (dev=1,data=136987296)
Jeskola Tracker.dll
  if we don't have MFC42.dll
    Called unk_MFC42.DLL:823
  if we have MFC42.DLL
    Called unk__CxxThrowException
Ruff SPECCY II.dll
HD Percussive_FM.dll
  crash after ?

Aeguelles TB4004
  noisy distortion

== Effects ==
Arguelles TruePan
Jeskola XDelay (causes distortions)
Jeskola Raverb (causes distortions)
  BuzzMachineCallbacks::GetEnvSize (wave=-96185375,env=0)
  buzzmachinecallbackspre12.cpp:112:BuzzMachineCallbacksPre12::GetOscillatorTable (waveform=-128840458)
Jeskola Stereo Reverb (sometimes silences the whole song, NAN?)
Effects/Jeskola Wave Shaper.dll
  if we don't have MFC42.DLL
    Called unk_MFC42.DLL:1176
    Called unk_MFC42.DLL:1243
  if we have MFC42.DLL
    Entering DllMain(DLL_PROCESS_ATTACH) for /home/ensonic/buzztard/lib/win32/mfc42.dll
    Segmentation fault
Sonic Verb (seems to work now)
  buzzmachinecallbacks.cpp:199:BuzzMachineCallbacks::GetEnvPoint (wave=-1,env=-1,i=-1076278224,&x,&y,&flags)
  buzzmachinecallbacks.cpp:276:BuzzMachineCallbacks::SetSequenceData (row=-1217504548,ppat=B7A5B3C4)
Dolby Prologic Echo
  Param Direction : val [1 ... d=4096/n=0 ... 255], the def-val for an enum, can't be outside the range

Ynzn's Remote Compressor.dll
Ynzn's Remote Gate.dll
  both crash (problem with name? - no we have others with "'")
PSI Corp's LFO Filter.dll
Repeater.dll
RnZnAnFnCnR VST Effect Adapter.dll
Rnznanf Vst Effect Adapter.dll
Rout VST Plugin Loader.dll
Shaman Chorus.dll
WhiteNoise AuxReturn.dll
  crash

Zu*.dll
  #0  0xb7fce4e2 in exp_EH_prolog () from /home/ensonic/buzztard/lib/libbml.so.0
  #1  0xb7c9e38a in ?? ()
  #2  0x1001a898 in ?? ()
  #3  0xb7fafad4 in bmlw_open (bm_file_name=0xbfffeffe "/home/ensonic/buzztard/lib/Gear-real/Effects/Zu Parametric EQ.dll") at bml.c:207
  #4  0x080490cb in bmlw_test_info (libpath=0xbfffeffe "/home/ensonic/buzztard/lib/Gear-real/Effects/Zu Parametric EQ.dll") at bmltest_info.h:34
  #5  0x0804ab15 in main (argc=2, argv=0xbfffed64) at bmltest_info.c:96