bool set_preset_out (const ChanCount&);
bool add_sidechain (uint32_t n_audio = 1);
bool del_sidechain ();
+ void set_sidechain_latency (uint32_t, uint32_t);
boost::shared_ptr<SideChain> sidechain () const { return _sidechain; }
// end C++ class slavery!
Plugins _plugins;
boost::shared_ptr<SideChain> _sidechain;
+ uint32_t _sc_playback_latency;
+ uint32_t _sc_capture_latency;
boost::weak_ptr<Plugin> _impulseAnalysisPlugin;
PluginInsert::PluginInsert (Session& s, boost::shared_ptr<Plugin> plug)
: Processor (s, (plug ? plug->name() : string ("toBeRenamed")))
+ , _sc_playback_latency (0)
+ , _sc_capture_latency (0)
, _signal_analysis_collected_nframes(0)
, _signal_analysis_collect_nframes_max(0)
, _configured (false)
return false;
}
_sidechain.reset ();
+ _sc_playback_latency = 0;
+ _sc_capture_latency = 0;
PluginConfigChanged (); /* EMIT SIGNAL */
return true;
}
+void
+PluginInsert::set_sidechain_latency (uint32_t capture, uint32_t playback)
+{
+ if (_sidechain &&
+ (_sc_playback_latency != playback || _sc_capture_latency != capture)) {
+ _sc_capture_latency = capture;
+ _sc_playback_latency = playback;
+ LatencyRange pl; pl.min = pl.max = playback;
+ LatencyRange cl; cl.min = cl.max = capture;
+ DEBUG_TRACE (DEBUG::Latency, string_compose ("%1: capture %2 playback; %3\n", _sidechain->name (), capture, playback));
+ PortSet& ps (_sidechain->input ()->ports ());
+ for (PortSet::iterator p = ps.begin(); p != ps.end(); ++p) {
+ p->set_private_latency_range (pl, true);
+ p->set_private_latency_range (cl, false);
+ }
+ }
+}
+
void
PluginInsert::control_list_automation_state_changed (Evoral::Parameter which, AutoState s)
{
if (boost::dynamic_pointer_cast<Send>(*i) != 0) {
boost::dynamic_pointer_cast<Send>(*i)->set_delay_in(_signal_latency - latency);
}
+ if (boost::dynamic_pointer_cast<PluginInsert>(*i) != 0) {
+ const framecnt_t longest_session_latency = _initial_delay + _signal_latency;
+ boost::dynamic_pointer_cast<PluginInsert>(*i)->set_sidechain_latency (
+ _initial_delay + latency, longest_session_latency - latency);
+ }
(*i)->run (bufs, start_frame - latency, end_frame - latency, nframes, *i != _processors.back());
bufs.set_count ((*i)->output_streams());