summaryrefslogtreecommitdiff
path: root/libs
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
parent99ed84c429b941fe7ce829bf66979c29a9c33713 (diff)
add a fixed priority to panner modules
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/panner.h1
-rw-r--r--libs/ardour/panner_manager.cc29
-rw-r--r--libs/panners/1in2out/panner_1in2out.cc1
-rw-r--r--libs/panners/2in2out/panner_2in2out.cc1
-rw-r--r--libs/panners/stereobalance/panner_balance.cc1
-rw-r--r--libs/panners/vbap/vbap.cc1
6 files changed, 26 insertions, 8 deletions
diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h
index fa72b236f7..0c025b0ca2 100644
--- a/libs/ardour/ardour/panner.h
+++ b/libs/ardour/ardour/panner.h
@@ -178,6 +178,7 @@ struct PanPluginDescriptor {
std::string gui_uri;
int32_t in;
int32_t out;
+ uint32_t priority;
ARDOUR::Panner* (*factory)(boost::shared_ptr<ARDOUR::Pannable>, boost::shared_ptr<ARDOUR::Speakers>);
};
}
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;
diff --git a/libs/panners/1in2out/panner_1in2out.cc b/libs/panners/1in2out/panner_1in2out.cc
index b7ca5ce914..12e7896cfb 100644
--- a/libs/panners/1in2out/panner_1in2out.cc
+++ b/libs/panners/1in2out/panner_1in2out.cc
@@ -66,6 +66,7 @@ static PanPluginDescriptor _descriptor = {
"http://ardour.org/plugin/panner_1in2out",
"http://ardour.org/plugin/panner_1in2out#ui",
1, 2,
+ 10000,
Panner1in2out::factory
};
diff --git a/libs/panners/2in2out/panner_2in2out.cc b/libs/panners/2in2out/panner_2in2out.cc
index 43cf4840a1..f801a36ff4 100644
--- a/libs/panners/2in2out/panner_2in2out.cc
+++ b/libs/panners/2in2out/panner_2in2out.cc
@@ -66,6 +66,7 @@ static PanPluginDescriptor _descriptor = {
"http://ardour.org/plugin/panner_2in2out",
"http://ardour.org/plugin/panner_2in2out#ui",
2, 2,
+ 10000,
Panner2in2out::factory
};
diff --git a/libs/panners/stereobalance/panner_balance.cc b/libs/panners/stereobalance/panner_balance.cc
index 18bda54b18..d5ab96b73c 100644
--- a/libs/panners/stereobalance/panner_balance.cc
+++ b/libs/panners/stereobalance/panner_balance.cc
@@ -67,6 +67,7 @@ static PanPluginDescriptor _descriptor = {
"http://ardour.org/plugin/panner_balance",
"http://ardour.org/plugin/panner_balance#ui",
2, 2,
+ 2000,
Pannerbalance::factory
};
diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc
index 83095cf7b8..2241ab96e3 100644
--- a/libs/panners/vbap/vbap.cc
+++ b/libs/panners/vbap/vbap.cc
@@ -49,6 +49,7 @@ static PanPluginDescriptor _descriptor = {
"http://ardour.org/plugin/panner_vbap",
"http://ardour.org/plugin/panner_vbap#ui",
-1, -1,
+ 1000,
VBAPanner::factory
};