Commit Graph

18868 Commits

Author SHA1 Message Date
a803dd0df8 superclock_ticks_per_second: use an (inline) accessor, change value
We do not want a value as large as the previous one, which limits the time
range that can be represented in 62 bits unnecessarily. The new value is
9 times smaller than the previous value, and loses only 384000 as a significant
factor.

This commit also switches to using an (inline) accessor for superclock_ticks_per_second,
making it possible in debug/testing phases to spot early/illegal uses of the value.
2022-03-17 14:15:59 -06:00
e72cff4ab1 triggerbox: reset all trigger states when locating/stopping
We also exclude anything from happening during TriggerBox::run() while locating/stopping
is taking place.
2022-03-17 12:20:34 -06:00
2b630c4887 triggerbox: add TriggerBox::dump() to check trigger states 2022-03-17 12:20:34 -06:00
1af0e7cc4f triggerbox: provide ::shutdown_from_fwd() method
This does the internal shutdown of a Trigger that is shared between
a normal shutdown and when stopping for a locate/stop. There's no
output to buffers possible.

This method/design may need to change if/when we add declicking for
various conditions
2022-03-17 12:20:34 -06:00
1cc8a3f92c extend Session API to provide ::transport_locating() 2022-03-17 12:20:34 -06:00
13da06feb9 triggerbox: remove debug messages 2022-03-16 11:21:29 -05:00
e603b2e12d
Remove debug messages (1/2) 2022-03-16 17:08:14 +01:00
2572a24172 auditioner: fix thinko in midi file length 2022-03-15 17:57:15 -05:00
3ae73eb242
Extend Session::Exported signal
Include timespan start position. This will allow to re-import
the file at the export-position.
2022-03-15 22:52:58 +01:00
d9773e5788 triggerbox: add PropertyChange::all_trigger_props() 2022-03-15 09:03:40 -05:00
0bfa7e1b30 triggerbox: implement allow_patch_changes 2022-03-15 09:03:40 -05:00
20dad3f520 ripple: Lua bindings for ripple enums (no funcs to use them yet) 2022-03-14 21:35:35 -05:00
4cbdb30d56 ripple: tweak behavior of Locations::ripple
* ignore session, punch and loop ranges
* support positive and negative ripple distances
* move either or both (start+end) of a range marker
2022-03-14 19:26:41 -05:00
ba9bbf81ba ripple: create RippleMode and associated enums
* RippleAll is no longer an EditMode
* RippleSelected, RippleAll and RippleInterview are now subtypes of Ripple
2022-03-14 19:26:41 -05:00
54367e5aef playlist: use C++11 style iterators wherever possible 2022-03-14 14:52:46 -06:00
a336e87df8 when loading a session, catch up on tb_with_filled_slots correctly 2022-03-14 14:10:29 -06:00
2ea75e88a2 sync cue markers when tempo map changes
This generates the _cue_events list, which is timestamped in samples, from all
current locations that are cue markers
2022-03-14 14:03:07 -06:00
22b50c1716 ensure that Session handles tempo map changes synchronously in the main RT process thread 2022-03-14 14:03:07 -06:00
10dc09fcd4 temporal: extend TempoMap thread local ptr API a little
This allows checking to see if the map has changed compared with the thread's
current local pointer.
2022-03-14 14:03:07 -06:00
da95a0a0ee replace sample rate callback used for superclock<=>sample conversion
Now using a globally-scoped static variable which is updated by the
AudioEngine whenever an SR change occurs. Defaults to 48kHz and can
be used even before there is a backend.
2022-03-14 14:03:07 -06:00
a4fd4cdaf0 triggerbox: enhance utility of a fatal message 2022-03-14 14:03:07 -06:00
00d8b08300 triggerbox: track empty slot status and ignore stop-at-session-end when appropriate 2022-03-14 14:03:07 -06:00
a435d4d18e Auditioner: round-up midi region length to seconds, at least 2 seconds long 2022-03-13 19:42:00 -05:00
7321248916 triggerbox: do not try to set the {segment} tempo if there is no region
* divide-by-zero was resulting in NaNs in the snapshot file
2022-03-13 19:42:00 -05:00
6c0d3651cf
Cont'd work on track bounce/export alignment
Due to recent changes, when the master bus is disconnected its
private port latency was never unset. This lead to misalignment
when using stem-export if master (or monitor) output was not
connected.
2022-03-13 18:28:00 +01:00
d505ae3372 triggerbox: record stop-all-cues "cue" when appropriate 2022-03-13 10:22:20 -06:00
d5ee0342a2
Cont'd work on track->track bounce alignment
see also e58c312420
2022-03-11 21:53:22 +01:00
abbf1ca698
Allow to get exit status from child processes 2022-03-11 18:18:06 +01:00
d48b9af810
Remove Video Export Infobox preference (2/2) 2022-03-11 04:55:46 +01:00
020051772e
Extend Session::Exported signal
Indicate if exported file should-be re-imported.
2022-03-11 04:55:24 +01:00
0937c7cabe
Work-around emit Session::Exported signal for all exported files
This will eventually have to be fixed, currently split-channel
files are not correctly tagged and post process commands
are only emitted for the last file.

But fixing this is complicated, so meanwhile a workaround is used.
Eventually this commit should be [mostly] reverted!
2022-03-11 04:55:24 +01:00
3d1c6d3796
Add export format option to re-import exported file(s) 2022-03-11 04:55:24 +01:00
e58c312420
Fix track->track bounce alignment
When a track's output is not connected, we assume
its output playback latency matches that of the master-bus.

This is to prevent the track's output latency to float
freely (see also a556e96ed0).

This failed if a track is connected to another track which is
not connected.
2022-03-11 04:55:24 +01:00
9e75235912
Fix crashes on ARM due to window-size overflow
On Intel systems ArdourCanvas::COORD_MAX (1.7e+307) was rounded
to (gint) -2147483648. gtk+ treats negative window size-requests
as 1px.

However on ARM, COORD_MAX was truncated to +2147483648, gtk+ limits
this to 65535. Most WM/Xwin systems cannot handle windows this large.
It also exceeds the max size of cairo [image] surfaces.

This issue was introduced in a1c67b4ad7
when "natural_size" was removed. Before that change infinitely large
canvas had a natural_size of 2x2 px.
2022-03-09 21:14:53 +01:00
4965c83ef3
Do not allow to remove the triggerbox processor 2022-03-07 23:32:02 +01:00
fbce2d73a8
Retain sidechain ports into unknown processors
This fixes an issue when loading sessions in "safe mode".
Internal side-chain sends are removed if the target port
does not exist. Also other port connections are lost if the
target port does not exist.
2022-03-06 17:13:56 +01:00
e51e2c57c6
NO-OP: remove dead code 2022-03-06 17:13:35 +01:00
81531d5763 triggerbox: improve some commented debug output 2022-03-05 11:49:55 -07:00
5525c8b667 triggerbox: fix crash when using audio sample esstimated to be less than 1 beat 2022-03-05 11:48:52 -07:00
ecb1d33c02
Remove Region::position remnants (see cc6c0f1263) 2022-03-04 22:38:41 +01:00
1462590ace
Fix setting session-range when regions move
Since cc6c0f1263 there is no Properties::position event
when a region is moved. So notify_region_moved() or
notify_region_start_trimmed() was never emitted and
Session::maybe_update_session_range() was not called.
2022-03-04 22:37:28 +01:00
2c769e9f23
Fix Beats::rount_to.. Bar rounding 2022-03-04 19:41:25 +01:00
ab3a7dc721
Fix bbt_subtract math
When r.ticks is already negative, add the negative value
(not subtract), likewise handle negative beat offset correctly.
2022-03-04 19:40:30 +01:00
bc1be2fc24
Fix stem export alignment
When a track's output is not connected, but the track feeds
other tracks via sends (common case in Mixbus) the stem
export of the track was not correctly aligned.

The track is correctly latency compensated (due to sends), but
the unconnected port's latency is not set.
However stem-export uses the private latency of the port as alignment.
2022-03-04 01:40:29 +01:00
2323b08502 triggerbox: better handling for the special case of tempo=0
* audio files can be named "0bpm" to make them un-stretchable
* however they still need a sensible beatcnt, and therefore tempo
* assume tempo 120bpm and assign a beatcnt based on the file's length
* the user might later enable stretch, and we need to be sensible about it
2022-03-03 16:49:28 -06:00
618226d2bb triggerbox: avoid ridiculously small tempo settings for stretch
*this should not be possible after , but just in case....
2022-03-03 16:49:28 -06:00
58f2c074a6 triggerbox: fix another case where UIState must be cached to retain settings 2022-03-03 16:49:28 -06:00
e33d131174
Fix deadlock when creating VCAs
VCAManager::create_vca sets PI::order while holding the
VCAManager:lock mutex. PI order changes emit a "changed" signal
which in turn can result in querying a list of all strips
(reassign_track_numbers) which requires the VCA mutex:

See also 729ff35faf

```
#2  Glib::Threads::Mutex::Lock::Lock(Glib::Threads::Mutex&) (this=0x7fffffffb070, mutex=...) at /usr/include/glibmm-2.4/glibmm/threads.h:687
#3  ARDOUR::VCAManager::vcas[abi:cxx11]() const (this=0x5555599b6d10) at ../libs/ardour/vca_manager.cc:77
#4  ARDOUR::Session::get_stripables(std::__cxx11::list<boost::shared_ptr<ARDOUR::Stripable>, std::allocator<boost::shared_ptr<ARDOUR::Stripable> > >&, ARDOUR::PresentationInfo::Flag) const (this=0x55555bf03910, sl=std::__cxx11::list = {...}, fl=127) at ../libs/ardour/session.cc:3949
#5  ARDOUR::Session::ensure_stripable_sort_order() (this=0x55555bf03910) at ../libs/ardour/session.cc:2634
#6  ARDOUR::Session::notify_presentation_info_change(PBD::PropertyChange const&) (this=0x55555bf03910, what_changed=...) at ../libs/ardour/session.cc:7016
[ .. connect same thread ..]
#13 ARDOUR::PresentationInfo::send_static_change(PBD::PropertyChange const&) (what_changed=...) at ../libs/ardour/presentation_info.cc:113
#14 ARDOUR::PresentationInfo::set_order(unsigned int) (this=0x5555619ceca0, order=5) at ../libs/ardour/presentation_info.cc:288
#15 ARDOUR::Stripable::set_presentation_order(unsigned int) (this=0x5555619ce8a0, order=5) at ../libs/ardour/stripable.cc:55
#16 ARDOUR::VCAManager::create_vca(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    (this=0x5555599b6d10, howmany=1, name_template="VCA %n") at ../libs/ardour/vca_manager.cc:105
```
2022-03-03 17:43:37 +01:00
84c51a1411
Fix BaseUI x-thread signal vs thread-start race
Control surfaces c'tor usually subscribe to signals e.g.
PortConnectedOrDisconnected. This happens after the parent BaseUI
is created, but before set_active() -> BaseUI::run() is called.

At this point in time there is no run_loop thread.

There are two options to handle AbstractUI::call_slot():

 A. Queue the event in the event-loop, using the thread-local
    request buffer of the caller. Then hope the BaseUI
    thread is started, and calls ::handle_ui_requests() before
    the memory pool runs out of space.

 B. Handle the event in the calling thread. -- This may not be
    rt-safe and may call functions with locks held by the caller.
    It will however not accumulate events.

This takes approach (B). If _run_loop_thread is NULL, directly
handle the signal.

In the past, prior to 50abcc74b5, approach (A) was taken.
NULL never matched Glib::Threads::Thread::self().

This also reverts a prior attempt (e417495505) to address this issue.
2022-03-02 21:19:12 +01:00
bff55cc881
Fix crash when deleting MIDI trigger
The Model must be destroyed after the iterator, otherwise
the iterator's d'tor will cause memory corruption trying to lock
the model:

```
Invalid read of size 4
   at pthread_rwlock_unlock (pthread_rwlock_unlock.c:39)
   by Glib::Threads::RWLock::ReaderLock::~ReaderLock() (threads.h:828)
   by void boost::checked_delete<Glib::Threads::RWLock::ReaderLock>(Glib::Threads::RWLock::ReaderLock*) (checked_delete.hpp:36)
   by boost::detail::sp_counted_impl_p<Glib::Threads::RWLock::ReaderLock>::dispose() (sp_counted_impl.hpp:89)
   by boost::detail::sp_counted_base::release() (sp_counted_base_gcc_atomic.hpp:120)
   by boost::detail::shared_count::~shared_count() (shared_count.hpp:432)
   by boost::shared_ptr<Glib::Threads::RWLock::ReaderLock>::~shared_ptr() (shared_ptr.hpp:335)
   by Evoral::Sequence<Temporal::Beats>::const_iterator::~const_iterator() (Sequence.h:224)
   by ARDOUR::MIDITrigger::~MIDITrigger() (triggerbox.cc:2037)
   by ARDOUR::MIDITrigger::~MIDITrigger() (triggerbox.cc:2039)
   by ARDOUR::TriggerBoxThread::delete_trigger(ARDOUR::Trigger*) (triggerbox.cc:4386)
   by ARDOUR::TriggerBoxThread::thread_work() (triggerbox.cc:4314)
   by ARDOUR::TriggerBoxThread::_thread_work(void*) (triggerbox.cc:4285)
   by fake_thread_start(void*) (pthread_utils.cc:101)
   by start_thread (pthread_create.c:477)
   by clone (clone.S:95)
 Address 0x28229798 is 24 bytes inside a block of size 56 free'd
   at free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
   by Glib::Threads::RWLock::~RWLock() (in /usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1.3.0)
   by Evoral::Sequence<Temporal::Beats>::~Sequence() (Sequence.h:68)
   by ARDOUR::AutomatableSequence<Temporal::Beats>::~AutomatableSequence() (automatable_sequence.h:31)
   by ARDOUR::MidiModel::~MidiModel() (midi_model.h:58)
   by ARDOUR::MidiModel::~MidiModel() (midi_model.h:58)
   by void boost::checked_delete<ARDOUR::MidiModel>(ARDOUR::MidiModel*) (checked_delete.hpp:36)
   by boost::detail::sp_counted_impl_p<ARDOUR::MidiModel>::dispose() (sp_counted_impl.hpp:89)
   by boost::detail::sp_counted_base::release() (sp_counted_base_gcc_atomic.hpp:120)
   by boost::detail::shared_count::~shared_count() (shared_count.hpp:432)
   by boost::shared_ptr<ARDOUR::MidiModel>::~shared_ptr() (shared_ptr.hpp:335)
   by ARDOUR::MIDITrigger::~MIDITrigger() (triggerbox.cc:2037)
   by ARDOUR::MIDITrigger::~MIDITrigger() (triggerbox.cc:2039)
   by ARDOUR::TriggerBoxThread::delete_trigger(ARDOUR::Trigger*) (triggerbox.cc:4386)
   by ARDOUR::TriggerBoxThread::thread_work() (triggerbox.cc:4314)
   by ARDOUR::TriggerBoxThread::_thread_work(void*) (triggerbox.cc:4285)
   by fake_thread_start(void*) (pthread_utils.cc:101)
   by start_thread (pthread_create.c:477)
   by clone (clone.S:95)
```
2022-03-02 18:12:50 +01:00