1 /*************************************************************************** 2 * * 3 * Copyright (C) 2008 - 2012 Andreas Persson * 4 * * 5 * This program is free software; you can redistribute it and/or modify * 6 * it under the terms of the GNU General Public License as published by * 7 * the Free Software Foundation; either version 2 of the License, or * 8 * (at your option) any later version. * 9 * * 10 * This program is distributed in the hope that it will be useful, * 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 13 * GNU General Public License for more details. * 14 * * 15 * You should have received a copy of the GNU General Public License * 16 * along with this program; if not, write to the Free Software * 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, * 18 * MA 02110-1301 USA * 19 ***************************************************************************/ 20 21 #ifndef LS_PLUGINLV2_H 22 #define LS_PLUGINLV2_H 23 24 #include "../../drivers/Plugin.h" 25 26 #include <lv2/lv2plug.in/ns/lv2core/lv2.h> 27 #include <lv2/lv2plug.in/ns/ext/atom/atom.h> 28 #include <lv2/lv2plug.in/ns/ext/state/state.h> 29 #include <lv2/lv2plug.in/ns/ext/urid/urid.h> 30 31 namespace { 32 33 class PluginLv2 : public LinuxSampler::Plugin { 34 public: 35 PluginLv2(const LV2_Descriptor* Descriptor, 36 double SampleRate, const char* BundlePath, 37 const LV2_Feature* const* Features); 38 ~PluginLv2(); 39 void ConnectPort(uint32_t Port, void* DataLocation); 40 void Activate(); 41 void Run(uint32_t SampleCount); 42 void Deactivate(); 43 LV2_State_Status Save(LV2_State_Store_Function store, void* data, 44 uint32_t flags, const LV2_Feature* const* features); 45 LV2_State_Status Restore(LV2_State_Retrieve_Function retrieve, void* data, 46 uint32_t flags, const LV2_Feature* const* features); 47 48 protected: 49 virtual String PathToState(const String& string); 50 virtual String PathFromState(const String& string); 51 52 private: uri_to_id(const char * uri)53 LV2_URID uri_to_id(const char* uri) { 54 return UriMap->map(UriMap->handle, uri); 55 } 56 57 void SetStateFeatures(const LV2_Feature* const* Features); 58 59 float** Out; 60 LV2_Atom_Sequence* MidiBuf; 61 LV2_URID_Map* UriMap; 62 LV2_URID MidiEventType; 63 LV2_State_Map_Path* MapPath; 64 LV2_State_Make_Path* MakePath; 65 66 String DefaultState; 67 }; 68 69 class PluginInfo { 70 public: Lv2Descriptor()71 static const LV2_Descriptor* Lv2Descriptor() { 72 return &Instance.Lv2; 73 } Lv2StateInterface()74 static const LV2_State_Interface* Lv2StateInterface() { 75 return &Instance.StateInterface; 76 } 77 private: 78 LV2_Descriptor Lv2; 79 LV2_State_Interface StateInterface; 80 81 PluginInfo(); 82 static PluginInfo Instance; 83 }; 84 85 extern "C" { 86 static LV2_Handle instantiate(const LV2_Descriptor* descriptor, 87 double sample_rate, const char* bundle_path, 88 const LV2_Feature* const* features); 89 static void connect_port(LV2_Handle instance, uint32_t port, 90 void* data_location); 91 static void activate(LV2_Handle instance); 92 static void run(LV2_Handle instance, uint32_t sample_count); 93 static void deactivate(LV2_Handle instance); 94 static void cleanup(LV2_Handle instance); 95 static const void* extension_data(const char* uri); 96 97 static LV2_State_Status save(LV2_Handle handle, 98 LV2_State_Store_Function store, 99 LV2_State_Handle state, uint32_t flags, 100 const LV2_Feature* const* features); 101 102 static LV2_State_Status restore(LV2_Handle handle, 103 LV2_State_Retrieve_Function retrieve, 104 LV2_State_Handle state, uint32_t flags, 105 const LV2_Feature* const* features); 106 } 107 } 108 109 #endif 110