From cf98a7555831ed3d8b824c003bf6f6472d60cd4b Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 25 Nov 2018 17:22:46 +0100 Subject: [PATCH] Do not allocate MIDI buffers for signal analysis At this point in time MIDI buffers are vastly over-sized. They include VST and LV2 event structure. This added about a MB per plugin for no benefit. --- libs/ardour/plugin_insert.cc | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index f2ba464665..9cb654bcb4 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -913,7 +913,7 @@ PluginInsert::connect_and_run (BufferSet& bufs, samplepos_t start, samplepos_t e //std::cerr << " streams " << internal_input_streams().n_audio() << std::endl; //std::cerr << "filling buffer with " << collect_signal_nframes << " samples at " << _signal_analysis_collected_nframes << std::endl; - _signal_analysis_inputs.set_count(input_streams()); + _signal_analysis_inputs.set_count (ChanCount (DataType::AUDIO, input_streams().n_audio())); for (uint32_t i = 0; i < input_streams().n_audio(); ++i) { _signal_analysis_inputs.get_audio(i).read_from ( @@ -1048,7 +1048,7 @@ PluginInsert::connect_and_run (BufferSet& bufs, samplepos_t start, samplepos_t e //std::cerr << " output, bufs " << bufs.count().n_audio() << " count, " << bufs.available().n_audio() << " available" << std::endl; //std::cerr << " streams " << internal_output_streams().n_audio() << std::endl; - _signal_analysis_outputs.set_count(output_streams()); + _signal_analysis_outputs.set_count (ChanCount (DataType::AUDIO, output_streams().n_audio())); for (uint32_t i = 0; i < output_streams().n_audio(); ++i) { _signal_analysis_outputs.get_audio(i).read_from( @@ -2063,15 +2063,20 @@ PluginInsert::configure_io (ChanCount in, ChanCount out) _delaybuffers.configure (_configured_out, _plugins.front ()->max_latency ()); _latency_changed = true; - // we don't know the analysis window size, so we must work with the - // current buffer size here. each request for data fills in these - // buffers and the analyser makes sure it gets enough data for the - // analysis window - session().ensure_buffer_set (_signal_analysis_inputs, in); - _signal_analysis_inputs.set_count (in); + /* we don't know the analysis window size, so we must work with the + * current buffer size here. each request for data fills in these + * buffers and the analyser makes sure it gets enough data for the + * analysis window. We also only analyze audio, so we can ignore + * MIDI buffers. + */ + ChanCount cc_analysis_in (DataType::AUDIO, in.n_audio()); + ChanCount cc_analysis_out (DataType::AUDIO, out.n_audio()); - session().ensure_buffer_set (_signal_analysis_outputs, out); - _signal_analysis_outputs.set_count (out); + session().ensure_buffer_set (_signal_analysis_inputs, cc_analysis_in); + _signal_analysis_inputs.set_count (cc_analysis_in); + + session().ensure_buffer_set (_signal_analysis_outputs, cc_analysis_out); + _signal_analysis_outputs.set_count (cc_analysis_out); // std::cerr << "set counts to i" << in.n_audio() << "/o" << out.n_audio() << std::endl;