summaryrefslogtreecommitdiff
path: root/libs/ardour/panner_manager.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-01-10 12:13:22 +0100
committerRobin Gareus <robin@gareus.org>2014-01-10 12:13:22 +0100
commit8d64665ce18a7feab1ad0483b2dc73e036ca2bf8 (patch)
tree01d2dda28445c5ad5e8851dc69f1bd16d16a7df8 /libs/ardour/panner_manager.cc
parent99ed84c429b941fe7ce829bf66979c29a9c33713 (diff)
add a fixed priority to panner modules
Diffstat (limited to 'libs/ardour/panner_manager.cc')
-rw-r--r--libs/ardour/panner_manager.cc29
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;