diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-01-10 16:07:57 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-01-10 16:07:57 -0500 |
commit | 3020b224fa2d6e1b6b8a576e8e8e211e0585f2a2 (patch) | |
tree | 314c3099bcc57d9af09d249e1e7dd8e45baca642 /libs/panners/vbap | |
parent | d15fda6d751a465d278f477923075d4783f3b1ca (diff) | |
parent | 897fbdc652434d3aa1e67223c3c3ef7ae9be2318 (diff) |
Merge windows+cc branch into cairocanvas branch. Not finished, need to now merge windows branch to get changes from there
Diffstat (limited to 'libs/panners/vbap')
-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 | 3 |
3 files changed, 45 insertions, 27 deletions
diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc index 2241ab96e3..f160ae3d24 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" @@ -53,7 +57,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) { @@ -65,7 +69,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); } @@ -293,7 +297,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" */ @@ -322,10 +326,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 bc18def5e6..8fe9dc8e8a 100644 --- a/libs/panners/vbap/wscript +++ b/libs/panners/vbap/wscript @@ -22,7 +22,8 @@ def build(bld): obj = bld(features = 'cxx cxxshlib') obj.source = [ 'vbap_speakers.cc', 'vbap.cc' ] obj.export_includes = ['.'] - obj.defines = [ 'PACKAGE="libardour_panvbap"' ] + obj.defines = ['PACKAGE="libardour_panvbap"'] + obj.defines += ['ARDOURPANNER_DLL_EXPORTS'] obj.includes = ['.'] obj.name = 'libardour_panvbap' obj.target = 'panvbap' |