Commit Graph

16630 Commits

Author SHA1 Message Date
Robin Gareus
f149a82688 Add support for RIFF and ID3v2 tags (wav, aiff) 2020-11-14 19:30:54 +01:00
Robin Gareus
a95d87ef6e NO-OP: whitespace and private variable-name
This pipes export source-code though clang-format, and some
manual cleanup step.
2020-11-14 17:44:48 +01:00
Robin Gareus
fec37c58bd Flush plugins from rt-thread, prevent concurrent processing
Route::realtime_handle_transport_stopped() does have insufficient
information (PostTransportLocate), so "flush" is called from
Route::non_realtime_transport_stop in the butler thread.

However plugin de/activate() must not be called concurrently with
processing. e.g. https://lv2plug.in/ns/lv2core explicitly states:

"Hosts MUST guarantee that: An Instantiation function for an instance
is never called concurrently with any other function for that instance."
2020-11-14 02:49:50 +01:00
Paul Davis
40edc10f4b update libs RU translation (Alexandre Prokoudine) 2020-11-13 13:17:30 -07:00
Paul Davis
5b182f65be transport: remove apparently unnecessary code related to locates with auto-play turned off 2020-11-12 18:54:44 -07:00
Paul Davis
8b048bb351 transport: use butler seek count, not PostTransportLocate to decide whether to call non_realtime_locate(), and update butler seek count at end 2020-11-12 18:54:44 -07:00
Paul Davis
ef4d825232 TransportFSM: set _last_locate when doing an interrupted locate 2020-11-12 18:54:44 -07:00
Paul Davis
ab6a1d062d add new butler seek counter 2020-11-12 18:54:44 -07:00
Robin Gareus
ee74a932c6 Zero length Events are illegal
This would later trigger an assert() in MidiRingBuffer<T>::read
when reading the status-byte, and cause undefined behavior down
in optimized builds.

It is unsure if this can happen, but it may explain
https://marcan.st/paste/LHDXNQ9x.txt
2020-11-12 16:51:48 +01:00
Robin Gareus
d3eab4e309 Prevent duplicate meters when importing tempo-map #8449
The file linked from the bug report has a meter-change
in the middle of a bar. Ardour maps this back to the previous
bar, which already has a meter-change. Session load fails with
  "Multiple meter definitions found at 473"

The tempo-map of the file ends like this:
```
  Meter 11/32 @227040 (beat 473)
  Meter 4 / 4 @227680 (beat 483.666667)
```
2020-11-11 18:48:51 +01:00
Robin Gareus
81862f8c30 Allow to move pulse stream #8467
This potentially breaks various assumptions (e.g. no resampling,
fixed buffersize) when the stream is moved to a different device.
Then again it's pulseaudio, which is unsuitable for pro-audio to
begin with.
2020-11-11 15:59:26 +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
Hector Martin
55c2c9db7e Add sanity assert in MidiBuffer::insert_event to check for overflow 2020-11-10 21:03:42 +09:00
Hector Martin
a568b3c7c2 Complain when MidiBuffer::merge_from fails due to buffer full
We were previously dropping MIDI data silently
2020-11-10 21:03:42 +09:00
Hector Martin
0979097cae Check for MIDI buffer overflow when merging into an empty buffer
This can happen if the buffers have different sizes.
This fixes crashes that bisected to 7c37a18b7, but it is not the root
cause; it just happened to make things worse.
2020-11-10 21:03:42 +09:00
Robin Gareus
f2d04dfb1f Fix VST2 default and initial control parameter values 2020-11-10 00:08:03 +01:00
Hector Martin
0e509fa09f Correctly sort concurrent MIDI events
This fixes an bug introduced in 7c37a18b7
2020-11-09 20:40:59 +01:00
Robin Gareus
bb468ee4de Update jackd.exe registry key
This ensures compatibility with upcoming jack > 1.9.16,
current jack 1.9.16, as well as older versions.
2020-11-09 20:06:49 +01:00
John Emmas
5f082e2c9d Add an extra option when querying Windows registry keys
(this option will be needed when 32-bit Ardour is running in 64-bit Windows)
2020-11-09 11:35:35 +00: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
01f9332458 Fix RCU Unit-test on macOS/X
Apple's pthread does not implement barriers
2020-11-07 10:37:52 +01:00
Robin Gareus
88fc0ed392 Add RCU unit test 2020-11-05 02:24:54 +01:00
Robin Gareus
62e47fb57c Add Lua binding for unit-tests to sync with process-cb 2020-11-04 19:08:59 +01:00
Robin Gareus
c87ef15e82 ALSA: configure capture settings before playback
This fixes an issue with some soundcards e.g. "AxeFx III".
Device configuration fails unless set_hwpar() is performed
for the capture device before configuring the playack
device (half duplex is fine, too).
2020-11-04 14:46:49 +01:00
Robin Gareus
b8b232cfab VST3: query latency when plugin is activated regardless of Vst::kLatencyChanged 2020-11-02 01:58:05 +01:00
Robin Gareus
8ab62937ca VST3: verbose scan option 2020-11-02 01:57:03 +01:00
Robin Gareus
35414fcef0 VST3: yet another attempt at state-retore #8460 2020-11-02 01:46:08 +01:00
Robin Gareus
66c19647df NO-OP: fix typos 2020-11-01 12:25:22 +01:00
Robin Gareus
cf0904f752 Handle vfork/exec failure
Don't call atexit, exit without cleanup.
2020-10-31 22:33:10 +01:00
Robin Gareus
a9bd7b2848 Remove unused compile-time option to not use vfork 2020-10-31 22:30:45 +01:00
Robin Gareus
edc70200c4 VST3: add generic uname -m fallback 2020-10-31 20:26:34 +01:00
Robin Gareus
7896c30508 Fix cmdline parameter escape 2020-10-31 13:42:14 +01:00
John Emmas
40ed19767a In a Windows build, support launching both older and newer versions of Jack (Stephane's + Filipe's) 2020-10-31 08:01:55 +00:00
John Emmas
5c06fdf1de In an MSVC build, modify our VC project to use weak Jack
(needed to support Jack v1.9.16)
2020-10-31 07:59:09 +00:00
Robin Gareus
f509a7e003 Extend convenience API to query windows registry 2020-10-30 13:15:06 +01:00
Robin Gareus
1219271321 Cont'd work on implicit solo restore
This is an update to b90f057e6e, allowing processors
to configure when ports change. Fixes loading old sessions with
variable i/o polarity invert.
2020-10-29 19:55:27 +01:00
Robin Gareus
b90f057e6e Fix restoring implicit solo on session load
When a route's output is connected to multiple busses, re-establishing
port-connections on session-load calls Route::output_change_handler
multiple times.

Implicit solo counts are saved and restored by the route's SoloControl,
however the output_change_handler invalidated it on session load.

Since connections are restored iteratively, counting soloed downstream
routes will yield an incorrect result until all connections are
established.

This fixes the issue that implicit solo is lost on session-reload
in case a route has multiple connections with different up/downstream
solo states.
2020-10-28 22:31:26 +01:00
Robin Gareus
7826a1a2a2 Increase plugin-scan progress display frequency 2020-10-27 22:21:49 +01:00
Robin Gareus
722294075d VST3: fix UTF-16 host message 2020-10-26 18:33:10 +01:00
Robin Gareus
b119758161 fix debug messages in prev commit 2020-10-25 20:31:50 +01:00
Robin Gareus
da1782d56e VST3: Keep preset in sync with plugin GUI
When a user loads a preset using the plugin's own GUI, update
Ardour's preset dropdown.
2020-10-25 19:50:22 +01:00
Robin Gareus
6c14e568f0 Streamline copying plugin state
Do only load (dlopen) plugin module when instantiating plugin.
Previously new instances were loaded, not used, and unloaded.
2020-10-25 13:14:02 +01:00
Len Ovens
ddcf3eb684 Generic Midi encoders fixed 2020-10-24 16:06:04 -07:00
Robin Gareus
421c52ba7d Fix bounce and freeze
* Include main-out channel-count when bouncing the output
* Do not de-activate disk-reader and mains-out when freezing a track
* Ignore meter when counting channels
2020-10-24 05:44:29 +02:00
Robin Gareus
54829492ca Fix glib/glibmm includes 2020-10-24 04:14:38 +02:00
Robin Gareus
f7cc5e1f38 Search for JACK on windows using the registry 2020-10-24 04:01:54 +02:00