summaryrefslogtreecommitdiff
path: root/libs/ardour/port_manager.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-11-06 00:12:32 +0100
committerRobin Gareus <robin@gareus.org>2017-11-06 00:12:32 +0100
commit4cdd3f5df65da12b316733b37f2a27bfba675095 (patch)
tree643bf357f93a29f206d6177cf54ee5e1270471f7 /libs/ardour/port_manager.cc
parentda4cea05266cbfe824a2d54173074fb30b12cbfd (diff)
Some further notes (and experiments) on optimizations
Diffstat (limited to 'libs/ardour/port_manager.cc')
-rw-r--r--libs/ardour/port_manager.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc
index 98b85e03b7..df6eee247b 100644
--- a/libs/ardour/port_manager.cc
+++ b/libs/ardour/port_manager.cc
@@ -755,7 +755,7 @@ PortManager::cycle_start (pframes_t nframes, Session* s)
/* TODO optimize
* - when speed == 1.0, the resampler copies data without processing
- * it may be more efficient to just run all in sequence
+ * it may (or may not) be more efficient to just run all in sequence.
*
* - single sequential task for 'lightweight' tasks would make sense
* (run it in parallel with 'heavy' resampling.
@@ -766,8 +766,13 @@ PortManager::cycle_start (pframes_t nframes, Session* s)
* amount of work (how many connected ports are there, how
* many resamplers need to run) vs. available CPU cores and semaphore
* synchronization overhead.
+ *
+ * - input ports: it would make sense to resample each input only once
+ * (rather than resample into each ardour-owned input port).
+ * A single external source-port may be connected to many ardour
+ * input-ports. Currently re-sampling is per input.
*/
- if (s && s->rt_tasklist () /* && fabs (Port::speed_ratio ()) != 1.0 */) {
+ if (s && s->rt_tasklist () && fabs (Port::speed_ratio ()) != 1.0) {
RTTaskList::TaskList tl;
for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) {
tl.push_back (boost::bind (&Port::cycle_start, p->second, nframes));
@@ -784,7 +789,7 @@ void
PortManager::cycle_end (pframes_t nframes, Session* s)
{
// see optimzation note in ::cycle_start()
- if (s && s->rt_tasklist () /* && fabs (Port::speed_ratio ()) != 1.0 */) {
+ if (s && s->rt_tasklist () && fabs (Port::speed_ratio ()) != 1.0) {
RTTaskList::TaskList tl;
for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) {
tl.push_back (boost::bind (&Port::cycle_end, p->second, nframes));
@@ -887,7 +892,7 @@ void
PortManager::cycle_end_fade_out (gain_t base_gain, gain_t gain_step, pframes_t nframes, Session* s)
{
// see optimzation note in ::cycle_start()
- if (s && s->rt_tasklist () /* && fabs (Port::speed_ratio ()) != 1.0 */) {
+ if (s && s->rt_tasklist () && fabs (Port::speed_ratio ()) != 1.0) {
RTTaskList::TaskList tl;
for (Ports::iterator p = _cycle_ports->begin(); p != _cycle_ports->end(); ++p) {
tl.push_back (boost::bind (&Port::cycle_end, p->second, nframes));