X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmix.cc;h=96ae62448703a9d0406cc8e7eee91939a353782a;hb=884cb355230d293233e599bdfebae7f67684a48e;hp=0bdbf7aa1bf48ec70986e430fda53585fd8b4240;hpb=e341132df82daa96dd276fe6b57aaae787fd084a;p=ardour.git diff --git a/libs/ardour/mix.cc b/libs/ardour/mix.cc index 0bdbf7aa1b..96ae624487 100644 --- a/libs/ardour/mix.cc +++ b/libs/ardour/mix.cc @@ -24,13 +24,15 @@ #include "ardour/runtime_functions.h" #include +using std::min; +using std::max; using namespace ARDOUR; #if defined (ARCH_X86) && defined (BUILD_SSE_OPTIMIZATIONS) // Debug wrappers float -debug_compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current) +debug_compute_peak (const ARDOUR::Sample *buf, pframes_t nsamples, float current) { if ( ((intptr_t)buf % 16) != 0) { std::cerr << "compute_peak(): buffer unaligned!" << std::endl; @@ -40,7 +42,7 @@ debug_compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current) } void -debug_apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain) +debug_apply_gain_to_buffer (ARDOUR::Sample *buf, pframes_t nframes, float gain) { if ( ((intptr_t)buf % 16) != 0) { std::cerr << "apply_gain_to_buffer(): buffer unaligned!" << std::endl; @@ -50,7 +52,7 @@ debug_apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain) } void -debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes, float gain) +debug_mix_buffers_with_gain (ARDOUR::Sample *dst, const ARDOUR::Sample *src, pframes_t nframes, float gain) { if ( ((intptr_t)dst & 15) != 0) { std::cerr << "mix_buffers_with_gain(): dst unaligned!" << std::endl; @@ -65,7 +67,7 @@ debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t } void -debug_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes) +debug_mix_buffers_no_gain (ARDOUR::Sample *dst, const ARDOUR::Sample *src, pframes_t nframes) { if ( ((intptr_t)dst & 15) != 0) { std::cerr << "mix_buffers_no_gain(): dst unaligned!" << std::endl; @@ -83,62 +85,68 @@ debug_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t n float -default_compute_peak (const ARDOUR::Sample * buf, nframes_t nsamples, float current) +default_compute_peak (const ARDOUR::Sample * buf, pframes_t nsamples, float current) { - for (nframes_t i = 0; i < nsamples; ++i) { + for (pframes_t i = 0; i < nsamples; ++i) { current = f_max (current, fabsf (buf[i])); } return current; -} +} void -default_find_peaks (const ARDOUR::Sample * buf, nframes_t nframes, float *min, float *max) +default_find_peaks (const ARDOUR::Sample * buf, pframes_t nframes, float *minf, float *maxf) { - nframes_t i; + pframes_t i; float a, b; - a = *max; - b = *min; + a = *maxf; + b = *minf; - for (i = 0; i < nframes; i++) + for (i = 0; i < nframes; i++) { - a = fmax (buf[i], a); - b = fmin (buf[i], b); + a = max (buf[i], a); + b = min (buf[i], b); } - *max = a; - *min = b; + *maxf = a; + *minf = b; } void -default_apply_gain_to_buffer (ARDOUR::Sample * buf, nframes_t nframes, float gain) -{ - for (nframes_t i=0; i float -veclib_compute_peak (const ARDOUR::Sample * buf, nframes_t nsamples, float current) +veclib_compute_peak (const ARDOUR::Sample * buf, pframes_t nsamples, float current) { float tmpmax = 0.0f; vDSP_maxmgv(buf, 1, &tmpmax, nsamples); @@ -146,26 +154,26 @@ veclib_compute_peak (const ARDOUR::Sample * buf, nframes_t nsamples, float curre } void -veclib_find_peaks (const ARDOUR::Sample * buf, nframes_t nframes, float *min, float *max) +veclib_find_peaks (const ARDOUR::Sample * buf, pframes_t nframes, float *min, float *max) { vDSP_maxv (const_cast(buf), 1, max, nframes); vDSP_minv (const_cast(buf), 1, min, nframes); } void -veclib_apply_gain_to_buffer (ARDOUR::Sample * buf, nframes_t nframes, float gain) +veclib_apply_gain_to_buffer (ARDOUR::Sample * buf, pframes_t nframes, float gain) { vDSP_vsmul(buf, 1, &gain, buf, 1, nframes); } void -veclib_mix_buffers_with_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, nframes_t nframes, float gain) +veclib_mix_buffers_with_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, pframes_t nframes, float gain) { vDSP_vsma(src, 1, &gain, dst, 1, dst, 1, nframes); } void -veclib_mix_buffers_no_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, nframes_t nframes) +veclib_mix_buffers_no_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, pframes_t nframes) { // It seems that a vector mult only operation does not exist... float gain = 1.0f; @@ -173,5 +181,5 @@ veclib_mix_buffers_no_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, nf } #endif - +