summaryrefslogtreecommitdiff
path: root/libs/ardour/panner_manager.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-01-13 15:13:37 +0100
committerRobin Gareus <robin@gareus.org>2014-01-13 15:13:37 +0100
commit291618fe7116424448da5f7029e567d655526521 (patch)
treee8399ce25f46634a7a75670e8c97ac3747f99002 /libs/ardour/panner_manager.cc
parent9c595f8131967541808ae77bae842bd905db9caa (diff)
allow to custom select panner-type for each delivery.
Diffstat (limited to 'libs/ardour/panner_manager.cc')
-rw-r--r--libs/ardour/panner_manager.cc26
1 files changed, 24 insertions, 2 deletions
diff --git a/libs/ardour/panner_manager.cc b/libs/ardour/panner_manager.cc
index 24fa10e225..ec5b675731 100644
--- a/libs/ardour/panner_manager.cc
+++ b/libs/ardour/panner_manager.cc
@@ -218,13 +218,35 @@ PannerManager::select_panner (ChanCount in, ChanCount out, std::string const uri
}
PannerInfo*
-PannerManager::get_by_uri (std::string uri)
+PannerManager::get_by_uri (std::string uri) const
{
PannerInfo* pi = NULL;
- for (list<PannerInfo*>::iterator p = panner_info.begin(); p != panner_info.end(); ++p) {
+ for (list<PannerInfo*>::const_iterator p = panner_info.begin(); p != panner_info.end(); ++p) {
if ((*p)->descriptor.panner_uri != uri) continue;
pi = (*p);
break;
}
return pi;
}
+
+PannerUriMap
+PannerManager::get_available_panners(uint32_t const a_in, uint32_t const a_out) const
+{
+ int const in = a_in;
+ int const out = a_out;
+ PannerUriMap panner_list;
+
+ if (out < 2 || in == 0) {
+ return panner_list;
+ }
+
+ /* get available panners for current configuration. */
+ for (list<PannerInfo*>::const_iterator p = panner_info.begin(); p != panner_info.end(); ++p) {
+ PanPluginDescriptor* d = &(*p)->descriptor;
+ if (d->in != -1 && d->in != in) continue;
+ if (d->out != -1 && d->out != out) continue;
+ if (d->in == -1 && d->out == -1 && out <= 2) continue;
+ panner_list.insert(std::pair<std::string,std::string>(d->panner_uri,d->name));
+ }
+ return panner_list;
+}