diff options
author | Robin Gareus <robin@gareus.org> | 2014-01-10 12:13:22 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-01-10 12:13:22 +0100 |
commit | 8d64665ce18a7feab1ad0483b2dc73e036ca2bf8 (patch) | |
tree | 01d2dda28445c5ad5e8851dc69f1bd16d16a7df8 /libs/ardour/panner_manager.cc | |
parent | 99ed84c429b941fe7ce829bf66979c29a9c33713 (diff) |
add a fixed priority to panner modules
Diffstat (limited to 'libs/ardour/panner_manager.cc')
-rw-r--r-- | libs/ardour/panner_manager.cc | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/libs/ardour/panner_manager.cc b/libs/ardour/panner_manager.cc index b62f36b355..24fa10e225 100644 --- a/libs/ardour/panner_manager.cc +++ b/libs/ardour/panner_manager.cc @@ -146,9 +146,11 @@ PannerManager::get_descriptor (string path) PannerInfo* PannerManager::select_panner (ChanCount in, ChanCount out, std::string const uri) { + PannerInfo* rv = NULL; PanPluginDescriptor* d; int32_t nin = in.n_audio(); int32_t nout = out.n_audio(); + uint32_t priority = 0; /* look for user-preference -- check if channels match */ for (list<PannerInfo*>::iterator p = panner_info.begin(); p != panner_info.end(); ++p) { @@ -164,40 +166,51 @@ PannerManager::select_panner (ChanCount in, ChanCount out, std::string const uri for (list<PannerInfo*>::iterator p = panner_info.begin(); p != panner_info.end(); ++p) { d = &(*p)->descriptor; - if (d->in == nin && d->out == nout) { - return *p; + if (d->in == nin && d->out == nout && d->priority > priority) { + priority = d->priority; + rv = *p; } } + if (rv) { return rv; } /* no exact match, look for good fit on inputs and variable on outputs */ + priority = 0; for (list<PannerInfo*>::iterator p = panner_info.begin(); p != panner_info.end(); ++p) { d = &(*p)->descriptor; - if (d->in == nin && d->out == -1) { - return *p; + if (d->in == nin && d->out == -1 && d->priority > priority) { + priority = d->priority; + rv = *p; } } + if (rv) { return rv; } /* no exact match, look for good fit on outputs and variable on inputs */ + priority = 0; for (list<PannerInfo*>::iterator p = panner_info.begin(); p != panner_info.end(); ++p) { d = &(*p)->descriptor; - if (d->in == -1 && d->out == nout) { - return *p; + if (d->in == -1 && d->out == nout && d->priority > priority) { + priority = d->priority; + rv = *p; } } + if (rv) { return rv; } /* no exact match, look for variable fit on inputs and outputs */ + priority = 0; for (list<PannerInfo*>::iterator p = panner_info.begin(); p != panner_info.end(); ++p) { d = &(*p)->descriptor; - if (d->in == -1 && d->out == -1) { - return *p; + if (d->in == -1 && d->out == -1 && d->priority > priority) { + priority = d->priority; + rv = *p; } } + if (rv) { return rv; } warning << string_compose (_("no panner discovered for in/out = %1/%2"), nin, nout) << endmsg; |