diff options
Diffstat (limited to 'libs/panners')
-rw-r--r-- | libs/panners/1in2out/panner_1in2out.cc | 3 | ||||
-rw-r--r-- | libs/panners/1in2out/panner_1in2out.h | 5 | ||||
-rw-r--r-- | libs/panners/1in2out/wscript | 1 | ||||
-rw-r--r-- | libs/panners/2in2out/panner_2in2out.cc | 3 | ||||
-rw-r--r-- | libs/panners/2in2out/wscript | 1 | ||||
-rw-r--r-- | libs/panners/vbap/vbap.cc | 18 | ||||
-rw-r--r-- | libs/panners/vbap/vbap_speakers.cc | 51 | ||||
-rw-r--r-- | libs/panners/vbap/wscript | 1 |
8 files changed, 53 insertions, 30 deletions
diff --git a/libs/panners/1in2out/panner_1in2out.cc b/libs/panners/1in2out/panner_1in2out.cc index 4524ed560b..00024768e4 100644 --- a/libs/panners/1in2out/panner_1in2out.cc +++ b/libs/panners/1in2out/panner_1in2out.cc @@ -51,6 +51,7 @@ #include "ardour/buffer_set.h" #include "ardour/audio_buffer.h" #include "ardour/pannable.h" +#include "ardour/visibility.h" #include "i18n.h" #include "panner_1in2out.h" @@ -67,7 +68,7 @@ static PanPluginDescriptor _descriptor = { Panner1in2out::factory }; -extern "C" { PanPluginDescriptor* panner_descriptor () { return &_descriptor; } } +extern "C" ARDOURPANNER_API PanPluginDescriptor* panner_descriptor () { return &_descriptor; } Panner1in2out::Panner1in2out (boost::shared_ptr<Pannable> p) : Panner (p) diff --git a/libs/panners/1in2out/panner_1in2out.h b/libs/panners/1in2out/panner_1in2out.h index 97d23495c7..912072096b 100644 --- a/libs/panners/1in2out/panner_1in2out.h +++ b/libs/panners/1in2out/panner_1in2out.h @@ -33,6 +33,7 @@ #include "ardour/types.h" #include "ardour/panner.h" + namespace ARDOUR { class Panner1in2out : public Panner @@ -41,8 +42,8 @@ class Panner1in2out : public Panner Panner1in2out (boost::shared_ptr<Pannable>); ~Panner1in2out (); - void set_position (double); - bool clamp_position (double&); + void set_position (double); + bool clamp_position (double&); std::pair<double, double> position_range () const; double position() const; diff --git a/libs/panners/1in2out/wscript b/libs/panners/1in2out/wscript index 70c34d0779..31ff7e7fd1 100644 --- a/libs/panners/1in2out/wscript +++ b/libs/panners/1in2out/wscript @@ -23,6 +23,7 @@ def build(bld): obj.source = [ 'panner_1in2out.cc' ] obj.export_includes = ['.'] obj.cxxflags = '-DPACKAGE="libardour_pan1in2out"' + obj.defines = [ 'ARDOURPANNER_DLL_EXPORTS' ] obj.includes = ['.'] obj.name = 'libardour_pan1in2out' obj.target = 'pan1in2out' diff --git a/libs/panners/2in2out/panner_2in2out.cc b/libs/panners/2in2out/panner_2in2out.cc index a316b764c7..6740f56e65 100644 --- a/libs/panners/2in2out/panner_2in2out.cc +++ b/libs/panners/2in2out/panner_2in2out.cc @@ -49,6 +49,7 @@ #include "ardour/runtime_functions.h" #include "ardour/session.h" #include "ardour/utils.h" +#include "ardour/visibility.h" #include "ardour/mix.h" #include "panner_2in2out.h" @@ -67,7 +68,7 @@ static PanPluginDescriptor _descriptor = { Panner2in2out::factory }; -extern "C" { PanPluginDescriptor* panner_descriptor () { return &_descriptor; } } +extern "C" ARDOURPANNER_API PanPluginDescriptor* panner_descriptor () { return &_descriptor; } Panner2in2out::Panner2in2out (boost::shared_ptr<Pannable> p) : Panner (p) diff --git a/libs/panners/2in2out/wscript b/libs/panners/2in2out/wscript index 8288ef28f7..2aeca322d0 100644 --- a/libs/panners/2in2out/wscript +++ b/libs/panners/2in2out/wscript @@ -23,6 +23,7 @@ def build(bld): obj.source = [ 'panner_2in2out.cc' ] obj.export_includes = ['.'] obj.cxxflags = '-DPACKAGE="libardour_pan2in2out"' + obj.defines = [ 'ARDOURPANNER_DLL_EXPORTS' ] obj.includes = ['.'] obj.name = 'libardour_pan2in2out' obj.target = 'pan2in2out' diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc index 1cef98fc7d..6d7496729c 100644 --- a/libs/panners/vbap/vbap.cc +++ b/libs/panners/vbap/vbap.cc @@ -25,6 +25,10 @@ #include <iostream> #include <string> +#ifdef COMPILER_MSVC +#include <malloc.h> +#endif + #include "pbd/cartesian.h" #include "pbd/compose.h" @@ -50,7 +54,7 @@ static PanPluginDescriptor _descriptor = { VBAPanner::factory }; -extern "C" { PanPluginDescriptor* panner_descriptor () { return &_descriptor; } } +extern "C" ARDOURPANNER_API PanPluginDescriptor* panner_descriptor () { return &_descriptor; } VBAPanner::Signal::Signal (Session&, VBAPanner&, uint32_t, uint32_t n_speakers) { @@ -62,7 +66,7 @@ VBAPanner::Signal::Signal (Session&, VBAPanner&, uint32_t, uint32_t n_speakers) } void -VBAPanner::Signal::Signal::resize_gains (uint32_t n) +VBAPanner::Signal::resize_gains (uint32_t n) { gains.assign (n, 0.0); } @@ -290,7 +294,7 @@ VBAPanner::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_co assert (sz == obufs.count().n_audio()); - int8_t outputs[sz]; // on the stack, no malloc + int8_t *outputs = (int8_t*)alloca(sz); // on the stack, no malloc /* set initial state of each output "record" */ @@ -319,10 +323,10 @@ VBAPanner::distribute_one (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_co /* at this point, we can test a speaker's status: - (outputs[o] & 1) <= in use before - (outputs[o] & 2) <= in use this time - (outputs[o] & 3) == 3 <= in use both times - outputs[o] == 0 <= not in use either time + (*outputs[o] & 1) <= in use before + (*outputs[o] & 2) <= in use this time + (*outputs[o] & 3) == 3 <= in use both times + *outputs[o] == 0 <= not in use either time */ diff --git a/libs/panners/vbap/vbap_speakers.cc b/libs/panners/vbap/vbap_speakers.cc index b84698bbd9..f2533222bd 100644 --- a/libs/panners/vbap/vbap_speakers.cc +++ b/libs/panners/vbap/vbap_speakers.cc @@ -31,6 +31,11 @@ of the software. */ +#ifdef COMPILER_MSVC +#pragma warning ( disable : 4244 ) +#endif + +#include <vector> #include <cmath> #include <algorithm> #include <stdlib.h> @@ -45,6 +50,13 @@ using namespace std; const double VBAPSpeakers::MIN_VOL_P_SIDE_LGTH = 0.01; +typedef std::vector<double> DoubleVector; +typedef std::vector<float> FloatVector; +typedef std::vector<bool> BoolVector; +typedef std::vector<int> IntVector; +typedef std::vector<IntVector> IntVector2D; +typedef std::vector<DoubleVector> DoubleVector2D; + VBAPSpeakers::VBAPSpeakers (boost::shared_ptr<Speakers> s) : _dimension (2) , _parent (s) @@ -104,17 +116,18 @@ VBAPSpeakers::choose_speaker_triplets(struct ls_triplet_chain **ls_triplets) int i,j,k,l,table_size; int n_speakers = _speakers.size (); - int connections[n_speakers][n_speakers]; - float distance_table[((n_speakers * (n_speakers - 1)) / 2)]; - int distance_table_i[((n_speakers * (n_speakers - 1)) / 2)]; - int distance_table_j[((n_speakers * (n_speakers - 1)) / 2)]; - float distance; - struct ls_triplet_chain *trip_ptr, *prev, *tmp_ptr; - if (n_speakers == 0) { + if (n_speakers < 1) { return; } + FloatVector distance_table(((n_speakers * (n_speakers - 1)) / 2)); + IntVector distance_table_i(((n_speakers * (n_speakers - 1)) / 2)); + IntVector distance_table_j(((n_speakers * (n_speakers - 1)) / 2)); + IntVector2D connections(n_speakers, IntVector(n_speakers)); + float distance; + struct ls_triplet_chain *trip_ptr, *prev, *tmp_ptr; + for (i = 0; i < n_speakers; i++) { for (j = i+1; j < n_speakers; j++) { for(k=j+1;k<n_speakers;k++) { @@ -505,25 +518,25 @@ VBAPSpeakers::choose_speaker_pairs (){ matrices and stores the data to a global array */ const int n_speakers = _speakers.size(); - const double AZIMUTH_DELTA_THRESHOLD_DEGREES = (180.0/M_PI) * (M_PI - 0.175); - int sorted_speakers[n_speakers]; - bool exists[n_speakers]; - double inverse_matrix[n_speakers][4]; - int expected_pairs = 0; - int pair; - int speaker; - - if (n_speakers == 0) { + if (n_speakers < 1) { return; } + IntVector sorted_speakers(n_speakers); + BoolVector exists(n_speakers); + DoubleVector2D inverse_matrix(n_speakers, DoubleVector(4)); + const double AZIMUTH_DELTA_THRESHOLD_DEGREES = (180.0/M_PI) * (M_PI - 0.175); + int expected_pairs = 0; + int pair; + int speaker; + for (speaker = 0; speaker < n_speakers; ++speaker) { exists[speaker] = false; } /* sort loudspeakers according their aximuth angle */ - sort_2D_lss (sorted_speakers); + sort_2D_lss (&sorted_speakers[0]); /* adjacent loudspeakers are the loudspeaker pairs to be used.*/ for (speaker = 0; speaker < n_speakers-1; speaker++) { @@ -532,7 +545,7 @@ VBAPSpeakers::choose_speaker_pairs (){ _speakers[sorted_speakers[speaker]].angles().azi) <= AZIMUTH_DELTA_THRESHOLD_DEGREES) { if (calc_2D_inv_tmatrix( _speakers[sorted_speakers[speaker]].angles().azi, _speakers[sorted_speakers[speaker+1]].angles().azi, - inverse_matrix[speaker]) != 0){ + &inverse_matrix[speaker][0]) != 0){ exists[speaker] = true; expected_pairs++; } @@ -543,7 +556,7 @@ VBAPSpeakers::choose_speaker_pairs (){ +_speakers[sorted_speakers[0]].angles().azi) <= AZIMUTH_DELTA_THRESHOLD_DEGREES) { if (calc_2D_inv_tmatrix(_speakers[sorted_speakers[n_speakers-1]].angles().azi, _speakers[sorted_speakers[0]].angles().azi, - inverse_matrix[n_speakers-1]) != 0) { + &inverse_matrix[n_speakers-1][0]) != 0) { exists[n_speakers-1] = true; expected_pairs++; } diff --git a/libs/panners/vbap/wscript b/libs/panners/vbap/wscript index c6ba94261f..9258277810 100644 --- a/libs/panners/vbap/wscript +++ b/libs/panners/vbap/wscript @@ -23,6 +23,7 @@ def build(bld): obj.source = [ 'vbap_speakers.cc', 'vbap.cc' ] obj.export_includes = ['.'] obj.cxxflags = '-DPACKAGE="libardour_panvbap"' + obj.defines = [ 'ARDOURPANNER_DLL_EXPORTS' ] obj.includes = ['.'] obj.name = 'libardour_panvbap' obj.target = 'panvbap' |