Commit Graph

762 Commits

Author SHA1 Message Date
Robin Gareus
8f5c3fcddb Fix non-layered record-undo
Previously an empty RegionList was used (auto-partition
changes were never collected at rec-stop), furthermore
auto-partitioned regions do not have an old ARDOUR::AutomationList
(fade in/out) property (_have_old is false).
2021-04-12 23:14:13 +02:00
Robin Gareus
bc1d19ab39 Increase process-thread stack size (same value as jack2) 2021-04-09 22:00:11 +02:00
Robin Gareus
ea01ec5988 Correctly detect glib volatile atomic
see also https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1919
2021-03-30 15:29:53 +02:00
Robin Gareus
60ff3ef764 Work around ffado port-name idiosyncrasies 2021-03-26 17:18:23 +01:00
Robin Gareus
cc7b8b1bc5 gcc-11 compat, volatile atomic variables (1/2)
"While 'atomic' has a volatile qualifier, this is a historical
artifact and the pointer passed to it should not be volatile."

Furthermore "It is very important that all accesses to a
particular integer or pointer be performed using only this API"
(from https://developer.gnome.org/glib/2.68/glib-Atomic-Operations.html)

Hence initialization of atomic variables is changed to also use
this API, instead of directly initializing the value.

This also fixes a few cases where atomic variables were
accessed directly.

see also libs/pbd/pbd/g_atomic_compat.h
2021-03-22 15:30:07 +01:00
John Emmas
15f12bd3a9 A few minor changes to keep VS2019 happy 2021-02-09 10:52:37 +00:00
Robin Gareus
7e74f9eb1e Keep track of recently touched Controllable 2021-02-09 02:11:04 +01:00
John Emmas
b496a71d2e Some preliminary changes needed to support building with VS2019
(these get me about as far as 'libardour' )
2021-01-30 13:55:25 +00:00
Ayan Shafqat
407882d23d Add support for Intel/AMD's FMA extension
By supporting FMA extension, the number of instruction needed
for multiply accumulate to mix channels are reduced. Since,
this extension has been around since middle of 2012, more
computers have this instruction set available.
2021-01-01 21:05:16 +01:00
Robin Gareus
1db219b3d8 Fix compilation with mingw/gcc-8 2020-12-10 20:21:29 +01:00
Robin Gareus
13e6fdb6b3 Ensure ringbuffers are never copy-constructed 2020-12-07 02:54:51 +01:00
David Robillard
0404876d7b Fix reliance on deprecated implicit assignment operators
Either both, or neither, a copy constructor and assignment operator should be
defined.  This fixes Wdeprecated-copy warnings.
2020-12-01 12:03:38 +01:00
Robin Gareus
ff7bd23661 NO-OP: comments 2020-11-10 19:31:25 +01:00
Robin Gareus
512b47c878 micro-optimization (skip atomic test) 2020-11-10 19:31:09 +01:00
Robin Gareus
01cdaa49b4 Fix gcc-4.x/C++98 builds (amend f87de76b9f)
This resolves error: invalid use of 'unary *' on pointer to member
error: 'volatile gint RCUManager<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::shared_ptr<ARDOUR::Port>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::shared_ptr<ARDOUR::Port> > > > >::active_reads' is protected
2020-11-10 18:41:27 +01:00
Robin Gareus
b1846a578d NO-OP: whitespace, doxygen formatting and naming 2020-11-10 17:05:22 +01:00
Hector Martin
f87de76b9f RCU: Fix race condition between writer/reader
This uses an atomic counter and spins only on the writer side, which
preserves realtime behavior on the reader side. The spinning yields (by
using the same Boost function from Boost spinlocks) to be
scheduler-friendly.

Fixing this bug also lets us be able to confidently drop garbage early
in the writer if appropriate, so do that and avoid keeping dead wood if
possible.

This reverts commit f95439a502:
"add spinlock to RCU manager to protect concurrent reader() and update() calls"
2020-11-10 17:05:16 +01:00
Paul Davis
f95439a502 add spinlock to RCU manager to protect concurrent reader() and update() calls 2020-11-08 11:28:10 -07:00
Robin Gareus
a9bd7b2848 Remove unused compile-time option to not use vfork 2020-10-31 22:30:45 +01:00
Robin Gareus
f509a7e003 Extend convenience API to query windows registry 2020-10-30 13:15:06 +01:00
Robin Gareus
8852069ead Consolidate code: add library method to query Windows registry 2020-10-24 03:56:47 +02:00
Robin Gareus
9a4237ba83 Add debug transmitter
This is in preparation to conveniently duplicate debug messages
to Window > Log. For cases where stdout/err is not easily accessible.
2020-10-13 21:27:16 +02:00
Robin Gareus
140e03bb7d Make windows-console setup code re-usable 2020-09-20 19:57:08 +02:00
Ayan Shafqat
1f878636c8 Adding NEON detection during runtime 2020-08-24 02:06:35 +02:00
Robin Gareus
d3685784aa Fix numeric sort: use decimal or hex (but not octal)
This fixes sort order of plugin-presets or parameter
scale-points with leading zeros.
2020-08-09 14:45:39 +02:00
Robin Gareus
c2618903ae Allow to overload drop_references()
This is useful in cases where an object owns child objects
which in turn hold a reference to the parent.

In this case PluginInsert has-a Plugin, which may have a reference
to the insert or the Route.
2020-08-05 22:35:35 +02:00
Ben Loftis
a2f4521e77 Short-circuit gain interpolation if the change is negligibly small 2020-07-21 18:37:32 -05:00
Robin Gareus
fa495b7727 Account for additional TLS on macOS/X
On GLIBC systems pbd_stack_size() adds __pthread_get_minstack,
this is no available on mac systems, causing issues with some
libraries used by plugins.
2020-07-21 23:10:01 +02:00
Robin Gareus
6d950d15ba Use signed int for atomic operations -- #8314 2020-07-16 16:13:21 +02:00
Paul Davis
71f088dbbd move virtual method requiring std::min from header into .cc
The method is virtual so it could never have been inlined anyway
2020-06-18 16:26:44 -06:00
Paul Davis
0d8fac079d The presence of "using std::***" in any header file is not acceptable. Do not revert or change this.
Revert "Partially revert commit #23feb0491e"

This reverts commit 3b5546cfce.
2020-06-18 16:19:18 -06:00
John Emmas
3b5546cfce Partially revert commit #23feb0491e
For MSVC, the 'using std::' statements are needed when building anything which #includes 'pbd/controllable.h' (never quite figured out why...)
2020-06-18 12:46:05 +01:00
Robin Gareus
23feb0491e Remove using std::min/max from header 2020-06-18 01:05:48 +02:00
Robin Gareus
c424e4d61c Allow to set group-override with common set_interface() API 2020-06-18 00:42:09 +02:00
Robin Gareus
515ffbdfe2 Add API to create threads with given stacksize 2020-06-06 18:32:09 +02:00
Paul Davis
a660077c97 PlaybackBuffer: extend API to include write_ptr()
It's just useful
2020-05-13 23:55:02 -06:00
Paul Davis
98d56d6b21 Add API to PlaybackBuffer to compute amount of data that can overwritten
The distance is between a given offset in the buffer (probably a
read position at some point in time) and the write ptr. Any data after
the write ptr is "old" and not readable, and thus not worth overwriting
since we would not read it anyway.
2020-05-12 11:34:37 -06:00
Robin Gareus
705ac7bfc5 Prevent huge stack allocations for MIDNAM files
xmlParseMemory() uses a c-pointer char*.
Previously MIDNAM data on the heap were wrapped inside
a std::string only to be later accessed via c_str().
2020-04-23 02:25:38 +02:00
Robin Gareus
3d166c7789 Consolidate stack-size and priority of rt-threads 2020-04-23 01:28:58 +02:00
Robin Gareus
ea2bda6668 Fix playback alignment when adding/removing channels
The disk-reader assumes that all playback ringbuffers are in sync
and have the same fill_level.
2020-04-14 03:57:26 +02:00
Paul Davis
feff57d29a prefer initialization to assignment 2020-04-08 19:56:08 -06:00
Johannes Mueller
c74cc2675e Extend FileArchive to import archive entries individually
This is needed primarily for a workaround for #7971. When importing a template
that has been exported on Ardour5 on MacOS we need to fix the paths of the
archive entries.

Later we can use this functionality also to handle imported templates if
templates with the same name already exist.

This commit only adds methods and members to FileArchive, it does not modify
anything to make regressions unlikely. This, however, leads to some duplicated
code. Eventually we should consolidate this a bit.
2020-04-05 16:34:48 +02:00
John Emmas
4dd3d4effe Some initial changes (currently for libpbd only) to help a new contributer who's trying to build with MSVC2017
These changes compile okay for me (using VS2019) although they wouldn't link to my older-built libraries. Hopefully he'll be okay if he builds everything with the same compiler.
2020-03-26 10:40:36 +00:00
Robin Gareus
28f15d3fa6 Add flag to explicitly hide a control
Eventually this is to replace a literal name "hidden" that is
currently used as hack throughout Ardour's codebase.
2020-03-18 18:16:29 +01:00
Robin Gareus
26b6b8d840 mingw/gcc-8: use glib's stat(), drop hardlink support 2020-03-13 01:21:51 +01:00
Robin Gareus
2b17ded785 Add convenience ControlFlags operators
Explicit functions for operator&=~ and operator|=
2020-03-10 20:55:50 +01:00
Robin Gareus
379115a20e Fix MacOS 10.11 (clang-8.0.0) builds
gcc, and recent clang-10 can construct new objects
using references as arguments.

However clang-8 (and MSVC?) do not:
   "error: no matching function for call to 'operator new'"

The compiler apparently does not expand the template
  class A  <-> `A*`  vs. `A const&`
for different cases.
2020-03-09 18:33:11 +01:00
Robin Gareus
50556db405 Add a STL Allocator using the stack (for rt safety)
This is a dumb stack allocator using LIFO allocation/free, with
a fallback to new/delete. This works well for small STL containers
in particular std::vector, but it's also suitable for std::map<>,
in particular copy constructing small POD maps (plugin pin mappings).

Eventually this could be combined with TLSF for a flexible
memory arena management. This is however not currently needed
for any the planned use-cases.

This code is ANSI C++98 compatible, and yet also works with
modern C++11, C++14
2020-03-06 19:13:44 +01:00
Robin Gareus
016eaddad7 NO-OP: whitespace, re-indent 2020-02-28 06:08:26 +01:00
Robin Gareus
4b28e4ee3c Fix some recursive undo removal
~StatefulDiffCommand() may trigger UndoTransaction::command_death()
which may delete the StatefulDiffCommand() that's just being destroyed.

This depends on the signal-connection order, which is undefined.
In any case when a shared_ptr<> object is being destroyed it means
that all references to it are already gone. There's no need to
emit drop_references from the d'tor.
2020-02-28 06:06:44 +01:00