summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/audio_playlist.cc11
-rw-r--r--libs/ardour/playlist.cc17
2 files changed, 15 insertions, 13 deletions
diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc
index 5118aab684..dd0f313fc4 100644
--- a/libs/ardour/audio_playlist.cc
+++ b/libs/ardour/audio_playlist.cc
@@ -425,8 +425,15 @@ AudioPlaylist::check_dependents (boost::shared_ptr<Region> r, bool norefresh)
/* in, out */
xfade = new Crossfade (top, bottom, xfade_length, top->first_frame(), StartOfIn);
add_crossfade (*xfade);
- xfade = new Crossfade (bottom, top, xfade_length, top->last_frame() - xfade_length, EndOfOut);
- add_crossfade (*xfade);
+
+ if (top_region_at (top->last_frame() - 1) == top) {
+ /*
+ only add a fade out if there is no region on top of the end of 'top' (which
+ would cover it).
+ */
+ xfade = new Crossfade (bottom, top, xfade_length, top->last_frame() - xfade_length, EndOfOut);
+ add_crossfade (*xfade);
+ }
} else {
diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc
index a06fe2b5fd..e748b44824 100644
--- a/libs/ardour/playlist.cc
+++ b/libs/ardour/playlist.cc
@@ -404,12 +404,8 @@ Playlist::flush_notifications ()
timestamp_layer_op (*r);
}
pending_length = true;
- n++;
- }
-
- for (RegionList::iterator r = pending_bounds.begin(); r != pending_bounds.end(); ++r) {
dependent_checks_needed.insert (*r);
- /* don't increment n again - its the same list */
+ n++;
}
for (s = pending_adds.begin(); s != pending_adds.end(); ++s) {
@@ -417,10 +413,6 @@ Playlist::flush_notifications ()
n++;
}
- for (s = dependent_checks_needed.begin(); s != dependent_checks_needed.end(); ++s) {
- check_dependents (*s, false);
- }
-
for (s = pending_removes.begin(); s != pending_removes.end(); ++s) {
remove_dependents (*s);
n++;
@@ -441,6 +433,10 @@ Playlist::flush_notifications ()
Modified (); /* EMIT SIGNAL */
}
+ for (s = dependent_checks_needed.begin(); s != dependent_checks_needed.end(); ++s) {
+ check_dependents (*s, false);
+ }
+
pending_adds.clear ();
pending_removes.clear ();
pending_bounds.clear ();
@@ -1111,7 +1107,6 @@ Playlist::region_bounds_changed (Change what_changed, boost::shared_ptr<Region>
}
if (what_changed & Change (ARDOUR::PositionChanged|ARDOUR::LengthChanged)) {
-
if (holding_state ()) {
pending_bounds.push_back (region);
} else {
@@ -1121,9 +1116,9 @@ Playlist::region_bounds_changed (Change what_changed, boost::shared_ptr<Region>
}
possibly_splice ();
- check_dependents (region, false);
notify_length_changed ();
relayer ();
+ check_dependents (region, false);
}
}
}