Remove non-portable and unnused header includes
[ardour.git] / libs / ardour / audio_unit.cc
index e02a00c28e9fc7be493e26221239632dead8b85f..0e9a11e6dfcb003816c41d66318b037235cebbf5 100644 (file)
@@ -31,7 +31,7 @@
 #include "pbd/pathscanner.h"
 #include "pbd/locale_guard.h"
 
-#include <glibmm/thread.h>
+#include <glibmm/threads.h>
 #include <glibmm/fileutils.h>
 #include <glibmm/miscutils.h>
 
@@ -65,13 +65,6 @@ using namespace std;
 using namespace PBD;
 using namespace ARDOUR;
 
-#ifndef AU_STATE_SUPPORT
-static bool seen_get_state_message = false;
-static bool seen_set_state_message = false;
-static bool seen_loading_message = false;
-static bool seen_saving_message = false;
-#endif
-
 AUPluginInfo::CachedInfoMap AUPluginInfo::cached_info;
 
 static string preset_search_path = "/Library/Audio/Presets:/Network/Library/Audio/Presets";
@@ -784,6 +777,10 @@ AUPlugin::set_parameter (uint32_t which, float val)
                return;
        }
 
+       if (get_parameter(which) == val) {
+               return;
+       }
+
        const AUParameterDescriptor& d (descriptors[which]);
        DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("set parameter %1 in scope %2 element %3 to %4\n", d.id, d.scope, d.element, val));
        unit->SetParameter (d.id, d.scope, d.element, val);
@@ -1295,8 +1292,8 @@ AUPlugin::render_callback(AudioUnitRenderActionFlags*,
 {
        /* not much to do with audio - the data is already in the buffers given to us in connect_and_run() */
 
-       DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("%1: render callback, frames %2 bufs %3\n",
-                                                       name(), inNumberFrames, ioData->mNumberBuffers));
+       // DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("%1: render callback, frames %2 bufs %3\n",
+        // name(), inNumberFrames, ioData->mNumberBuffers));
 
        if (input_maxbuf == 0) {
                error << _("AUPlugin: render callback called illegally!") << endmsg;
@@ -1675,8 +1672,6 @@ void
 AUPlugin::add_state (XMLNode* root) const
 {
        LocaleGuard lg (X_("POSIX"));
-
-#ifdef AU_STATE_SUPPORT
        CFDataRef xmlData;
        CFPropertyListRef propertyList;
 
@@ -1708,20 +1703,11 @@ AUPlugin::add_state (XMLNode* root) const
 
        CFRelease (xmlData);
        CFRelease (propertyList);
-#else
-       if (!seen_get_state_message) {
-               info << string_compose (_("Saving AudioUnit settings is not supported in this build of %1. Consider paying for a newer version"),
-                                       PROGRAM_NAME)
-                    << endmsg;
-               seen_get_state_message = true;
-       }
-#endif
 }
 
 int
 AUPlugin::set_state(const XMLNode& node, int version)
 {
-#ifdef AU_STATE_SUPPORT
        int ret = -1;
        CFPropertyListRef propertyList;
        LocaleGuard lg (X_("POSIX"));
@@ -1769,14 +1755,6 @@ AUPlugin::set_state(const XMLNode& node, int version)
 
        Plugin::set_state (node, version);
        return ret;
-#else
-       if (!seen_set_state_message) {
-               info << string_compose (_("Restoring AudioUnit settings is not supported in this build of %1. Consider paying for a newer version"),
-                                       PROGRAM_NAME)
-                    << endmsg;
-       }
-       return Plugin::set_state (node, version);
-#endif
 }
 
 bool
@@ -1784,7 +1762,6 @@ AUPlugin::load_preset (PresetRecord r)
 {
        Plugin::load_preset (r);
 
-#ifdef AU_STATE_SUPPORT
        bool ret = false;
        CFPropertyListRef propertyList;
        Glib::ustring path;
@@ -1832,15 +1809,6 @@ AUPlugin::load_preset (PresetRecord r)
        }
 
        return ret;
-#else
-       if (!seen_loading_message) {
-               info << string_compose (_("Loading AudioUnit presets is not supported in this build of %1. Consider paying for a newer version"),
-                                       PROGRAM_NAME)
-                    << endmsg;
-               seen_loading_message = true;
-       }
-       return true;
-#endif
 }
 
 void
@@ -1851,7 +1819,6 @@ AUPlugin::do_remove_preset (std::string)
 string
 AUPlugin::do_save_preset (string preset_name)
 {
-#ifdef AU_STATE_SUPPORT
        CFPropertyListRef propertyList;
        vector<Glib::ustring> v;
        Glib::ustring user_preset_path;
@@ -1900,15 +1867,6 @@ AUPlugin::do_save_preset (string preset_name)
        CFRelease(propertyList);
 
        return string ("file:///") + user_preset_path;
-#else
-       if (!seen_saving_message) {
-               info << string_compose (_("Saving AudioUnit presets is not supported in this build of %1. Consider paying for a newer version"),
-                                       PROGRAM_NAME)
-                    << endmsg;
-               seen_saving_message = true;
-       }
-       return string();
-#endif
 }
 
 //-----------------------------------------------------------------------------
@@ -2075,7 +2033,6 @@ AUPlugin::current_preset() const
 {
        string preset_name;
 
-#ifdef AU_STATE_SUPPORT
        CFPropertyListRef propertyList;
 
        DEBUG_TRACE (DEBUG::AudioUnits, "get current preset for current_preset()\n");
@@ -2083,14 +2040,13 @@ AUPlugin::current_preset() const
                preset_name = get_preset_name_in_plist (propertyList);
                CFRelease(propertyList);
        }
-#endif
+
        return preset_name;
 }
 
 void
 AUPlugin::find_presets ()
 {
-#ifdef AU_STATE_SUPPORT
        vector<string*>* preset_files;
        PathScanner scanner;
 
@@ -2139,8 +2095,6 @@ AUPlugin::find_presets ()
                string const uri = string_compose ("%1", _presets.size ());
                _presets.insert (make_pair (uri, Plugin::PresetRecord (uri, i->first, i->second)));
        }
-
-#endif
 }
 
 bool
@@ -2753,6 +2707,26 @@ AUPlugin::listen_to_parameter (uint32_t param_id)
                return -1;
        } 
 
+       event.mEventType = kAudioUnitEvent_BeginParameterChangeGesture;
+       event.mArgument.mParameter.mAudioUnit = unit->AU();
+       event.mArgument.mParameter.mParameterID = descriptors[param_id].id;
+       event.mArgument.mParameter.mScope = descriptors[param_id].scope;
+       event.mArgument.mParameter.mElement = descriptors[param_id].element;
+
+       if (AUEventListenerAddEventType (_parameter_listener, _parameter_listener_arg, &event) != noErr) {
+               return -1;
+       } 
+
+       event.mEventType = kAudioUnitEvent_EndParameterChangeGesture;
+       event.mArgument.mParameter.mAudioUnit = unit->AU();
+       event.mArgument.mParameter.mParameterID = descriptors[param_id].id;
+       event.mArgument.mParameter.mScope = descriptors[param_id].scope;
+       event.mArgument.mParameter.mElement = descriptors[param_id].element;
+
+       if (AUEventListenerAddEventType (_parameter_listener, _parameter_listener_arg, &event) != noErr) {
+               return -1;
+       } 
+
        return 0;
 }
 
@@ -2775,6 +2749,26 @@ AUPlugin::end_listen_to_parameter (uint32_t param_id)
                return -1;
        } 
 
+       event.mEventType = kAudioUnitEvent_BeginParameterChangeGesture;
+       event.mArgument.mParameter.mAudioUnit = unit->AU();
+       event.mArgument.mParameter.mParameterID = descriptors[param_id].id;
+       event.mArgument.mParameter.mScope = descriptors[param_id].scope;
+       event.mArgument.mParameter.mElement = descriptors[param_id].element;
+
+       if (AUEventListenerRemoveEventType (_parameter_listener, _parameter_listener_arg, &event) != noErr) {
+               return -1;
+       } 
+
+       event.mEventType = kAudioUnitEvent_EndParameterChangeGesture;
+       event.mArgument.mParameter.mAudioUnit = unit->AU();
+       event.mArgument.mParameter.mParameterID = descriptors[param_id].id;
+       event.mArgument.mParameter.mScope = descriptors[param_id].scope;
+       event.mArgument.mParameter.mElement = descriptors[param_id].element;
+
+       if (AUEventListenerRemoveEventType (_parameter_listener, _parameter_listener_arg, &event) != noErr) {
+               return -1;
+       } 
+
        return 0;
 }
 
@@ -2787,9 +2781,23 @@ AUPlugin::_parameter_change_listener (void* arg, void* src, const AudioUnitEvent
 void
 AUPlugin::parameter_change_listener (void* /*arg*/, void* /*src*/, const AudioUnitEvent* event, UInt64 /*host_time*/, Float32 new_value)
 {
-       ParameterMap::iterator i = parameter_map.find (event->mArgument.mParameter.mParameterID);
-
-       if (i != parameter_map.end()) {
-               ParameterChanged (i->second, new_value);
-       }
+        ParameterMap::iterator i;
+
+        if ((i = parameter_map.find (event->mArgument.mParameter.mParameterID)) == parameter_map.end()) {
+                return;
+        }
+        
+        switch (event->mEventType) {
+        case kAudioUnitEvent_BeginParameterChangeGesture:
+                StartTouch (i->second);
+                break;
+        case kAudioUnitEvent_EndParameterChangeGesture:
+                EndTouch (i->second);
+                break;
+        case kAudioUnitEvent_ParameterValueChange:
+                ParameterChanged (i->second, new_value);
+                break;
+        default:
+                break;
+        }
 }