From 8d64665ce18a7feab1ad0483b2dc73e036ca2bf8 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 10 Jan 2014 12:13:22 +0100 Subject: add a fixed priority to panner modules --- libs/ardour/ardour/panner.h | 1 + libs/ardour/panner_manager.cc | 29 ++++++++++++++++++++-------- libs/panners/1in2out/panner_1in2out.cc | 1 + libs/panners/2in2out/panner_2in2out.cc | 1 + libs/panners/stereobalance/panner_balance.cc | 1 + libs/panners/vbap/vbap.cc | 1 + 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, boost::shared_ptr); }; } 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::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::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::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::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::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 }; -- cgit v1.2.3