On Thursday 08 November 2007, Nedko Arnaudov wrote: [...] > The point is that some plugins need *realtime safe* memory > allocation.
Well, yes; that part is quite obvious. What I meant was, if all the host provides is a pool of uniformly sized chunks that are allocated when the plugin is initialized, there doesn't seem to be much point in implementing it on the host side. The naïve host side implementatio would add exactly nothing, compared to plugins just allocating their own pools during initialization. A proper real time manager, with arbitrary chunk sizes, would be more motivated, as it adds functionality that plugins can't implement internally; namely a shared memory pool. > I > need this functionality for lv2zynadd plugin (like arbitrary voices > count allocation) The "standard" solution is to pre-allocate and pre-initialize voice structures for a fixed maximum polyphony. Obviously, this becomes troublesome with modular synths and the like, where the "voice structure" doesn't have a fixed size. One solution is to allocate the voice pool as a response to "program change" events. Of course, this makes the "programe change" operation non real time safe, but it usually is anyway, due to samples being loaded from disk and stuff. Many systems, both hardware and software, are based entirely on the idea that patch loading is part of setup/initialization, as that is often the only practical solution. It's really only entirely ROM based synths (or "small fixed sample set", in the case of software), virtual analog synths and the like that *can* implement real time safe "program change" at all. > and for lv2dynparam plugin library internal > operation too. It needs to "regroup" internally as a response to certain parameter changes? > There were rumors in #lad that such functionality may be useful > without lv2dynparam extension. Well, yes; real time safe dynamic memory management can make life a lot easier for some types of plugins, and/or reduce memory requirements by having a shared pool. However, I think it needs to be more generic than just a pool of fixed size chunks for the "shared pool" part to be viable. [...] > That reminds me that LV2 may need a way to specify optional features > that interdepend. I.e. features (extensions) A and B are both > optional but if A is provided B is required. Of course plugin can > check this explicitly on instantiate and refuse to use feature, but > I'm not sure how vital is such approach. Haven't really thought about this... Isn't it just a matter of plugins and hosts listing *all* extensions? I mean, if you provide or ask for this feature A, but not feature B, you have a bug. An automatic validation tool would trap this right away - but of course, someone/something has to tell the *tool* about these extension interdependencies... //David Olofson - Programmer, Composer, Open Source Advocate .------- http://olofson.net - Games, SDL examples -------. | http://zeespace.net - 2.5D rendering engine | | http://audiality.org - Music/audio engine | | http://eel.olofson.net - Real time scripting | '-- http://www.reologica.se - Rheology instrumentation --' _______________________________________________ Linux-audio-dev mailing list [email protected] http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev
