Fix AU preset handling
[ardour.git] / libs / ardour / audio_unit.cc
index 0cea4dd09984804c161f88fbe39716f2c3856685..0b68c95dcedcc85089b2ff3b15ad44d86b983d4e 100644 (file)
 #include <glibmm/miscutils.h>
 
 #include "ardour/ardour.h"
+#include "ardour/audio_unit.h"
 #include "ardour/audioengine.h"
 #include "ardour/audio_buffer.h"
 #include "ardour/debug.h"
-#include "ardour/midi_buffer.h"
 #include "ardour/filesystem_paths.h"
 #include "ardour/io.h"
-#include "ardour/audio_unit.h"
+#include "ardour/midi_buffer.h"
 #include "ardour/route.h"
 #include "ardour/session.h"
 #include "ardour/tempo.h"
@@ -487,6 +487,7 @@ AUPlugin::AUPlugin (const AUPlugin& other)
        , input_buffers (0)
        , input_map (0)
        , samples_processed (0)
+       , audio_input_cnt (0)
        , _parameter_listener (0)
        , _parameter_listener_arg (0)
        , transport_sample (0)
@@ -1269,7 +1270,7 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out, Cha
                for (vector<pair<int,int> >::const_iterator i = ioc.begin(); i != ioc.end(); ++i) {
                        int32_t possible_in = i->first;
                        int32_t possible_out = i->second;
-                       if (possible_in < 1 || possible_out < 1) {
+                       if (possible_in < 0) {
                                continue;
                        }
                        for (uint32_t i = 1; i < input_elements; ++i) {
@@ -1278,6 +1279,11 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out, Cha
                                // on the 2nd bus.
                                io_configs.push_back (pair<int,int> (possible_in + bus_inputs[i], possible_out));
                        }
+                       /* only add additional, optional busses to first available config.
+                        * AUPluginInfo::cached_io_configuration () already incrementally
+                        * adds busses (for instruments w/ multiple configurations)
+                        */
+                       break;
                }
        }
 
@@ -1286,7 +1292,7 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out, Cha
                for (vector<pair<int,int> >::const_iterator i = ioc.begin(); i != ioc.end(); ++i) {
                        int32_t possible_in = i->first;
                        int32_t possible_out = i->second;
-                       if (possible_in < 1 || possible_out < 1) {
+                       if (possible_out < 0) {
                                continue;
                        }
                        for (uint32_t i = 1; i < output_elements; ++i) {
@@ -1296,6 +1302,11 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out, Cha
                                }
                                io_configs.push_back (pair<int,int> (possible_in, possible_out + c));
                        }
+                       /* only add additional, optional busses to first available config.
+                        * AUPluginInfo::cached_io_configuration () already incrementally
+                        * adds busses (for instruments w/ multiple configurations)
+                        */
+                       break;
                }
        }
 
@@ -1628,7 +1639,7 @@ AUPlugin::render_callback(AudioUnitRenderActionFlags*,
 int
 AUPlugin::connect_and_run (BufferSet& bufs,
                samplepos_t start, samplepos_t end, double speed,
-               ChanMapping in_map, ChanMapping out_map,
+               ChanMapping const& in_map, ChanMapping const& out_map,
                pframes_t nframes, samplecnt_t offset)
 {
        Plugin::connect_and_run(bufs, start, end, speed, in_map, out_map, nframes, offset);
@@ -2268,7 +2279,7 @@ AUPlugin::do_save_preset (string preset_name)
 
        DEBUG_TRACE (DEBUG::AudioUnits, string_compose("AU Saving Preset to %1\n", user_preset_path));
 
-       return string ("file:///") + user_preset_path;
+       return user_preset_path;
 }
 
 //-----------------------------------------------------------------------------
@@ -2906,14 +2917,14 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
                        continue;
 
                case kAudioUnitType_Output:
-                       info->category = _("AudioUnit Output");
+                       info->category = _("Output");
                        break;
                case kAudioUnitType_MusicDevice:
                        info->category = _("Instrument");
                        has_midi_in = true;
                        break;
                case kAudioUnitType_MusicEffect:
-                       info->category = _("Music Effect");
+                       info->category = _("Effect");
                        has_midi_in = true;
                        break;
                case kAudioUnitType_Effect:
@@ -2926,7 +2937,7 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
                        info->category = _("Generator");
                        break;
                default:
-                       info->category = _("AudioUnit (Unknown)");
+                       info->category = _("(Unknown)");
                        break;
                }
 
@@ -3300,6 +3311,13 @@ AUPluginInfo::is_instrument () const
        return descriptor->IsMusicDevice();
 }
 
+bool
+AUPluginInfo::is_utility () const
+{
+       return (descriptor->IsGenerator() || descriptor->componentType == 'aumi');
+       // kAudioUnitType_MidiProcessor  ..looks like we aren't even scanning for these yet?
+}
+
 void
 AUPlugin::set_info (PluginInfoPtr info)
 {