Use PBD::sys::operator/ instead of PBD::sys::path::operator/= in ARDOUR::SessionDirectory
[ardour.git] / libs / ardour / audio_unit.cc
index 59797f32883f847b4a5ba32f73457ca7d5b0b726..dfcffb8cfed2288750ab9e86c59d58a47f673efa 100644 (file)
@@ -64,6 +64,14 @@ AUPlugin::~AUPlugin ()
        if (comp) {
                delete comp;
        }
+       
+       if (in_list) {
+               delete in_list;
+       }
+       
+       if (out_list) {
+               delete out_list;
+       }
 }
 
 AUPluginInfo::~AUPluginInfo ()
@@ -104,9 +112,13 @@ AUPlugin::default_value (uint32_t port)
        return 0;
 }
 
-jack_nframes_t
-AUPlugin::latency () const
+nframes_t
+AUPlugin::signal_latency () const
 {
+       if (_user_latency) {
+               return _user_latency;
+       }
+
        return unit->Latency ();
 }
 
@@ -129,7 +141,7 @@ AUPlugin::get_parameter (uint32_t which) const
 int
 AUPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const
 {
-       return -1;
+       return 0;
 }
 
 uint32_t
@@ -151,13 +163,13 @@ AUPlugin::deactivate ()
 }
 
 void
-AUPlugin::set_block_size (jack_nframes_t nframes)
+AUPlugin::set_block_size (nframes_t nframes)
 {
        
 }
 
 int
-AUPlugin::connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, jack_nframes_t nframes, jack_nframes_t offset)
+AUPlugin::connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, nframes_t nframes, nframes_t offset)
 {
        AudioUnitRenderActionFlags flags = 0;
        AudioTimeStamp ts;
@@ -314,9 +326,10 @@ AUPluginInfo::discover ()
                
                AUPluginInfoPtr plug(new AUPluginInfo);
                plug->name = AUPluginInfo::get_name (temp);
-               plug->type = PluginInfo::AudioUnit;
+               plug->type = ARDOUR::AudioUnit;
                plug->n_inputs = 0;
                plug->n_outputs = 0;
+               // plug->setup_nchannels (temp);
                plug->category = "AudioUnit";
                plug->desc = new CAComponentDescription(temp);
 
@@ -368,3 +381,21 @@ AUPluginInfo::get_name (CAComponentDescription& comp_desc)
        
        return CFStringRefToStdString(itemName);
 }
+
+void
+AUPluginInfo::setup_nchannels (CAComponentDescription& comp_desc)
+{
+       CAAudioUnit unit;
+       
+       CAAudioUnit::Open (comp_desc, unit);
+       
+       if (unit.SupportsNumChannels()) {
+               n_inputs = n_outputs = 0;
+       } else {
+               AUChannelInfo cinfo;
+               size_t info_size = sizeof(cinfo);
+               OSStatus err = AudioUnitGetProperty (unit.AU(), kAudioUnitProperty_SupportedNumChannels, kAudioUnitScope_Global,
+                                             0, &cinfo, &info_size);
+       }
+}
+