|
|
|
|
@@ -369,19 +369,16 @@ PluginInsert::connect_and_run (BufferSet& bufs, pframes_t nframes, framecnt_t of
|
|
|
|
|
ChanCount const in_streams = input_streams ();
|
|
|
|
|
ChanCount const out_streams = output_streams ();
|
|
|
|
|
|
|
|
|
|
ChanMapping in_map (in_streams);
|
|
|
|
|
ChanMapping out_map (out_streams);
|
|
|
|
|
bool valid;
|
|
|
|
|
if (_match.method == Split) {
|
|
|
|
|
/* fix the input mapping so that we have maps for each of the plugin's inputs */
|
|
|
|
|
in_map = ChanMapping (natural_input_streams ());
|
|
|
|
|
|
|
|
|
|
/* copy the first stream's buffer contents to the others */
|
|
|
|
|
/* XXX: audio only */
|
|
|
|
|
uint32_t first_idx = in_map.get (DataType::AUDIO, 0, &valid);
|
|
|
|
|
uint32_t first_idx = _in_map.get (DataType::AUDIO, 0, &valid);
|
|
|
|
|
if (valid) {
|
|
|
|
|
for (uint32_t i = in_streams.n_audio(); i < natural_input_streams().n_audio(); ++i) {
|
|
|
|
|
bufs.get_audio(in_map.get (DataType::AUDIO, i, &valid)).read_from(bufs.get_audio(first_idx), nframes, offset, offset);
|
|
|
|
|
bufs.get_audio(_in_map.get (DataType::AUDIO, i, &valid)).read_from(bufs.get_audio(first_idx), nframes, offset, offset);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -441,6 +438,12 @@ PluginInsert::connect_and_run (BufferSet& bufs, pframes_t nframes, framecnt_t of
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// copy - for now - since the map is offset below
|
|
|
|
|
// TODO: use dedicated maps per plugin
|
|
|
|
|
ChanMapping in_map (_in_map);
|
|
|
|
|
ChanMapping out_map (_out_map);
|
|
|
|
|
|
|
|
|
|
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
|
|
|
|
|
if ((*i)->connect_and_run(bufs, in_map, out_map, nframes, offset)) {
|
|
|
|
|
deactivate ();
|
|
|
|
|
@@ -486,16 +489,8 @@ PluginInsert::silence (framecnt_t nframes)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ChanMapping in_map(input_streams());
|
|
|
|
|
ChanMapping out_map(output_streams());
|
|
|
|
|
|
|
|
|
|
if (_match.method == Split) {
|
|
|
|
|
/* fix the input mapping so that we have maps for each of the plugin's inputs */
|
|
|
|
|
in_map = ChanMapping (natural_input_streams ());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
|
|
|
|
|
(*i)->connect_and_run (_session.get_scratch_buffers ((*i)->get_info()->n_inputs, true), in_map, out_map, nframes, 0);
|
|
|
|
|
(*i)->connect_and_run (_session.get_scratch_buffers ((*i)->get_info()->n_inputs, true), _in_map, _out_map, nframes, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -752,6 +747,22 @@ PluginInsert::configure_io (ChanCount in, ChanCount out)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_match.method == Split) {
|
|
|
|
|
/* fix the input mapping so that we have maps for each of the plugin's inputs */
|
|
|
|
|
_in_map = ChanMapping (natural_input_streams ());
|
|
|
|
|
} else {
|
|
|
|
|
_in_map = ChanMapping (input_streams ());
|
|
|
|
|
}
|
|
|
|
|
_out_map = ChanMapping (output_streams());
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
cout << "Set Channel Maps:" << name () << " " << this
|
|
|
|
|
<< "\nin:\n" << _in_map
|
|
|
|
|
<< "\nout:\n" << _out_map
|
|
|
|
|
<< "\n";
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( (old_match.method != _match.method && (old_match.method == Split || _match.method == Split))
|
|
|
|
|
|| old_in != in
|
|
|
|
|
|| old_out != out
|
|
|
|
|
|