This commit adds ARM NEON optimized routines for the following procedures
below:
*_compute_peak
*_find_peaks
*_apply_gain_to_buffer
*_mix_buffers_with_gain
*_mix_buffers_no_gain
*_copy_vector
NEON optimized routines have a prefix of: arm_neon_
Previously when the master-bus had more outputs than inputs,
Ardour crashed when the monitor-section was set up.
Removing a master-bus output port calls
Route::output_change_handler (master-bus)
-> Session::reset_monitor_section
which first removes the corresponding monitor-section input,
then output port. The latter triggers
ARDOUR::Route::output_change_handler (monitor-bus).
All with the process-lock held, so at this point in time Ardour
has removed the port-reference but the port still exists in the
backend.
Now the monitor-bus processors are re-configured and
the channel-count is updated. The port that was just removed
and triggered the ::output_change_handler() callback is
re-created.
unable to create port 'Monitor/audio_out 2': failed constructor
This fix changes the monitor-section to use strict-i/o (for plugins)
and also use master-bus output (not input) when configuring
processors.
Ardour's "pbd/i18n.h" needs to be included last,
after any include that may indirectly pull in getext or libintl.
For that reason "pbd/i18n.h" must not be used in header files either.
These are longer be used since Seuqnce has a "force_discrete"
boolen that needs to be taken into account in addition to
user-configurable ControlList _interpolation mode.
`_mm256_cvtss_f32` is only available in avxintrin.h of gcc-8 or
later. There it is defined as
```
extern __inline float
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
_mm256_cvtss_f32 (__m256 __A)
{
return __A[0];
}
```
While explicit `vcurrent[0]` works with gcc-5 and gcc-6,
older gcc-4 fails with the following
error: invalid types 'float __vector__[int]' for array subscript
This fixes symbol mangle for window builds, and offers backwards
compatibility with older systems where the inline _mm256_cvtss_f32
is not defined in avxintrin.h
This commit adds AVX optimized routines for the following
procedures below:
*_compute_peak
*_find_peaks
*_apply_gain_to_buffer
*_mix_buffers_with_gain
*_mix_buffers_no_gain
AVX optimized routine has the prefix of: x86_sse_avx_
Note: mix_buffer_with_gain and mix_buffers_no_gain may prefer
SSE implementaion over AVX if source and destination pointers
are aligned to 16 byte boundaries. Therefore, it will be optimal if
_all_ audio buffers are allocated to 32 byte boundaries to take
full advantage of AVX ISA extension.
Previously when loading old session Route::init() of the master-bus
was called without the "MasterOut" or "MonitorOut" flag being set.
Various conditions that relied on is_master() or is_monitor()
during initialization failed when loading those sessions, leading
to subtle breakage.
This adds a few exceptions to the general preference
"Sound MIDI notes as they are being selected in the editor".
* Select all no longer plays _all_ notes.
* Remain silent when selection is inverted or a range is selected.
* Play no sound when a saved selection is restored on session load.
i18n must be included last, after all template specialization.
Otherwise the following happens:
In file included from ../libs/pbd/pbd/i18n.h:22:
../libs/pbd/pbd/compose.h:122:6: error: call to function 'operator<<' that is neither visible in the template definition nor found by argument-dependent lookup