Fix lost MIDI events due to broken range check.
authorDavid Robillard <d@drobilla.net>
Tue, 2 Dec 2014 08:36:33 +0000 (03:36 -0500)
committerDavid Robillard <d@drobilla.net>
Tue, 2 Dec 2014 08:36:33 +0000 (03:36 -0500)
libs/ardour/ardour/event_type_map.h
libs/ardour/event_type_map.cc
libs/evoral/evoral/TypeMap.hpp

index 0d7e6237540824b96967fc47593fbeecd2c3409a..8110a28f9d6b25e47b69330e876b1589e24fc563 100644 (file)
@@ -49,7 +49,7 @@ public:
        Evoral::Parameter from_symbol(const std::string& str) const;
        std::string       to_symbol(const Evoral::Parameter& param) const;
 
-       const Evoral::ParameterDescriptor& descriptor(const Evoral::Parameter& param) const;
+       Evoral::ParameterDescriptor descriptor(const Evoral::Parameter& param) const;
 
        void set_descriptor(const Evoral::Parameter&           param,
                            const Evoral::ParameterDescriptor& desc);
index 14f609bd8a5615d0634bac6f1fc8885c5d69527d..f818b301728f498140175ca30522f9332311ee12 100644 (file)
@@ -22,6 +22,7 @@
 #include <cstdio>
 #include "ardour/types.h"
 #include "ardour/event_type_map.h"
+#include "ardour/parameter_descriptor.h"
 #include "ardour/parameter_types.h"
 #include "ardour/uri_map.h"
 #include "evoral/Parameter.hpp"
@@ -243,13 +244,17 @@ EventTypeMap::to_symbol(const Evoral::Parameter& param) const
        }
 }
 
-const Evoral::ParameterDescriptor&
+Evoral::ParameterDescriptor
 EventTypeMap::descriptor(const Evoral::Parameter& param) const
 {
-       static const Evoral::ParameterDescriptor nil;
-
+       // Found an existing (perhaps custom) descriptor
        Descriptors::const_iterator d = _descriptors.find(param);
-       return (d != _descriptors.end()) ? d->second : nil;
+       if (d != _descriptors.end()) {
+               return d->second;
+       }
+
+       // Add default descriptor and return that
+       return ARDOUR::ParameterDescriptor(param);
 }
 
 void
index 154cdff613c1f6779859d092154f9955d489eb77..d09439daa6b304a73f7535d675d7306bd96a9880 100644 (file)
@@ -52,7 +52,7 @@ public:
        virtual uint32_t midi_event_type(uint8_t status) const = 0;
 
        /** Return the description of a parameter. */
-       virtual const ParameterDescriptor& descriptor(const Parameter& param) const = 0;
+       virtual ParameterDescriptor descriptor(const Parameter& param) const = 0;
 
        virtual std::string to_symbol(const Parameter& param) const = 0;
 };