summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/lv2_plugin.h
AgeCommit message (Collapse)Author
2019-11-22Add support for LV2/KX transient-ID optionRobin Gareus
2019-11-14LV2 extension for host's time-scale vari-speedRobin Gareus
Ardour 6 internally always runs at speed 1.0 (or -1.0, or stopped 0.0). There is no vari-speed that scale "BPM" or "n_sample" time progression per cycle. Instead Ardour 6 vari-speed mechanism transparently re-samples I/O. So process-time is scaled only relative to wall-clock time. From a plugin's POV this is similar to "freewheeling": The plugin processes data as if the host plays at speed 1.0. While the host plays this data at a different rate. Some plugins may like to be informed about the host's actual playback rate. Currently this is mainly for the benefit of github.com/x42/repitch.lv2.git
2019-08-26Add sample-rate as float option parameter for LV2 plugins and UIsRobin Gareus
2019-08-26LV2 options for UI themeRobin Gareus
Inform plugins about host theme (fg, bg colors) and UI scale-factor. The latter follows an implementation already present in Carla and DPF. These extension use proposed official URLs.
2019-08-19LV2 extension to override strict-i/o per pluginBen Loftis
This allows mono to stereo plugins to override the default routing and forces both outputs to be connected.
2019-08-03Update libardour GPL boilerplate and (C) from git logRobin Gareus
2019-05-08Notify custom UIs when designated LV2 BPM port changesRobin Gareus
2019-04-08NO-OP: whitespaceRobin Gareus
Fix space-alignment, mostly due to "frame" -> "sample" changes.
2019-04-08NO-OP: whitespaceRobin Gareus
2019-03-11Remove generic parameter-printerRobin Gareus
This has been superseded by value_as_string() along with meta-data from parameter-descriptor, which is supported by all standards, except VST.
2019-02-17Clean up Latency API (Processor vs Plugin)Robin Gareus
Plugins are only a source of Latency (Plugin delay). The API to query, signal and override Latency is managed by PluginInsert.
2018-11-22Save LV2 Port Property values locallyRobin Gareus
This keeps track of lv2:Parameter properties modified with Port:Set, currently file-paths.
2018-11-04Optimize Plugin connect & run API, use const mapsRobin Gareus
2018-01-30Update plugin classificationRobin Gareus
* dedicated API for classes (effect, instrument, util) * prepare for tags (rather than categories) * prepare removal of per-plugin in_category() API
2017-10-04Clean up State API:Robin Gareus
* Processor implement get_state(), classes derived from Processor implement protected ::state() -- as documented in processor.h * likewise for Route, Track: make ::state() a protected interface * removal of "full_state", use explicit "template_save" * use RAII/Unwind to skip saving automation-state
2017-09-18globally change all use of "frame" to refer to audio into "sample".Paul Davis
Generated by tools/f2s. Some hand-editing will be required in a few places to fix up comments related to timecode and video in order to keep the legible
2017-09-16Namespace PBD::RingBufferRobin Gareus
class RingBuffer<> is a very generic name and should not pollute the global namespace.
2017-09-09LV2/midnam tweaks - fix race conditionsRobin Gareus
* Emit signal once midnam was actually updated * only re-read midnam if was it changed. This allows idempotent calls to read_midnam() - from the same thread. At session-load a synth-plugin may load a soundfont in the background and emit midnam_update() after the synth was initialized but before the GUI thread connects to the signal. By making the call idempotent the GUI can call read_midnam() after connecting to the signal to catch up.
2017-09-08Add LV2 extension to notify host about midi-bank/pgm state.Robin Gareus
2017-07-31Signal wish to show inline display in gui by lv2:optionalFeatureJohannes Mueller
... in .ttl file rather than by extension_data() in code. That's more in the spirit of LV2.
2017-07-31Indicate whether to show plugin's inline display in GUIJohannes Mueller
This is currently done by an extension data similarly to LV2_INLINEDISPLAY__interface.
2016-10-29Prototype LV2 extension for plugins to provide MidnamsRobin Gareus
2016-09-21add a static flag to force writing LV2 stateRobin Gareus
This is needed for save-as and archiving, LV2 state may not be saved otherwise if lilv_state_equals() returns true. Also if thestate is saved as part of save-as or archiving or template, the state-version did increase. Upcoming normal save will reference a plugin state that does not exist in the current session bundle.
2016-08-23fix threaded state restore (duplicate calls to restore during init)Robin Gareus
and also allow immediate work during use latency-compute runs. At session load, Ardour calls a plugins "set default" state (GUI thread). Some plugins may schedule work during state-restore. Ardour immediately proceeded to restore the actual session plugin state without processing the already scheduled work and without calling run() for a plugin to apply state synchronously.
2016-08-16Also send lv2:timePosition whenever BBT or Tempo changesRobin Gareus
This mostly fixes an issue with notifying plugins about tempo-ramps and BPM changes. remaining to be fixed (in tempo.h): ``` _session.tempo_map().metric_at(frame_position).tempo().beats_per_minute() ``` currently returns the most recent *fixed* tempo at or before `frame_position`. All other Plugin types are affected by this as well.
2016-07-31Support thread-safe LV2 state restorationDavid Robillard
The original LV2 state extension required that run() is suspended during restore(). Ardour violates this rule, which can lead to crashes and other issues. The state extension has been updated to allow restoring state in a thread-safe way by using the worker to enqueue state changes. This commit supports that new specification, i.e. supports dropout-free state restoration properly. However, the bug with old plugins that do not use this facility is still not fixed.
2016-07-08add an plugin API to query generic-gui grid-layoutRobin Gareus
2016-07-05implement lv2:designation processing#enable (for bypass ports)Robin Gareus
2016-06-25major internal plugin & processor API change:Robin Gareus
Pass current (latency compensated) cycle times to plugin. This fixes time-reporting to plugins and also fixes automation and when bouncing (the session->transport* is not valid) etc.
2016-06-05prepare for LV2 non-automatable control portsRobin Gareus
2016-06-05refine self-automating plugin interfaceRobin Gareus
* thin automation at end * allow plugins to disable its internal write state (ctrl port) * Debug messages
2016-04-15variable plugin port config.Robin Gareus
* extend plugin API (query IO ports) * collect possible variable plugin configurations (AU, Lua) * prepare semi-automatic configuration (presets: mono, stereo, N)
2016-04-08add Plugin LatencyChanged() signal and max latency reportRobin Gareus
2016-04-03Implement describe_io_port() API for LV2Robin Gareus
2016-03-14update [LV2] Plugin Inline Display API: drop cairo dependencyRobin Gareus
2016-03-14Implement LV2 Inline Display ExtensionRobin Gareus
2016-03-14prototype online self-automating LV2 plugin interfaceRobin Gareus
goes along with https://github.com/x42/automate.lv2
2016-01-09API evolutionRobin Gareus
The Session-reference is only needed to instantiate/load the plugin. Indexing presets is not supposed to call load() and be const WRT to PluginInfo
2016-01-07LV2 - query presets without instantiating the pluginRobin Gareus
2015-12-18save/restore plugin state with track-templateRobin Gareus
2015-12-10LV2 specific instrument-plugin checkRobin Gareus
2015-12-06outline a "NoSampleAccurateControl" LV2 feature:Robin Gareus
Since control-ports have a fixed value for the current process-block, Ardour splits a plugin's run() process cycle on every automation event to facilitate sample-accurate automation. Since automation is interpolated between events, this ensures that each explicit automation point is reached (not interpolated). Plugins where this is not required and which favor a fixed block-size, can now specify an optional Feature: NoSampleAccurateControl. One example: a convolution plugin with smoothed gain control.
2015-11-18add dedicated API to check plugin classRobin Gareus
2015-09-10allow LV2 plugins to query current block-size.Robin Gareus
This is akin to VST2's audioMasterGetBlockSize. It returns the current nominal block size (think jack-buffersize). It's not the only block size that may be used when calling run(), it's just the normal one. The actual block sizes used may be larger or smaller and may vary between successive calls of run(). This change became neccesary after 53e969e9. Some plugins expected maxBlockLength to be the /current/ buffer-size and not all-time maxiumum. Those plugins can now use nominalBlockLength.
2015-08-05pass complete blocksize range to LV2 plugin. fixes #6498Robin Gareus
the buffersize may change anytime (split cycles), also plugin analysis uses a 4096 sample window.
2014-11-03Reduce coupling between Plugin and PluginInsert.David Robillard
2014-11-02Automation of LV2 plugin properties.David Robillard
Work towards ParameterDescriptor being used more universally to describe control characteristics.
2014-11-02Move ParameterDescriptor from Plugin to its own header.David Robillard
This fixes circular dependency issues that arise when using ParameterDescriptor more widely.
2014-10-31More generic RT-safe implementation of LV2 properties.David Robillard
2014-10-31Fix spelling error.David Robillard