diff options
-rw-r--r-- | libs/ardour/midi_region.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index bd0319f2bd..e64a343e68 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -197,6 +197,12 @@ MidiRegion::set_length_internal (framecnt_t len, const int32_t& sub_num) void MidiRegion::update_after_tempo_map_change (bool /* send */) { + boost::shared_ptr<Playlist> pl (playlist()); + + if (!pl || position_lock_style() != MusicTime) { + return; + } + const framepos_t old_pos = _position; const framepos_t old_length = _length; const framepos_t old_start = _start; @@ -234,6 +240,11 @@ MidiRegion::set_position_internal (framepos_t pos, bool allow_bbt_recompute, con /* set _start to new position in tempo map */ _start = _position - _session.tempo_map().frame_at_beat (beat() - _start_beats.val().to_double()); + /* in construction from src */ + if (_length_beats == Evoral::Beats()) { + update_length_beats (sub_num); + } + /* leave _length_beats alone, and change _length to reflect the state of things at the new position (tempo map may dictate a different number of frames). */ @@ -479,7 +490,7 @@ MidiRegion::set_start_internal (framecnt_t s, const int32_t& sub_num) if (position_lock_style() == AudioTime) { set_start_beats_from_start_frames (); - } + } } void |