prototype online self-automating LV2 plugin interface
[ardour.git] / libs / ardour / ardour / uri_map.h
index a948ea40022d26e3d453338e5c66377ef0f6d85f..523eb18e917e1dd6bdf5b2fcb7bf3d969ffe81f6 100644 (file)
@@ -24,6 +24,8 @@
 
 #include <boost/utility.hpp>
 
+#include <glibmm/threads.h>
+
 #include "lv2.h"
 #include "lv2/lv2plug.in/ns/ext/uri-map/uri-map.h"
 #include "lv2/lv2plug.in/ns/ext/urid/urid.h"
@@ -39,6 +41,8 @@ namespace ARDOUR {
  */
 class LIBARDOUR_API URIMap : public boost::noncopyable {
 public:
+       static URIMap& instance();
+
        URIMap();
 
        LV2_Feature* uri_map_feature()    { return &_uri_map_feature; }
@@ -51,6 +55,47 @@ public:
        uint32_t    uri_to_id(const char* uri);
        const char* id_to_uri(uint32_t id) const;
 
+       // Cached URIDs for use in real-time code
+       struct URIDs {
+               void init(URIMap& uri_map);
+
+               uint32_t atom_Chunk;
+               uint32_t atom_Path;
+               uint32_t atom_Sequence;
+               uint32_t atom_eventTransfer;
+               uint32_t atom_URID;
+               uint32_t atom_Blank;
+               uint32_t atom_Object;
+               uint32_t atom_Float;
+               uint32_t log_Error;
+               uint32_t log_Note;
+               uint32_t log_Warning;
+               uint32_t midi_MidiEvent;
+               uint32_t time_Position;
+               uint32_t time_bar;
+               uint32_t time_barBeat;
+               uint32_t time_beatUnit;
+               uint32_t time_beatsPerBar;
+               uint32_t time_beatsPerMinute;
+               uint32_t time_frame;
+               uint32_t time_speed;
+               uint32_t patch_Get;
+               uint32_t patch_Set;
+               uint32_t patch_property;
+               uint32_t patch_value;
+#ifdef LV2_EXTENDED
+               uint32_t auto_event;
+               uint32_t auto_setup;
+               uint32_t auto_finalize;
+               uint32_t auto_start;
+               uint32_t auto_end;
+               uint32_t auto_parameter;
+               uint32_t auto_value;
+#endif
+       };
+
+       URIDs urids;
+
 private:
        typedef std::map<const std::string, uint32_t> Map;
        typedef std::map<uint32_t, const std::string> Unmap;
@@ -64,6 +109,10 @@ private:
        LV2_URID_Map        _urid_map_feature_data;
        LV2_Feature         _urid_unmap_feature;
        LV2_URID_Unmap      _urid_unmap_feature_data;
+
+       mutable Glib::Threads::Mutex _lock;
+
+       static URIMap* uri_map;
 };
 
 } // namespace ARDOUR