summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-03-14 16:44:20 +0100
committerRobin Gareus <robin@gareus.org>2016-03-14 16:45:27 +0100
commit93bc9b972888f5a8c08115eccb66a35d4f3853a6 (patch)
tree74b2bc1c9ca47a6f369d166f70667fd97631558a
parente180b0f706c58b6ee7c45d01d3c70d205c00abff (diff)
update [LV2] Plugin Inline Display API: drop cairo dependency
-rw-r--r--libs/ardour/ardour/lv2_extensions.h23
-rw-r--r--libs/ardour/ardour/lv2_plugin.h2
-rw-r--r--libs/ardour/ardour/plugin.h9
-rw-r--r--libs/ardour/lv2_plugin.cc6
4 files changed, 31 insertions, 9 deletions
diff --git a/libs/ardour/ardour/lv2_extensions.h b/libs/ardour/ardour/lv2_extensions.h
index 5fd69cfe99..139e1a6594 100644
--- a/libs/ardour/ardour/lv2_extensions.h
+++ b/libs/ardour/ardour/lv2_extensions.h
@@ -36,13 +36,23 @@
/** 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;
+/** raw image pixmap format is ARGB32,
+ * the data pointer is owned by the plugin and must be valid
+ * from the first call to render until cleanup.
+ */
+typedef struct {
+ unsigned char *data;
+ int width;
+ int height;
+ int stride;
+} LV2_Inline_Display_Image_Surface;
+/** a LV2 Feature provided by the Host to the plugin */
typedef struct {
/** Opaque host data */
LV2_Inline_Display_Handle handle;
- /** Request from run() that the host should call render() */
+ /** Request from run() that the host should call render() at a later time
+ * to update the inline display */
void (*queue_draw)(LV2_Inline_Display_Handle handle);
} LV2_Inline_Display;
@@ -53,12 +63,15 @@ typedef struct {
/**
* The render method. This is called by the host in a non-realtime context,
* usually the main GUI thread.
+ * The data pointer is owned by the plugin and must be valid
+ * from the first call to render until cleanup.
*
* @param instance The LV2 instance
* @param w the max available width
- * @return pointer to a cairo image surface or NULL
+ * @param h the max available height
+ * @return pointer to a LV2_Inline_Display_Image_Surface or NULL
*/
- LV2_Inline_Display_Image_Surface (*render)(LV2_Handle instance, uint32_t w, uint32_t h);
+ LV2_Inline_Display_Image_Surface* (*render)(LV2_Handle instance, uint32_t w, uint32_t h);
} LV2_Inline_Display_Interface;
/**
diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h
index 020cddf34b..936fd9019f 100644
--- a/libs/ardour/ardour/lv2_plugin.h
+++ b/libs/ardour/ardour/lv2_plugin.h
@@ -301,7 +301,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
#ifdef LV2_EXTENDED
bool has_inline_display ();
- void* render_inline_display (uint32_t, uint32_t);
+ Plugin::Display_Image_Surface* render_inline_display (uint32_t, uint32_t);
#endif
void latency_compute_run ();
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 17ac4e04d9..084f5a876d 100644
--- a/libs/ardour/ardour/plugin.h
+++ b/libs/ardour/ardour/plugin.h
@@ -111,8 +111,15 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
void realtime_locate ();
void monitoring_changed ();
+ typedef struct {
+ unsigned char *data;
+ int width;
+ int height;
+ int stride;
+ } Display_Image_Surface;
+
virtual bool has_inline_display () { return false; }
- virtual void* render_inline_display (uint32_t, uint32_t) { return NULL; }
+ virtual Display_Image_Surface* render_inline_display (uint32_t, uint32_t) { return NULL; }
PBD::Signal0<void> QueueDraw;
struct PresetRecord {
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index 8283062f3f..1f0e20f779 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -866,10 +866,12 @@ LV2Plugin::has_inline_display () {
return _display_interface ? true : false;
}
-void*
+Plugin::Display_Image_Surface*
LV2Plugin::render_inline_display (uint32_t w, uint32_t h) {
if (_display_interface) {
- return _display_interface->render ((void*)_impl->instance->lv2_handle, w, h);
+ /* Plugin::Display_Image_Surface is identical to
+ * LV2_Inline_Display_Image_Surface */
+ return (Plugin::Display_Image_Surface*) _display_interface->render ((void*)_impl->instance->lv2_handle, w, h);
}
return NULL;
}