paul at linuxaudiosystems.com
Wed Apr 1 11:35:06 UTC 2009
On Wed, Apr 1, 2009 at 7:26 AM, Fabian Greffrath <greffrath at leat.rub.de> wrote:
> Hey Paul,
> Paul Davis schrieb:
>> ardourvst is a win32 executable (about 1 line of C code).
> could you explain to me why it isn't possible to create a native Linux
> application of ardourvst ?
we want to support VST plugins *inside* ardour because otherwise their
use does not scale. running them out of process works if you want to
use a few plugins (e.g. a couple of instruments, maybe a reverb on the
master bus). people who want to do this can use FST or some VST
wrapper (dssi-vst etc). however, this doesn't work if you want a VST
EQ and compressor on every track - it implies 2 context switches (at
least) per plugin and this doesn't work for the kind of performance
goals that most users of Ardour have. since VST plugins require a
reasonably complete win32 runtime environment, this means that Ardour
has to provide a reasonably complete win32 runtime environment. the
only way to do this is via wine.
we (torben hohn and i) spent a lot of effort a few years ago to use
wine as library, but we stopped for two reasons:
1) the internal API of winelib kept changing and it was impossible
to track it
2) the wine developers told us (in person) that we should not do
this and they would not support it. notice that this affected the mono
project as well, since they also wanted to use wine as a library.
apparently the biggest issue for wine is that there is stuff that
*has* to be done before the program even gets into main(). that's why
we have a 1 line C program compiled as a windows executable - it
allows wine to get the process set up, and then it just goes into the
same code that the linux one does. if you believe wine *should* be
usable as a library, please take it up with winehq or codeweavers, not
note that it also turns out to be important that *any* thread that
might end up calling a win32 function has to have been created via the
win32 function CreateThread. the win32 API requires some extra
per-thread information that is missing if you only use pthread_create.
we have recently taking steps so that even threads that are created
via JACK can meet this criterion.
More information about the pkg-multimedia-maintainers