Tweak PluginInsert::silence (used during audition, etc)
Actually run plugins (use _pending_active), and feed silence to the plugin. Also update timing stats accordingly.
This commit is contained in:
parent
64f8f6c31a
commit
972389e1bd
@ -1256,26 +1256,40 @@ PluginInsert::silence (samplecnt_t nframes, samplepos_t start_sample)
|
|||||||
{
|
{
|
||||||
automation_run (start_sample, nframes, true); // evaluate automation only
|
automation_run (start_sample, nframes, true); // evaluate automation only
|
||||||
|
|
||||||
if (!_active) {
|
if (!_pending_active) {
|
||||||
// XXX delaybuffers need to be offset by nframes
|
// XXX delaybuffers need to be offset by nframes
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_delaybuffers.flush ();
|
_delaybuffers.flush ();
|
||||||
|
|
||||||
|
/* TODO use mapping, do not change I/O -- this can
|
||||||
|
* cause VST3 to perform activateBus, setBusArrangements calls
|
||||||
|
* which may cause causes a DSP spike (!)
|
||||||
|
*/
|
||||||
const ChanMapping in_map (natural_input_streams ());
|
const ChanMapping in_map (natural_input_streams ());
|
||||||
const ChanMapping out_map (natural_output_streams ());
|
const ChanMapping out_map (natural_output_streams ());
|
||||||
|
|
||||||
ChanCount maxbuf = ChanCount::max (natural_input_streams (), natural_output_streams());
|
ChanCount maxbuf = ChanCount::max (natural_input_streams (), natural_output_streams());
|
||||||
|
_session.get_scratch_buffers (maxbuf, true).silence (nframes, 0);
|
||||||
|
|
||||||
|
if (g_atomic_int_compare_and_exchange (&_stat_reset, 1, 0)) {
|
||||||
|
_timing_stats.reset ();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef MIXBUS
|
#ifdef MIXBUS
|
||||||
if (is_channelstrip ()) {
|
if (is_channelstrip ()) {
|
||||||
if (_configured_in.n_audio() > 0) {
|
if (_configured_in.n_audio() > 0) {
|
||||||
_plugins.front()->connect_and_run (_session.get_scratch_buffers (maxbuf, true), start_sample, start_sample + nframes, 1.0, in_map, out_map, nframes, 0);
|
_plugins.front()->connect_and_run (_session.get_scratch_buffers (maxbuf, true), start_sample, start_sample + nframes, 1.0, in_map, out_map, nframes, 0);
|
||||||
}
|
}
|
||||||
} else
|
return;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
_timing_stats.start ();
|
||||||
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
|
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
|
||||||
(*i)->connect_and_run (_session.get_scratch_buffers (maxbuf, true), start_sample, start_sample + nframes, 1.0, in_map, out_map, nframes, 0);
|
(*i)->connect_and_run (_session.get_scratch_buffers (maxbuf, true), start_sample, start_sample + nframes, 1.0, in_map, out_map, nframes, 0);
|
||||||
}
|
}
|
||||||
|
_timing_stats.update ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user