fix a bunch of memory leaks
[ardour.git] / libs / ardour / midi_track.cc
index f88c331c2ca8a0e7b171b7f1a4aea9a5f9ac7ba9..3866eb4d80844f4790bbb418725911a69736d4a3 100644 (file)
@@ -17,8 +17,7 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
-#include <strings.h> // for ffs(3)
-
+#include "pbd/ffs.h"
 #include "pbd/enumwriter.h"
 #include "pbd/convert.h"
 #include "evoral/midi_util.h"
@@ -81,13 +80,7 @@ MidiTrack::init ()
 boost::shared_ptr<Diskstream>
 MidiTrack::create_diskstream ()
 {
-       MidiDiskstream::Flag dflags = MidiDiskstream::Flag (0);
-
-       if (_flags & Auditioner) {
-               dflags = MidiDiskstream::Flag (dflags | MidiDiskstream::Hidden);
-       } else {
-               dflags = MidiDiskstream::Flag (dflags | MidiDiskstream::Recordable);
-       }
+       MidiDiskstream::Flag dflags = MidiDiskstream::Flag (MidiDiskstream::Recordable);
 
        assert(_mode != Destructive);
 
@@ -513,7 +506,7 @@ MidiTrack::filter_channels (BufferSet& bufs, ChannelMode mode, uint32_t mask)
                                }
                                break;
                        case ForceChannel:
-                               ev.set_channel (ffs (mask) - 1);
+                               ev.set_channel (PBD::ffs (mask) - 1);
                                ++e;
                                break;
                        case AllChannels:
@@ -554,7 +547,7 @@ MidiTrack::write_out_of_band_data (BufferSet& bufs, framepos_t /*start*/, framep
 
 int
 MidiTrack::export_stuff (BufferSet& /*bufs*/, framepos_t /*start_frame*/, framecnt_t /*nframes*/, 
-                        boost::shared_ptr<Processor> /*endpoint*/, bool /*include_endpoint*/, bool /*forexport*/)
+                        boost::shared_ptr<Processor> /*endpoint*/, bool /*include_endpoint*/, bool /*for_export*/, bool /*for_freeze*/)
 {
        return -1;
 }
@@ -629,13 +622,31 @@ MidiTrack::write_immediate_event(size_t size, const uint8_t* buf)
        return (_immediate_events.write(0, type, size, buf) == size);
 }
 
+void
+MidiTrack::set_parameter_automation_state (Evoral::Parameter param, AutoState state)
+{
+       switch (param.type()) {
+       case MidiCCAutomation:
+       case MidiPgmChangeAutomation:
+       case MidiPitchBenderAutomation:
+       case MidiChannelPressureAutomation:
+       case MidiSystemExclusiveAutomation:
+               /* The track control for MIDI parameters is for immediate events to act
+                  as a control surface, write/touch for them is not currently
+                  supported. */
+               return;
+       default:
+               Automatable::set_parameter_automation_state(param, state);
+       }
+}
+
 void
 MidiTrack::MidiControl::set_value(double val)
 {
        bool valid = false;
-       if (std::isinf(val)) {
+       if (isinf(val)) {
                cerr << "MIDIControl value is infinity" << endl;
-       } else if (std::isnan(val)) {
+       } else if (isnan(val)) {
                cerr << "MIDIControl value is NaN" << endl;
        } else if (val < _list->parameter().min()) {
                cerr << "MIDIControl value is < " << _list->parameter().min() << endl;