summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/lv2_plugin.h
AgeCommit message (Collapse)Author
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
2014-10-31prototype [LV2]patch-change support for generic plugin UIs.Robin Gareus
2014-09-11properly retain LV2PluginInfoRobin Gareus
2014-09-10free LV2 world after initial scanRobin Gareus
2013-10-18Merge remote-tracking branch 'remotes/origin/exportvis' into windows+ccJohn Emmas
Conflicts (hopefully resolved): gtk2_ardour/wscript libs/ardour/ardour/audioregion.h libs/ardour/ardour/debug.h libs/ardour/ardour/directory_names.h libs/ardour/ardour/filesystem_paths.h libs/ardour/ardour/session_event.h libs/gtkmm2ext/gtkmm2ext/utils.h libs/panners/1in2out/wscript libs/panners/2in2out/wscript libs/panners/vbap/wscript libs/pbd/pbd/debug.h libs/pbd/pbd/file_utils.h libs/pbd/pbd/pathexpand.h libs/pbd/pbd/ringbuffer.h libs/pbd/pbd/ringbufferNPT.h libs/pbd/pbd/search_path.h libs/pbd/pbd/stacktrace.h libs/pbd/pbd/uuid.h libs/pbd/pbd/uuid_boost.h libs/surfaces/control_protocol/control_protocol/basic_ui.h libs/surfaces/control_protocol/control_protocol/control_protocol.h
2013-10-17add export visibility macros across libardourPaul Davis
2013-09-03Merge branch 'master' into windowsPaul Davis
2013-08-29update external plugin UI handlingRobin Gareus
amend to 4cdb018 and 1d972d0 override ui_closed() behavior for lv2ui:external Keep UI around and do not re-instantiate, but simply show it again. (this is against the original specs but was agreed upon by various authors and the previous behavior or Ardour.) kx:external-ui are cleaned up after ui_closed().
2013-08-04'libs/ardour' - Main body of changes required for building with MSVCJohn Emmas
2013-06-03honor LV2 rsz:minimumSize for Atom Event buffersRobin Gareus
2013-01-27Support state:loadDefaultState feature.David Robillard
git-svn-id: svn://localhost/ardour2/branches/3.0@14007 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-11-18Deliver MIDI events to atom ports that support it, merged with transport events.David Robillard
Eliminate delivery of non-MIDI events to Ardour MIDI buffers. Fix the general mess of LV2 port flags and types. Unify old MIDI API and new atom API MIDI stuff. Making this work required changing the way we do LV2 MIDI slightly: instead of BufferSet::get_lv2_midi doing the translation automatically, it returns an empty buffer and the caller is responsible for actually filling it. This allows the LV2 code to iterate over the MIDI and transport changes in one go to merge them into the buffer at the correct times. Synth plugins using the new atom API now work and can get accurate transport information along with the MIDI that drives them. git-svn-id: svn://localhost/ardour2/branches/3.0@13522 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-11-18Better implementation of LV2 plugin<=>UI communication.David Robillard
This might use a bit more memory than it could, but it works reliably for me loading a large Ingen patch inside Ardour as an LV2 plugin, which I'm pretty sure is by far the most high volume such communication out there. git-svn-id: svn://localhost/ardour2/branches/3.0@13519 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-11-17Sent precise transport information to LV2 plugins via events.David Robillard
We send the full transport state (frame position, BBT time, transport speed, meter) to the plugin: * At the start of a cycle whenever a relocate or transport speed change has occurred * On every occurrence of a meter change within a cycle This means the plugin gets a sample accurate meter/tempo map, even if the meter changes in the middle of a cycle. However, this is not quite right yet: things can get wonky if the tempo map is edited while rolling, since this code will not detect the change and fail to update the plugin at the start of the cycle. Other changes: * Factor out TempoMetric::set_metric() and simplify some tempo functions * Clean up LV2 URID stuff git-svn-id: svn://localhost/ardour2/branches/3.0@13513 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-08-29Implement latest buf-size extension via new options extension.David Robillard
git-svn-id: svn://localhost/ardour2/branches/3.0@13151 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-08-28LV2: amend previous commit, respect replicated plugin instancesRobin Gareus
When a plugin is replicated (eg. mono plugin on a stereo-track), configure_io() is only called for the first instance. The 2nd instance will not have dedicated buffers but re-use copies of the first instance. Should the 2nd instance use a LV2 worker-thread or local communication ports they can not be shared with the first instance. -> this patch allocates Atom-buffers for each instance. PS. this still needs more work; there is only one UI instance for all plugin instances. messages from the UI should go to all instances. git-svn-id: svn://localhost/ardour2/branches/3.0@13148 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-08-28LV2: allocate dedicated buffers for [non-midi] event-ports.Robin Gareus
git-svn-id: svn://localhost/ardour2/branches/3.0@13147 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-08-27dedicated LV2 non-MIDI atom-event-port handlingRobin Gareus
git-svn-id: svn://localhost/ardour2/branches/3.0@13144 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-08-21Create and realize LV2 UI container before instantiating (required for ↵David Robillard
proper embedding in some situations). git-svn-id: svn://localhost/ardour2/branches/3.0@13140 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-08-18Fix some const-violating casts.David Robillard
git-svn-id: svn://localhost/ardour2/branches/3.0@13138 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-08-17LV2 log extension support.David Robillard
git-svn-id: svn://localhost/ardour2/branches/3.0@13135 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-08-08Support new LV2 buf-size extension if a new enough (currently svn) LV2 is ↵David Robillard
present. git-svn-id: svn://localhost/ardour2/branches/3.0@13112 d708f5d6-7413-0410-9779-e7cbd77b26cf