prepare custom LV2 extensions
authorRobin Gareus <robin@gareus.org>
Sun, 13 Mar 2016 23:17:08 +0000 (00:17 +0100)
committerRobin Gareus <robin@gareus.org>
Sun, 13 Mar 2016 23:17:08 +0000 (00:17 +0100)
libs/ardour/ardour/lv2_extensions.h [new file with mode: 0644]
libs/ardour/wscript
wscript

diff --git a/libs/ardour/ardour/lv2_extensions.h b/libs/ardour/ardour/lv2_extensions.h
new file mode 100644 (file)
index 0000000..5fd69cf
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+  Copyright 2016 Robin Gareus <robin@gareus.org>
+
+  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
index 31d2c506815015c25bd5e5440b5a1b6d0685535a..5e44ccf6871f76523144b50a7ccc4c30dd7d3ee2 100644 (file)
@@ -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 4fa8e4c5222e5696dd81445866e41cfe1f2a23a6..077e924ea9ddf22884971f8f60e3de3e3a65814f 100644 (file)
--- 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'))