From 489d2ba1a76c64a935808591571ca63a053172c8 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 29 May 2011 14:38:25 +0000 Subject: don't always rebuild peakfiles for compound regions git-svn-id: svn://localhost/ardour2/branches/3.0@9627 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/audio_playlist_source.h | 3 ++- libs/ardour/ardour/midi_playlist_source.h | 3 +-- libs/ardour/ardour/playlist_source.h | 1 - libs/ardour/audio_playlist_source.cc | 10 +++++----- libs/ardour/audiosource.cc | 12 ++++++++++-- libs/ardour/midi_playlist_source.cc | 9 --------- 6 files changed, 18 insertions(+), 20 deletions(-) diff --git a/libs/ardour/ardour/audio_playlist_source.h b/libs/ardour/ardour/audio_playlist_source.h index 273651b7d1..42359414e9 100644 --- a/libs/ardour/ardour/audio_playlist_source.h +++ b/libs/ardour/ardour/audio_playlist_source.h @@ -32,7 +32,7 @@ namespace ARDOUR { class AudioPlaylist; -class AudioPlaylistSource : public AudioSource, public PlaylistSource { +class AudioPlaylistSource : public PlaylistSource, public AudioSource { public: virtual ~AudioPlaylistSource (); @@ -59,6 +59,7 @@ class AudioPlaylistSource : public AudioSource, public PlaylistSource { AudioPlaylistSource (Session&, const PBD::ID& orig, const std::string& name, boost::shared_ptr, uint32_t chn, frameoffset_t begin, framecnt_t len, Source::Flag flags); AudioPlaylistSource (Session&, const XMLNode&); + private: uint32_t _playlist_channel; diff --git a/libs/ardour/ardour/midi_playlist_source.h b/libs/ardour/ardour/midi_playlist_source.h index 85f7a960ad..1042b61369 100644 --- a/libs/ardour/ardour/midi_playlist_source.h +++ b/libs/ardour/ardour/midi_playlist_source.h @@ -50,8 +50,6 @@ class MidiPlaylistSource : public MidiSource, public PlaylistSource { void load_model(bool lock=true, bool force_reload=false); void destroy_model(); - static void ensure_buffers_for_level (uint32_t); - protected: friend class SourceFactory; @@ -70,6 +68,7 @@ class MidiPlaylistSource : public MidiSource, public PlaylistSource { framepos_t write_unlocked (MidiRingBuffer& dst, framepos_t position, framecnt_t cnt); + private: int set_state (const XMLNode&, int version, bool with_descendants); framecnt_t _length; diff --git a/libs/ardour/ardour/playlist_source.h b/libs/ardour/ardour/playlist_source.h index b41569cbdd..b4ff2fa413 100644 --- a/libs/ardour/ardour/playlist_source.h +++ b/libs/ardour/ardour/playlist_source.h @@ -50,7 +50,6 @@ class PlaylistSource : virtual public Source { PlaylistSource (Session&, const XMLNode&); void add_state (XMLNode&); - }; } /* namespace */ diff --git a/libs/ardour/audio_playlist_source.cc b/libs/ardour/audio_playlist_source.cc index f225db9c45..eb71dc449b 100644 --- a/libs/ardour/audio_playlist_source.cc +++ b/libs/ardour/audio_playlist_source.cc @@ -49,8 +49,8 @@ using namespace PBD; AudioPlaylistSource::AudioPlaylistSource (Session& s, const ID& orig, const std::string& name, boost::shared_ptr p, uint32_t chn, frameoffset_t begin, framecnt_t len, Source::Flag flags) : Source (s, DataType::AUDIO, name) - , AudioSource (s, name) , PlaylistSource (s, orig, name, p, DataType::AUDIO, begin, len, flags) + , AudioSource (s, name) , _playlist_channel (chn) { AudioSource::_length = len; @@ -59,8 +59,8 @@ AudioPlaylistSource::AudioPlaylistSource (Session& s, const ID& orig, const std: AudioPlaylistSource::AudioPlaylistSource (Session& s, const XMLNode& node) : Source (s, node) - , AudioSource (s, node) , PlaylistSource (s, node) + , AudioSource (s, node) { /* PlaylistSources are never writable, renameable, removable or destructive */ _flags = Flag (_flags & ~(Writable|CanRename|Removable|RemovableIfEmpty|RemoveAtDestroy|Destructive)); @@ -93,7 +93,6 @@ AudioPlaylistSource::get_state () return node; } - int AudioPlaylistSource::set_state (const XMLNode& node, int version) @@ -106,8 +105,8 @@ AudioPlaylistSource::set_state (const XMLNode& node, int version, bool with_desc { if (with_descendants) { if (Source::set_state (node, version) || - AudioSource::set_state (node, version) || - PlaylistSource::set_state (node, version)) { + PlaylistSource::set_state (node, version) || + AudioSource::set_state (node, version)) { return -1; } } @@ -226,3 +225,4 @@ AudioPlaylistSource::peak_path (string /*audio_path_IGNORED*/) return _peak_path; } + diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc index 25e1d2222d..de6c5edfec 100644 --- a/libs/ardour/audiosource.cc +++ b/libs/ardour/audiosource.cc @@ -252,8 +252,14 @@ AudioSource::initialize_peakfile (bool newfile, string audio_path) int err = stat (audio_path.c_str(), &stat_file); if (err) { - _peaks_built = false; - _peak_byte_max = 0; + + /* no audio path - nested source or we can't + read it or ... whatever, use the peakfile as-is. + */ + + _peaks_built = true; + _peak_byte_max = statbuf.st_size; + } else { /* allow 6 seconds slop on checking peak vs. file times because of various @@ -996,6 +1002,8 @@ 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 (new Sample[nframes])); _gain_buffers.push_back (boost::shared_ptr (new gain_t[nframes])); diff --git a/libs/ardour/midi_playlist_source.cc b/libs/ardour/midi_playlist_source.cc index c39d5e2389..713aadf5b1 100644 --- a/libs/ardour/midi_playlist_source.cc +++ b/libs/ardour/midi_playlist_source.cc @@ -52,7 +52,6 @@ MidiPlaylistSource::MidiPlaylistSource (Session& s, const ID& orig, const std::s , MidiSource (s, name, flags) , PlaylistSource (s, orig, name, p, DataType::AUDIO, begin, len, flags) { - ensure_buffers_for_level (_level); } MidiPlaylistSource::MidiPlaylistSource (Session& s, const XMLNode& node) @@ -106,8 +105,6 @@ MidiPlaylistSource::set_state (const XMLNode& node, int version, bool with_desce } } - ensure_buffers_for_level (_level); - return 0; } @@ -183,9 +180,3 @@ MidiPlaylistSource::empty () const return !_playlist || _playlist->empty(); } -void -MidiPlaylistSource::ensure_buffers_for_level (uint32_t level) -{ -} - - -- cgit v1.2.3