Only update midi regions having a playlist after tempo map change, fix 0 length regio...
authornick_m <mainsbridge@gmail.com>
Fri, 24 Jun 2016 14:34:59 +0000 (00:34 +1000)
committernick_m <mainsbridge@gmail.com>
Sat, 9 Jul 2016 16:18:37 +0000 (02:18 +1000)
libs/ardour/midi_region.cc

index bd0319f2bd1d6779a3ffffd6fbcbfeb7cb1fc8a6..e64a343e68804ca6f991b7afbae8c6fa62a0a826 100644 (file)
@@ -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