From: Robin Gareus Date: Mon, 14 Mar 2016 15:44:20 +0000 (+0100) Subject: update [LV2] Plugin Inline Display API: drop cairo dependency X-Git-Tag: 5.0-pre0~1337 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=93bc9b972888f5a8c08115eccb66a35d4f3853a6;hp=e180b0f706c58b6ee7c45d01d3c70d205c00abff;p=ardour.git update [LV2] Plugin Inline Display API: drop cairo dependency --- 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 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; }