From 5fa4cf996bc9aad51d97a825f07cc23397437024 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 14 Mar 2016 00:17:08 +0100 Subject: [PATCH] prepare custom LV2 extensions --- libs/ardour/ardour/lv2_extensions.h | 128 ++++++++++++++++++++++++++++ libs/ardour/wscript | 4 + wscript | 1 + 3 files changed, 133 insertions(+) create mode 100644 libs/ardour/ardour/lv2_extensions.h diff --git a/libs/ardour/ardour/lv2_extensions.h b/libs/ardour/ardour/lv2_extensions.h new file mode 100644 index 0000000000..5fd69cfe99 --- /dev/null +++ b/libs/ardour/ardour/lv2_extensions.h @@ -0,0 +1,128 @@ +/* + Copyright 2016 Robin Gareus + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef _ardour_lv2_extensions_h_ +#define _ardour_lv2_extensions_h_ + +#include "lv2/lv2plug.in/ns/lv2core/lv2.h" + +/** + @defgroup inlinedisplay Inline-Display + + Support for displaying a miniaturized generic view + directly in the host's Mixer Window. + + @{ +*/ + +#define LV2_INLINEDISPLAY_URI "http://harrisonconsoles.com/lv2/inlinedisplay" +#define LV2_INLINEDISPLAY_PREFIX LV2_INLINEDISPLAY_URI "#" +#define LV2_INLINEDISPLAY__interface LV2_INLINEDISPLAY_PREFIX "interface" +#define LV2_INLINEDISPLAY__queue_draw LV2_INLINEDISPLAY_PREFIX "queue_draw" + +/** Opaque handle for LV2_Inline_Display::queue_draw() */ +typedef void* LV2_Inline_Display_Handle; + +/** Alias for cairo_image_surface_t */ +typedef void* LV2_Inline_Display_Image_Surface; + +typedef struct { + /** Opaque host data */ + LV2_Inline_Display_Handle handle; + /** Request from run() that the host should call render() */ + void (*queue_draw)(LV2_Inline_Display_Handle handle); +} LV2_Inline_Display; + +/** + * Plugin Inline-Display Interface. + */ +typedef struct { + /** + * The render method. This is called by the host in a non-realtime context, + * usually the main GUI thread. + * + * @param instance The LV2 instance + * @param w the max available width + * @return pointer to a cairo image surface or NULL + */ + LV2_Inline_Display_Image_Surface (*render)(LV2_Handle instance, uint32_t w, uint32_t h); +} LV2_Inline_Display_Interface; + +/** + @} +*/ + +/** + @defgroup automate Self-Automation + + Support for plugins to write automation data via Atom Events + + @{ +*/ + +#define LV2_AUTOMATE_URI "http://ardour.org/lv2/automate" +#define LV2_AUTOMATE_URI_PREFIX LV2_AUTOMATE_URI "#" +/** an lv2:optionalFeature */ +#define LV2_AUTOMATE_URI__can_write LV2_AUTOMATE_URI_PREFIX "canWriteAutomatation" +/** atom:supports */ +#define LV2_AUTOMATE_URI__control LV2_AUTOMATE_URI_PREFIX "automationControl" +/** lv2:portProperty */ +#define LV2_AUTOMATE_URI__controlled LV2_AUTOMATE_URI_PREFIX "automationControlled" + +/** atom messages */ +#define LV2_AUTOMATE_URI__event LV2_AUTOMATE_URI_PREFIX "event" +#define LV2_AUTOMATE_URI__setup LV2_AUTOMATE_URI_PREFIX "setup" +#define LV2_AUTOMATE_URI__finalize LV2_AUTOMATE_URI_PREFIX "finalize" +#define LV2_AUTOMATE_URI__start LV2_AUTOMATE_URI_PREFIX "start" +#define LV2_AUTOMATE_URI__end LV2_AUTOMATE_URI_PREFIX "end" +#define LV2_AUTOMATE_URI__parameter LV2_AUTOMATE_URI_PREFIX "parameter" +#define LV2_AUTOMATE_URI__value LV2_AUTOMATE_URI_PREFIX "value" + +/** + @} +*/ + +/** + @defgroup license License-Report + + Allow for commercial LV2 to report their + licensing status. + + @{ +*/ + +#define LV2_PLUGINLICENSE_URI "http://harrisonconsoles.com/lv2/license" +#define LV2_PLUGINLICENSE_PREFIX LV2_INLINEDISPLAY_URI "#" +#define LV2_PLUGINLICENSE__interface LV2_INLINEDISPLAY_PREFIX "interface" + +typedef struct _LV2_License_Interface { + /* @return -1 if no license is needed; 0 if unlicensed, 1 if licensed */ + int (*is_licensed)(LV2_Handle instance); + /* @return a string copy of the licensee name if licensed, or NULL, the caller needs to free this */ + char* (*licensee)(LV2_Handle instance); + /* @return a URI identifying the plugin-bundle or plugin for which a given license is valid */ + const char* (*product_uri)(LV2_Handle instance); + /* @return human readable product name for the URI */ + const char* (*product_name)(LV2_Handle instance); + /* @return link to website or webstore */ + const char* (*store_url)(LV2_Handle instance); +} LV2_License_Interface; + +/** + @} +*/ + +#endif diff --git a/libs/ardour/wscript b/libs/ardour/wscript index 31d2c50681..5e44ccf687 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -295,6 +295,10 @@ def configure(conf): atleast_version='0.6.0', mandatory=False) conf.define ('LV2_SUPPORT', 1) + # non-standard LV2 extention -- TODO: add option to disable?? + if conf.is_defined ('HAVE_LV2_1_10_0'): + conf.define ('LV2_EXTENDED', 1) + # autowaf.check_pkg(conf, 'soundtouch-1.0', uselib_store='SOUNDTOUCH', # mandatory=False) autowaf.check_pkg(conf, 'cppunit', uselib_store='CPPUNIT', diff --git a/wscript b/wscript index 4fa8e4c522..077e924ea9 100644 --- a/wscript +++ b/wscript @@ -1168,6 +1168,7 @@ const char* const ardour_config_info = "\\n\\ write_config_text('Libjack metadata', conf.is_defined ('HAVE_JACK_METADATA')) write_config_text('LV2 UI embedding', conf.is_defined('HAVE_SUIL')) write_config_text('LV2 support', conf.is_defined('LV2_SUPPORT')) + write_config_text('LV2 extensions', conf.is_defined('LV2_EXTENDED')) write_config_text('LXVST support', conf.is_defined('LXVST_SUPPORT')) write_config_text('OGG', conf.is_defined('HAVE_OGG')) write_config_text('Phone home', conf.is_defined('PHONE_HOME'))