Save LV2 Port Property values locally
authorRobin Gareus <robin@gareus.org>
Thu, 22 Nov 2018 13:58:44 +0000 (14:58 +0100)
committerRobin Gareus <robin@gareus.org>
Thu, 22 Nov 2018 13:58:44 +0000 (14:58 +0100)
This keeps track of lv2:Parameter properties modified with Port:Set,
currently file-paths.

libs/ardour/ardour/lv2_plugin.h
libs/ardour/lv2_plugin.cc

index f12953633b39bc7929270d57da1c6cd7083f69ca..75d07547ef3002930fdd34d7259e9d6d9da7e7ed 100644 (file)
@@ -172,6 +172,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        void                       set_property(uint32_t key, const Variant& value);
        const PropertyDescriptors& get_supported_properties() const { return _property_descriptors; }
        const ParameterDescriptor& get_property_descriptor(uint32_t id) const;
+       Variant                    get_property_value (uint32_t) const;
        void                       announce_property_values();
 
   private:
@@ -231,6 +232,8 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        std::vector<size_t>            _port_minimumSize;
        std::map<std::string,uint32_t> _port_indices;
 
+       std::map<uint32_t, Variant>    _property_values;
+
        PropertyDescriptors _property_descriptors;
 
        struct AutomationCtrl {
index 3ae314057761be3b7703998b89bac0a82a26cb19..79bef11cdde146bb9170f406d56800eafbbb5342 100644 (file)
@@ -1992,6 +1992,16 @@ LV2Plugin::load_supported_properties(PropertyDescriptors& descs)
        lilv_nodes_free(properties);
 }
 
+Variant
+LV2Plugin::get_property_value (uint32_t prop_id) const
+{
+       std::map<uint32_t, Variant>::const_iterator it;
+       if ((it = _property_values.find (prop_id)) == _property_values.end()) {
+               return Variant();
+       }
+       return it->second;
+}
+
 void
 LV2Plugin::announce_property_values()
 {
@@ -2944,6 +2954,7 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
                                                                // Emit PropertyChanged signal for UI
                                                                // TODO: This should emit the control's Changed signal
                                                                PropertyChanged(prop_id, Variant(Variant::PATH, path));
+                                                               _property_values[prop_id] = Variant(Variant::PATH, path);
                                                        } else {
                                                                std::cerr << "warning: patch:Set for unknown property" << std::endl;
                                                        }