diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-01-15 14:29:32 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-01-15 14:29:32 -0500 |
commit | 9aacefc17010a889222425f97b99050171165038 (patch) | |
tree | a1a80ed3557caa2b223274fd33f54df35252ee5f /libs/ardour/vst_plugin.cc | |
parent | 96586e81f40e883a7807c88eaa7df73b60140352 (diff) | |
parent | 79b56b1d3319d03d14b2d3e2f8d6cd7b3e797deb (diff) |
merge with master
Diffstat (limited to 'libs/ardour/vst_plugin.cc')
-rw-r--r-- | libs/ardour/vst_plugin.cc | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc index 168bd0506e..f87f7b73c1 100644 --- a/libs/ardour/vst_plugin.cc +++ b/libs/ardour/vst_plugin.cc @@ -528,23 +528,36 @@ VSTPlugin::connect_and_run (BufferSet& bufs, { Plugin::connect_and_run (bufs, in_map, out_map, nframes, offset); - // VC++ doesn't support this C99 extension. Use alloca instead of dynamic array (rather than std::vector which allocs on the heap) + ChanCount bufs_count; + bufs_count.set(DataType::AUDIO, 1); + bufs_count.set(DataType::MIDI, 1); + + BufferSet& silent_bufs = _session.get_silent_buffers(bufs_count); + BufferSet& scratch_bufs = _session.get_scratch_buffers(bufs_count); + float** ins = (float**)alloca(_plugin->numInputs*sizeof(float*)); float** outs = (float**)alloca(_plugin->numInputs*sizeof(float*)); - int32_t i; - const uint32_t nbufs = bufs.count().n_audio(); + int32_t i; - int in_index = 0; + uint32_t in_index = 0; for (i = 0; i < (int32_t) _plugin->numInputs; ++i) { - ins[i] = bufs.get_audio(min((uint32_t) in_index, nbufs - 1)).data() + offset; - in_index++; + uint32_t index; + bool valid = false; + index = in_map.get(DataType::AUDIO, in_index++, &valid); + ins[i] = (valid) + ? bufs.get_audio(index).data(offset) + : silent_bufs.get_audio(0).data(offset); } - int out_index = 0; + uint32_t out_index = 0; for (i = 0; i < (int32_t) _plugin->numOutputs; ++i) { - outs[i] = bufs.get_audio(min((uint32_t) out_index, nbufs - 1)).data() + offset; - out_index++; + uint32_t index; + bool valid = false; + index = out_map.get(DataType::AUDIO, out_index++, &valid); + outs[i] = (valid) + ? bufs.get_audio(index).data(offset) + : scratch_bufs.get_audio(0).data(offset); } if (bufs.count().n_midi() > 0) { |