diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-05-30 13:23:19 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-05-30 13:23:19 +0000 |
commit | 6eba90adb3ef9726ef277e9abeeede0dec9b8454 (patch) | |
tree | a7d4674a202c70d972225b288705daf3fbda2dc9 | |
parent | c937a67f6ee7e9f280a097683528201489ae6930 (diff) |
add dependents to a compound playlist before creating a source from it, so that the source's new peakfile shows the xfades
git-svn-id: svn://localhost/ardour2/branches/3.0@9631 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | libs/ardour/audio_playlist.cc | 12 | ||||
-rw-r--r-- | libs/ardour/audiosource.cc | 3 | ||||
-rw-r--r-- | libs/ardour/crossfade.cc | 3 | ||||
-rw-r--r-- | libs/ardour/playlist.cc | 12 |
4 files changed, 19 insertions, 11 deletions
diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index 7e60930e2d..55a3733d54 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -269,6 +269,9 @@ AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, fr { framecnt_t ret = cnt; + DEBUG_TRACE (DEBUG::AudioPlayback, string_compose ("Playlist %1 read @ %2 for %3, channel %4, regions %5 xfades %6\n", + name(), start, cnt, chan_n, regions.size(), _crossfades.size())); + /* optimizing this memset() away involves a lot of conditionals that may well cause more of a hit due to cache misses and related stuff than just doing this here. @@ -315,9 +318,15 @@ AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, fr } } + DEBUG_TRACE (DEBUG::AudioPlayback, string_compose ("Checking %1 xfades\n", _crossfades.size())); + for (Crossfades::iterator i = _crossfades.begin(); i != _crossfades.end(); ++i) { + DEBUG_TRACE (DEBUG::AudioPlayback, string_compose ("%1 check xfade between %2 and %3 ...\n", + name(), (*i)->out()->name(), (*i)->in()->name())); if ((*i)->coverage (start, end) != OverlapNone) { relevant_xfades[(*i)->upper_layer()].push_back (*i); + DEBUG_TRACE (DEBUG::AudioPlayback, string_compose ("\t\txfade is relevant, place on layer %1\n", + (*i)->upper_layer())); } } @@ -334,6 +343,8 @@ AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, fr for (vector<uint32_t>::iterator l = relevant_layers.begin(); l != relevant_layers.end(); ++l) { + DEBUG_TRACE (DEBUG::AudioPlayback, string_compose ("read for layer %1\n", *l)); + vector<boost::shared_ptr<Region> > r (relevant_regions[*l]); vector<boost::shared_ptr<Crossfade> >& x (relevant_xfades[*l]); @@ -347,6 +358,7 @@ AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, fr } for (vector<boost::shared_ptr<Crossfade> >::iterator i = x.begin(); i != x.end(); ++i) { + DEBUG_TRACE (DEBUG::AudioPlayback, string_compose ("read from xfade between %1 & %2\n", (*i)->out()->name(), (*i)->in()->name())); (*i)->read_at (buf, mixdown_buffer, gain_buffer, start, cnt, chan_n); /* don't JACK up _read_data_count, since its the same data as we just diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc index de6c5edfec..037352e9fd 100644 --- a/libs/ardour/audiosource.cc +++ b/libs/ardour/audiosource.cc @@ -670,6 +670,7 @@ AudioSource::build_peaks_from_scratch () framecnt_t frames_to_read = min (bufsize, cnt); framecnt_t frames_read; + if ((frames_read = read_unlocked (buf, current_frame, frames_to_read)) != frames_to_read) { error << string_compose(_("%1: could not write read raw data for peak computation (%2)"), _name, strerror (errno)) << endmsg; done_with_peakfile_writes (false); @@ -1002,8 +1003,6 @@ AudioSource::ensure_buffers_for_level_locked (uint32_t level, framecnt_t frame_r _mixdown_buffers.clear (); _gain_buffers.clear (); - cerr << "Allocating nested buffers for level " << level << endl; - while (_mixdown_buffers.size() < level) { _mixdown_buffers.push_back (boost::shared_ptr<Sample> (new Sample[nframes])); _gain_buffers.push_back (boost::shared_ptr<gain_t> (new gain_t[nframes])); diff --git a/libs/ardour/crossfade.cc b/libs/ardour/crossfade.cc index 302b19399e..57a767ee7a 100644 --- a/libs/ardour/crossfade.cc +++ b/libs/ardour/crossfade.cc @@ -17,9 +17,6 @@ */ - -#include "pbd/stacktrace.h" - #include "ardour/debug.h" #include "ardour/types.h" #include "ardour/crossfade.h" diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index a396732d56..1086163fb0 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -265,8 +265,6 @@ Playlist::Playlist (boost::shared_ptr<const Playlist> other, framepos_t start, f in_set_state--; first_set_state = false; - - /* this constructor does NOT notify others (session) */ } void @@ -807,6 +805,7 @@ Playlist::add_region_internal (boost::shared_ptr<Region> region, framepos_t posi notify_region_added (region); + if (!holding_state ()) { check_dependents (region, false); @@ -3127,6 +3126,10 @@ Playlist::combine (const RegionList& r) pre_combine (copies); + /* add any dependent regions to the new playlist */ + + copy_dependents (old_and_new_regions, pl); + /* now create a new PlaylistSource for each channel in the new playlist */ SourceList sources; @@ -3134,6 +3137,7 @@ Playlist::combine (const RegionList& r) for (uint32_t chn = 0; chn < channels; ++chn) { sources.push_back (SourceFactory::createFromPlaylist (_type, _session, pl, id(), parent_name, chn, 0, extent.second, false, false)); + } /* now a new whole-file region using the list of sources */ @@ -3157,10 +3161,6 @@ Playlist::combine (const RegionList& r) boost::shared_ptr<Region> compound_region = RegionFactory::create (parent_region, plist, true); - /* add any dependent regions to the new playlist */ - - copy_dependents (old_and_new_regions, pl); - /* remove all the selected regions from the current playlist */ |