Fix crash when running an analysis of a plugin with MIDI IO.
authorCarl Hetherington <carl@carlh.net>
Sat, 9 Oct 2010 12:17:46 +0000 (12:17 +0000)
committerCarl Hetherington <carl@carlh.net>
Sat, 9 Oct 2010 12:17:46 +0000 (12:17 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7889 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/plugin_eq_gui.cc
libs/ardour/buffer_set.cc

index b3c756777afc734a2c3d312f0a41ee78eba62591..601e45d9097c4be40239d2366948ee3df73a753a 100644 (file)
@@ -239,19 +239,14 @@ PluginEqGui::set_buffer_size(uint32_t size, uint32_t signal_size)
        _buffer_size = size;
        _signal_buffer_size = signal_size;
 
-       // These are for impulse analysis only, the signal analysis uses the actual
-       // number of I/O's for the plugininsert
-       uint32_t inputs  = _plugin->get_info()->n_inputs.n_audio();
-       uint32_t outputs = _plugin->get_info()->n_outputs.n_audio();
-
-       // buffers for the signal analysis are ensured inside PluginInsert
-       uint32_t n_chans = std::max(inputs, outputs);
-       _bufferset.ensure_buffers(ARDOUR::DataType::AUDIO, n_chans, _buffer_size);
-       _collect_bufferset.ensure_buffers(ARDOUR::DataType::AUDIO, n_chans, _buffer_size);
+       ARDOUR::ChanCount count = ARDOUR::ChanCount::max (_plugin->get_info()->n_inputs, _plugin->get_info()->n_outputs);
+       for (ARDOUR::DataType::iterator i = ARDOUR::DataType::begin(); i != ARDOUR::DataType::end(); ++i) {
+               _bufferset.ensure_buffers (*i, count.get (*i), _buffer_size);
+               _collect_bufferset.ensure_buffers (*i, count.get (*i), _buffer_size);
+       }
 
-       ARDOUR::ChanCount chanCount(ARDOUR::DataType::AUDIO, n_chans);
-       _bufferset.set_count(chanCount);
-       _collect_bufferset.set_count(chanCount);
+       _bufferset.set_count (count);
+       _collect_bufferset.set_count (count);
 }
 
 void
index e3022e745f511a01dccc2c477cd3b96cd9f9aaf8..4c802b1443e26d815828a3846349b747f47301ca 100644 (file)
@@ -215,6 +215,8 @@ BufferSet::get(DataType type, size_t i) const
 LV2EventBuffer&
 BufferSet::get_lv2_midi(bool input, size_t i)
 {
+       assert (count().get(DataType::MIDI) > i);
+       
        MidiBuffer& mbuf = get_midi(i);
        LV2Buffers::value_type b = _lv2_buffers.at(i * 2 + (input ? 0 : 1));
        LV2EventBuffer* ebuf = b.second;