13
0

libardour support for propagating track time domain changes into playlists and thence regions

This commit is contained in:
Paul Davis 2023-07-21 21:14:32 -06:00
parent 7fe3becf2d
commit 3d64972ca2
4 changed files with 38 additions and 2 deletions

View File

@ -178,6 +178,8 @@ public:
void adjust_playback_buffering ();
void adjust_capture_buffering ();
void time_domain_changed ();
PBD::Signal0<void> FreezeChange;
PBD::Signal0<void> PlaylistChanged;
PBD::Signal0<void> PlaylistAdded;

View File

@ -3516,6 +3516,7 @@ Playlist::globally_change_time_domain (Temporal::TimeDomain from, Temporal::Time
void
Playlist::time_domain_changed ()
{
std::cerr << this << " playlist gets td change\n";
using namespace Temporal;
TimeDomainProvider::time_domain_changed ();
@ -3523,6 +3524,8 @@ Playlist::time_domain_changed ()
Temporal::TimeDomain to = time_domain();
Temporal::TimeDomain from = (to == AudioTime ? BeatTime : AudioTime);
std::cerr << "playlist new domain " << to << " old domain " << from << " have domain " << has_own_time_domain() << std::endl;
for (auto & region : regions) {
region->change_time_domain (from, to);
}

View File

@ -2209,6 +2209,7 @@ Region::globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDo
void
Region::change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to)
{
std::cerr << name() << " change td to " << to << std::endl;
if (_length.val().time_domain() == from) {
timecnt_t& l (_length.non_const_val());
l.set_time_domain (to);

View File

@ -717,7 +717,7 @@ Track::use_playlist (DataType dt, std::shared_ptr<Playlist> p, bool set_orig)
* has an actual parent, revert to using its parent's domain
*/
if (old->time_domain_parent()) {
old->clear_time_domain ();
old->clear_time_domain_parent ();
}
}
@ -733,7 +733,10 @@ Track::use_playlist (DataType dt, std::shared_ptr<Playlist> p, bool set_orig)
*/
if (!p->time_domain_parent() || p->time_domain_parent() == &_session) {
p->set_time_domain (time_domain());
/* XXX DANGER : track could go away leaving playlist
* with dead parent time domain provider
*/
p->set_time_domain_parent (*this);
}
}
@ -1183,3 +1186,30 @@ Track::use_captured_audio_sources (SourceList& srcs, CaptureInfos const & captur
pl->set_capture_insertion_in_progress (false);
_session.add_command (new StatefulDiffCommand (pl));
}
void
Track::time_domain_changed ()
{
Route::time_domain_changed ();
std::cerr << this << " td changed to " << time_domain() << std::endl;
std::shared_ptr<Playlist> pl = _playlists[DataType::AUDIO];
if (pl) {
std::cerr << "Call for audio\n";
if (pl->time_domain_parent() == this) {
pl->time_domain_changed ();
} else {
std::cerr << "skip that pl\n";
}
}
pl = _playlists[DataType::MIDI];
if (pl) {
std::cerr << "Call for MIDI\n";
if (pl->time_domain_parent() == this) {
pl->time_domain_changed ();
} else {
std::cerr << "skip that pl\n";
}
}
}