diff options
Diffstat (limited to 'libs/ardour/ardour/uri_map.h')
-rw-r--r-- | libs/ardour/ardour/uri_map.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/libs/ardour/ardour/uri_map.h b/libs/ardour/ardour/uri_map.h index a948ea4002..d745ad58e7 100644 --- a/libs/ardour/ardour/uri_map.h +++ b/libs/ardour/ardour/uri_map.h @@ -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,38 @@ 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; + }; + + URIDs urids; + private: typedef std::map<const std::string, uint32_t> Map; typedef std::map<uint32_t, const std::string> Unmap; @@ -64,6 +100,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 |