Commit Graph

31766 Commits

Author SHA1 Message Date
Robin Gareus
79bf025862 Fix export race condition (and crash)
Previously the freewheel export thread directly called
Session::butler_transport_work(). The butler thread
may concurrently call the same function. This can lead
double free or memory corruption (see below)

Now export thread summons the butler and does nothing
until it completed its work.

```
Export Thread:
3   XMLNode::~XMLNode
4   ARDOUR::AutomationList::snapshot_history
5   ARDOUR::AutomationList::start_write_pass
6   ARDOUR::Automatable::non_realtime_locate
7   ARDOUR::Route::non_realtime_locate
8   ARDOUR::Session::non_realtime_locate
9   ARDOUR::Session::butler_transport_work
10  ARDOUR::Session::process_export_fw

Butler thread:
7   XMLNode::~XMLNode
8   ARDOUR::AutomationList::snapshot_history
9   ARDOUR::AutomationList::start_write_pass
10  ARDOUR::Automatable::non_realtime_locate
11  ARDOUR::Route::non_realtime_locate
12  ARDOUR::Session::non_realtime_locate
13  ARDOUR::Session::butler_transport_work
14  ARDOUR::Butler::thread_work
15  ARDOUR::Butler::_thread_work
```
2021-05-08 23:29:49 +02:00
Robin Gareus
cc83cdd9df Config isn't editable 2021-05-08 19:19:16 +02:00
Paul Davis
1c47f0adbe use 4 semitone steps whenever rewind/ffwd is adjusting in the range below 1 octave slower 2021-05-08 09:43:04 -06:00
Paul Davis
57b3df8b22 copy over (boo!) transport control changes to BasicUI (control surfaces) 2021-05-08 09:20:21 -06:00
Paul Davis
6b98e56da2 const-ification tweak 2021-05-08 09:19:50 -06:00
Paul Davis
6ca18bfcfd tweak gradual rewind/ffwd action to move in 4 semitone steps once the speed is below "one octave down"
This avoids taking forever to get to -40st, where we reverse direction
2021-05-08 09:13:32 -06:00
Paul Davis
9d7ded8bfe allow rewind/ffwd to incrementally move between speeds of zero and 1/-1
It's a little slow in getting all the way to zero, so this may need some tweaking
2021-05-08 08:16:28 -06:00
Robin Gareus
d88e0c6673 Fix windows builds (declare class binding)
see also 2ff8f5a5de
2021-05-08 14:38:43 +02:00
Robin Gareus
08092d22b4 Prevent invalid frame/child size allocation 2021-05-08 14:36:43 +02:00
Robin Gareus
ce1e05fc3d Update DnD min. movement threshold -- #8686
Previously x-axis threshold was in samples. This is
useless unless zoomed in to the max. So in most cases
the first-move was always in x-direction, making constrained
y-axis drags near impossible.

Furthermore the threshold for copy-drags was increased
as per #8686
2021-05-08 04:28:36 +02:00
Todd Naugle
4d815554dd Various Control Surfaces: Fix one off in calculation of fader position
MIDI pitch bend holds 14 bits (16384) which gives values of 0 to 16383.
2021-05-07 18:02:44 -05:00
Carlo Stemberger
67cce59f4e Avoid regex convention in script documentation 2021-05-08 00:35:31 +02:00
Edgar Aichinger
a103a89f4f also install desktop icon files 2021-05-08 00:27:33 +02:00
Edgar Aichinger
433d7dc8a0 freedesktop: install (not only build) desktop, mimeinfo and appdata files 2021-05-08 00:27:33 +02:00
Tiefseetauchner
720a7eed77 Update compile.sh
cd in line 4 would not work if path has blank as it would have two arguments
./compile.sh: line 4: cd: too many arguments
2021-05-07 16:25:21 -06:00
Paul Davis
e2a28ec776 avoid playhead jumping while we locate from a control surface 2021-05-07 16:24:53 -06:00
Robin Gareus
b0d4f77d92 Optimize RegionList redisplay for batch changes 2021-05-07 23:29:25 +02:00
Robin Gareus
f6c011cb65 Remove old RegionPropertyChanged signal (3/3) 2021-05-07 23:29:25 +02:00
Robin Gareus
283cade057 Update GUI Region[s]PropertyChanged signal handlers (2/3) 2021-05-07 23:29:25 +02:00
Robin Gareus
2ff8f5a5de Consolidate RegionsPropertyChanged signal emission (1/3)
This prepares to combine multiple RegionPropertyChanged signals
(potentially thousands) into a single signal.
2021-05-07 23:29:25 +02:00
Robin Gareus
5af480083c MIDI List Editor, subscribe to region's signal (not all regions) 2021-05-07 23:29:25 +02:00
Paul Davis
bb7f919a07 fix import file Lua script to follow new API to PublicEditor::do_import() 2021-05-07 14:58:16 -06:00
Paul Davis
3e47057609 import process now allows optional import of MIDI markers/cues 2021-05-07 14:58:16 -06:00
Paul Davis
f689e9ecab Evoral: add methods to SMF to load and access markers/cues in SMF files 2021-05-07 14:58:16 -06:00
Robin Gareus
4db1c02bd1 Fix crashes when rippling many regions
Region positions were updated in the GUI, before the playlist
was catching up.

The butler thread reads a region using the region's new position,
but the playlist's old range.


Thread 1 (GUI)
```
#22 ARDOUR::Playlist::notify_layering_changed()
#26 ARDOUR::AudioPlaylist::region_changed
#27 ARDOUR::Playlist::region_changed_proxy
#35 ARDOUR::Region::send_change
#36 ARDOUR::Region::set_position
#37 RegionRippleDrag::remove_unselected_from_views
#38 RegionRippleDrag::finished
```

LayeringChanged() also triggers DiskIOProcessor::playlist_modified
which schedules a pending-override and summons the butler.
Note that when moving only a few regions the butler starts after all
updates have been completed.

Butler thread:
```
#4  ARDOUR::AudioRegion::read_at
#5  ARDOUR::AudioPlaylist::read
#6  ARDOUR::DiskReader::audio_read
#7  ARDOUR::DiskReader::overwrite_existing_audio
#8  ARDOUR::DiskReader::overwrite_existing_buffers
#9  ARDOUR::Track::overwrite_existing_buffers
#10 ARDOUR::Session::non_realtime_overwrite
```

Region read fails:
```
 libs/ardour/audioregion.cc:503  assert (position >= _position);
(gdb) p position
$1 = 1312000
(gdb) p _position
$2 = {<PBD::PropertyTemplate<long>> = {_have_old = true,
    _current = 1336000, _old = 1312000} }
```
2021-05-07 21:56:09 +02:00
Robin Gareus
11719144b3 Update split-benchmark script with new transport API 2021-05-07 21:56:09 +02:00
Robin Gareus
49e1380417 Add missing Lua binding (see also 48e5607f7c) 2021-05-07 21:56:09 +02:00
Todd Naugle
d2ba90b2c1 Fallback to the default export path when the saved export path is not found.
Previously we would end up with an export path of top level session
directory.
2021-05-07 12:25:42 -05:00
Todd Naugle
9e6b85f330 Don't save a leading slash when storing a relative export path.
It is not needed in the relative case and causes issues when taking
sessions between platforms.

On windows, the default path would be "\export". When that is used
on linux the resulting fullpath would end up as

/your/session/path/\export

which is then not found on the file system.

This change is consistent with how relative paths are normally written and
does cure the default path when moved across platforms.

It does not solve the larger issue of mixed directory separators.
A relative path of "export\myMixV1" will still fail when moving between
platforms.
2021-05-07 12:25:42 -05:00
Alexandre Prokoudine
a18d9b9cb4 Update Russian translation 2021-05-07 05:38:57 +02:00
Robin Gareus
98f5224d4c Fix incorrect port lists due to custom sort
Previously the following were treated as equal
 "MIDI_foo" == "MIDI bar"
So std::map<> PortManager::_ports and PortEngineSharedImpl:_ports
could only have either. This resulted in missing ports
and missing calls to existing ports in cycle_start().

This mainly affected MIDI tracks with imported files, since there
is "MIDI Clock in", and imported files result in tracks
"MIDI_file-name".

This issue was introduced in 6.6-200-g60ff3ef764
2021-05-07 04:24:32 +02:00
Paul Davis
bfd52fd94d TransportFSM: do not enter Reversing state too early
We do need to know that a reversal is intended before we do a locate, but we should
not enter Reversing before the declick is finished. So instead, we add a new
member, _reverse_after_declick to keep track, and enter Reversing just before
we start the locate
2021-05-06 19:40:08 -06:00
Robin Gareus
97167ed927 Fix harvid bind address on BigSur 2021-05-07 01:45:00 +02:00
Robin Gareus
7dc21fdc96 PortList debug methods (to be called from gdb) 2021-05-07 01:43:19 +02:00
Paul Davis
ade679f162 move <poll.h> inside an appropriate #ifdef, since it does not exist on Windows 2021-05-06 14:45:56 -06:00
Paul Davis
3a7ea6b217 use poll(2) rather than select(2) for reading output from an exec'ed process
select(2) can only handle file descriptors up to 1024, and there are fairly easy to reproduce
cases where the file descriptor used here is larger than that.
2021-05-06 14:41:28 -06:00
Robin Gareus
221b272f8a Fix loading old route-templates
This follows 983c577945, don't allow unlinked
pannable to override main panners.
2021-05-06 21:21:47 +02:00
Robin Gareus
1173262503 Fix insert-position when adding route from template 2021-05-06 21:21:47 +02:00
Robin Gareus
31b709b7ff NO-OP: rename variable, avoid ambiguities
Portmanager uses "ports" as local variable in various places
(usually vector<string>). While the compiler is fine with that,
it is confusing when debugging or reading code.
2021-05-06 21:21:47 +02:00
Paul Davis
e570a290c4 add a few casts to avoid compiler warnings regarding size_type vs int
The class members are int because they need to hold negative (out-of-bound) values as sentinels
2021-05-06 12:03:27 -06:00
Paul Davis
29c89cf362 fix tiny typo in a tooltip 2021-05-06 11:42:50 -06:00
Paul Davis
05d8545655 preference item for auto-return-after-rewind-ffwd 2021-05-06 11:40:20 -06:00
Paul Davis
c47f5eb951 pay attention to auto-return-after-rewind-ffwd 2021-05-06 11:40:20 -06:00
Paul Davis
3bbae4ec62 add new config parameter for auto-return after rewind/ffwd (set to false by default) 2021-05-06 11:40:20 -06:00
Robin Gareus
fd9e9df742 Fix optimized build, amend 5957e14259 2021-05-06 15:50:44 +02:00
Robin Gareus
fc54ab48ec Remove unused function, fix optimized builds 2021-05-06 15:27:26 +02:00
Paul Davis
b75118ee13 a more robust value check for 8cb09ab2cf modification 2021-05-05 18:48:53 -06:00
Paul Davis
8cb09ab2cf fix for region-drag to the dropzone (#8672)
The DraggingView's time_axis_view (index) is set to the size of _time_axis_views
in ::motion() near line 1149. This makes it invalid as index into the vector.
2021-05-05 18:33:44 -06:00
Robin Gareus
9e77d9dd50 Fix packaging debug builds on Catalina 2021-05-06 01:24:03 +02:00
John Emmas
a222292e68 Emulate exp2f() for older MS compilers where it wasn't available 2021-05-05 17:50:41 +01:00