mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-22 14:46:34 +01:00
don't always rebuild peakfiles for compound regions
git-svn-id: svn://localhost/ardour2/branches/3.0@9627 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
c3821a7816
commit
489d2ba1a7
6 changed files with 18 additions and 20 deletions
|
|
@ -32,7 +32,7 @@ namespace ARDOUR {
|
||||||
|
|
||||||
class AudioPlaylist;
|
class AudioPlaylist;
|
||||||
|
|
||||||
class AudioPlaylistSource : public AudioSource, public PlaylistSource {
|
class AudioPlaylistSource : public PlaylistSource, public AudioSource {
|
||||||
public:
|
public:
|
||||||
virtual ~AudioPlaylistSource ();
|
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<AudioPlaylist>, uint32_t chn,
|
AudioPlaylistSource (Session&, const PBD::ID& orig, const std::string& name, boost::shared_ptr<AudioPlaylist>, uint32_t chn,
|
||||||
frameoffset_t begin, framecnt_t len, Source::Flag flags);
|
frameoffset_t begin, framecnt_t len, Source::Flag flags);
|
||||||
AudioPlaylistSource (Session&, const XMLNode&);
|
AudioPlaylistSource (Session&, const XMLNode&);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32_t _playlist_channel;
|
uint32_t _playlist_channel;
|
||||||
|
|
|
||||||
|
|
@ -50,8 +50,6 @@ class MidiPlaylistSource : public MidiSource, public PlaylistSource {
|
||||||
void load_model(bool lock=true, bool force_reload=false);
|
void load_model(bool lock=true, bool force_reload=false);
|
||||||
void destroy_model();
|
void destroy_model();
|
||||||
|
|
||||||
static void ensure_buffers_for_level (uint32_t);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class SourceFactory;
|
friend class SourceFactory;
|
||||||
|
|
||||||
|
|
@ -70,6 +68,7 @@ class MidiPlaylistSource : public MidiSource, public PlaylistSource {
|
||||||
framepos_t write_unlocked (MidiRingBuffer<framepos_t>& dst,
|
framepos_t write_unlocked (MidiRingBuffer<framepos_t>& dst,
|
||||||
framepos_t position,
|
framepos_t position,
|
||||||
framecnt_t cnt);
|
framecnt_t cnt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int set_state (const XMLNode&, int version, bool with_descendants);
|
int set_state (const XMLNode&, int version, bool with_descendants);
|
||||||
framecnt_t _length;
|
framecnt_t _length;
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,6 @@ class PlaylistSource : virtual public Source {
|
||||||
PlaylistSource (Session&, const XMLNode&);
|
PlaylistSource (Session&, const XMLNode&);
|
||||||
|
|
||||||
void add_state (XMLNode&);
|
void add_state (XMLNode&);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace */
|
} /* namespace */
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,8 @@ using namespace PBD;
|
||||||
AudioPlaylistSource::AudioPlaylistSource (Session& s, const ID& orig, const std::string& name, boost::shared_ptr<AudioPlaylist> p,
|
AudioPlaylistSource::AudioPlaylistSource (Session& s, const ID& orig, const std::string& name, boost::shared_ptr<AudioPlaylist> p,
|
||||||
uint32_t chn, frameoffset_t begin, framecnt_t len, Source::Flag flags)
|
uint32_t chn, frameoffset_t begin, framecnt_t len, Source::Flag flags)
|
||||||
: Source (s, DataType::AUDIO, name)
|
: Source (s, DataType::AUDIO, name)
|
||||||
, AudioSource (s, name)
|
|
||||||
, PlaylistSource (s, orig, name, p, DataType::AUDIO, begin, len, flags)
|
, PlaylistSource (s, orig, name, p, DataType::AUDIO, begin, len, flags)
|
||||||
|
, AudioSource (s, name)
|
||||||
, _playlist_channel (chn)
|
, _playlist_channel (chn)
|
||||||
{
|
{
|
||||||
AudioSource::_length = len;
|
AudioSource::_length = len;
|
||||||
|
|
@ -59,8 +59,8 @@ AudioPlaylistSource::AudioPlaylistSource (Session& s, const ID& orig, const std:
|
||||||
|
|
||||||
AudioPlaylistSource::AudioPlaylistSource (Session& s, const XMLNode& node)
|
AudioPlaylistSource::AudioPlaylistSource (Session& s, const XMLNode& node)
|
||||||
: Source (s, node)
|
: Source (s, node)
|
||||||
, AudioSource (s, node)
|
|
||||||
, PlaylistSource (s, node)
|
, PlaylistSource (s, node)
|
||||||
|
, AudioSource (s, node)
|
||||||
{
|
{
|
||||||
/* PlaylistSources are never writable, renameable, removable or destructive */
|
/* PlaylistSources are never writable, renameable, removable or destructive */
|
||||||
_flags = Flag (_flags & ~(Writable|CanRename|Removable|RemovableIfEmpty|RemoveAtDestroy|Destructive));
|
_flags = Flag (_flags & ~(Writable|CanRename|Removable|RemovableIfEmpty|RemoveAtDestroy|Destructive));
|
||||||
|
|
@ -93,7 +93,6 @@ AudioPlaylistSource::get_state ()
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
AudioPlaylistSource::set_state (const XMLNode& node, int version)
|
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 (with_descendants) {
|
||||||
if (Source::set_state (node, version) ||
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -226,3 +225,4 @@ AudioPlaylistSource::peak_path (string /*audio_path_IGNORED*/)
|
||||||
return _peak_path;
|
return _peak_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -252,8 +252,14 @@ AudioSource::initialize_peakfile (bool newfile, string audio_path)
|
||||||
int err = stat (audio_path.c_str(), &stat_file);
|
int err = stat (audio_path.c_str(), &stat_file);
|
||||||
|
|
||||||
if (err) {
|
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 {
|
} else {
|
||||||
|
|
||||||
/* allow 6 seconds slop on checking peak vs. file times because of various
|
/* 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 ();
|
_mixdown_buffers.clear ();
|
||||||
_gain_buffers.clear ();
|
_gain_buffers.clear ();
|
||||||
|
|
||||||
|
cerr << "Allocating nested buffers for level " << level << endl;
|
||||||
|
|
||||||
while (_mixdown_buffers.size() < level) {
|
while (_mixdown_buffers.size() < level) {
|
||||||
_mixdown_buffers.push_back (boost::shared_ptr<Sample> (new Sample[nframes]));
|
_mixdown_buffers.push_back (boost::shared_ptr<Sample> (new Sample[nframes]));
|
||||||
_gain_buffers.push_back (boost::shared_ptr<gain_t> (new gain_t[nframes]));
|
_gain_buffers.push_back (boost::shared_ptr<gain_t> (new gain_t[nframes]));
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,6 @@ MidiPlaylistSource::MidiPlaylistSource (Session& s, const ID& orig, const std::s
|
||||||
, MidiSource (s, name, flags)
|
, MidiSource (s, name, flags)
|
||||||
, PlaylistSource (s, orig, name, p, DataType::AUDIO, begin, len, flags)
|
, PlaylistSource (s, orig, name, p, DataType::AUDIO, begin, len, flags)
|
||||||
{
|
{
|
||||||
ensure_buffers_for_level (_level);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MidiPlaylistSource::MidiPlaylistSource (Session& s, const XMLNode& node)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -183,9 +180,3 @@ MidiPlaylistSource::empty () const
|
||||||
return !_playlist || _playlist->empty();
|
return !_playlist || _playlist->empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
MidiPlaylistSource::ensure_buffers_for_level (uint32_t level)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue