diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index 6ef4ec6454..d34c67ff17 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -85,6 +85,19 @@ AudioPlaylist::AudioPlaylist (boost::shared_ptr other, fram framecnt_t fade_in = 64; framecnt_t fade_out = 64; + /* coverage will return OverlapStart if the start/end coincides + with the end/start point. we do not add such a region to the new playlist, + so catch this special case. + */ + + if (region->first_frame() >= end) { + continue; + } + + if (region->last_frame() <= start) { + continue; + } + switch (region->coverage (start, end)) { case Evoral::OverlapNone: continue; diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index ff2f524398..204ca5cbdc 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -210,6 +210,19 @@ Playlist::Playlist (boost::shared_ptr other, framepos_t start, f region = *i; + /* coverage will return OverlapStart if the start/end coincides + with the end/start point. we do not add such a region to the new playlist, + so catch this special case. + */ + + if (region->first_frame() >= end) { + continue; + } + + if (region->last_frame() <= start) { + continue; + } + overlap = region->coverage (start, end); switch (overlap) { @@ -914,7 +927,7 @@ Playlist::flush_notifications (bool from_undo) current = *i; - if (current->first_frame() >= start && current->last_frame() < end) { + if (current->first_frame() >= start && current->last_frame() <= end) { if (cutting) { remove_region_internal (current); @@ -923,14 +936,18 @@ Playlist::flush_notifications (bool from_undo) continue; } - /* coverage will return OverlapStart if the start coincides - with the end point. we do not partition such a region, + /* coverage will return OverlapStart if the start/end coincides + with the end/start point. we do not partition such a region, so catch this special case. */ if (current->first_frame() >= end) { continue; } + + if (current->last_frame() <= start) { + continue; + } if ((overlap = current->coverage (start, end)) == Evoral::OverlapNone) { continue;