On 20 October 2012 19:45, Robin Gareus <robin(a)gareus.org> wrote:
Tom. I had a look the IR.LV2 code and before setting out on this one and
wanted to patch IR.LV2 but that turned into a rewrite. The three main
reasons for that are
1) IR.LV2 does buffering to align small block-sizes to an internal
block, thereby introducing latency.
Not really important to the core discussion, JFTR let me point out
that this is not entirely true. There are two "versions" of IR (they
should have been called branches, because that's what they really
are). IR.lv2 version 1.2.x is fully zero latency in the sense that you
guys (and myself too) really like it to be. Version 1.3.x was
introduced after I realized that when automated within Ardour, the
plugin's run() will be called with random non-uniform blocksizes, so
to make it work the additional buffering needed to be introduced. I
have tried to clearly document this on the plugin's webpage. Version
1.2.x gets a new release every time version 1.3.x does, so they are in
sync with each other. I still use 1.2.x myself because I typically use
IR on busses and even though the plugin reports the latency to the
host via LV2, in Ardour 2.x there is no latency compensation (I
haven't had the time yet to test drive A3 enough to make me convinced
to move my production projects from A2 to A3).
2) IR.LV2 shares an instance pointer with the GUI
3) IR.LV2 spawns its own threads (for loading and processing IRs and
also inside libzita-convolver). The threading seems to be responsible
for most of the crashes of IR.LV2 that I experience)
I use IR almost daily on quite sophisticated A2 projects with more
than 10 IR instances on a 4-core machine. I'm quite puzzled by your
remark because I don't really experience any crashes I can relate to
IR. (yes, A2 crashes sometimes, but it is seemingly due to my heavy
use of editing features, since it never crashes when
instantiating/adjusting IR, only when I edit regions and do other
stuff.) Naturally, with the above kludges, I have no idea about other
hosts.
(1) could be dealt with, but (2) and (3) are a big NO in LV2. Changing
IR.LV2 to uses Atom-messages and use the worker-thread model requires a
major re-design of IR.LV2. Patches are not suitable to address that.
Then I'll have to do the rewrite at some point, but it probably won't
happen until IR stops working in the latest stable release of Ardour.
Hopefully the plugin you guys are doing now will help me as a case
study in how to do these things the proper way in LV2.
Thanks,
Tom