X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Furi_map.h;h=523eb18e917e1dd6bdf5b2fcb7bf3d969ffe81f6;hb=52d746c5fb39263a42dd33de12e101c3fbeafaa9;hp=a948ea40022d26e3d453338e5c66377ef0f6d85f;hpb=36c233fe6ce570ce85224626ce7aba4a2607537f;p=ardour.git diff --git a/libs/ardour/ardour/uri_map.h b/libs/ardour/ardour/uri_map.h index a948ea4002..523eb18e91 100644 --- a/libs/ardour/ardour/uri_map.h +++ b/libs/ardour/ardour/uri_map.h @@ -24,6 +24,8 @@ #include +#include + #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 Map; typedef std::map 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