From de24d4f8b11b959a5155051a9f4a7b456b4ab465 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 24 Jun 2010 18:04:38 +0000 Subject: add and use Source::empty() since it can be done more efficiently than length(pos) == 0 git-svn-id: svn://localhost/ardour2/branches/3.0@7300 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/audiosource.h | 1 + libs/ardour/ardour/midi_source.h | 5 +++-- libs/ardour/ardour/source.h | 1 + libs/ardour/audiosource.cc | 12 +++++++++--- libs/ardour/file_source.cc | 2 +- libs/ardour/midi_source.cc | 14 ++++++++++++-- libs/ardour/session_state.cc | 6 +----- 7 files changed, 28 insertions(+), 13 deletions(-) diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h index fa9e3439c1..2d749dd673 100644 --- a/libs/ardour/ardour/audiosource.h +++ b/libs/ardour/ardour/audiosource.h @@ -50,6 +50,7 @@ class AudioSource : virtual public Source, framecnt_t readable_length() const { return _length; } uint32_t n_channels() const { return 1; } + bool empty() const; framecnt_t length (framepos_t pos) const; void update_length (framepos_t pos, framecnt_t cnt); diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h index c418559d6e..36c8548e20 100644 --- a/libs/ardour/ardour/midi_source.h +++ b/libs/ardour/ardour/midi_source.h @@ -74,8 +74,9 @@ class MidiSource : virtual public Source virtual void append_event_unlocked_frames(const Evoral::Event& ev, sframes_t source_start) = 0; - virtual sframes_t length (sframes_t pos) const; - virtual void update_length (sframes_t pos, sframes_t cnt); + virtual bool empty () const; + virtual framecnt_t length (framepos_t pos) const; + virtual void update_length (framepos_t pos, framecnt_t cnt); virtual void mark_streaming_midi_write_started (NoteMode mode, sframes_t start_time); virtual void mark_streaming_write_started (); diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h index 3ee1e609fc..9abf7ff8f0 100644 --- a/libs/ardour/ardour/source.h +++ b/libs/ardour/ardour/source.h @@ -60,6 +60,7 @@ class Source : public SessionObject time_t timestamp() const { return _timestamp; } void stamp (time_t when) { _timestamp = when; } + virtual bool empty () const = 0; virtual framecnt_t length (framepos_t pos) const = 0; virtual void update_length (framepos_t pos, framecnt_t cnt) = 0; diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc index d864030646..a25e24ab7a 100644 --- a/libs/ardour/audiosource.cc +++ b/libs/ardour/audiosource.cc @@ -126,14 +126,20 @@ AudioSource::set_state (const XMLNode& node, int /*version*/) return 0; } -sframes_t -AudioSource::length (sframes_t /*pos*/) const +bool +AudioSource::empty () const +{ + return _length == 0; +} + +framecnt_t +AudioSource::length (framepos_t /*pos*/) const { return _length; } void -AudioSource::update_length (sframes_t pos, sframes_t cnt) +AudioSource::update_length (framepos_t pos, framecnt_t cnt) { if (pos + cnt > _length) { _length = pos + cnt; diff --git a/libs/ardour/file_source.cc b/libs/ardour/file_source.cc index c00e3ddbc3..fd66a7a167 100644 --- a/libs/ardour/file_source.cc +++ b/libs/ardour/file_source.cc @@ -82,7 +82,7 @@ FileSource::removable () const { return (_flags & Removable) && ((_flags & RemoveAtDestroy) || - ((_flags & RemovableIfEmpty) && length(timeline_position()) == 0)); + ((_flags & RemovableIfEmpty) && empty() == 0)); } int diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc index 54b287cbdf..94c1a9b811 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -112,9 +112,19 @@ MidiSource::set_state (const XMLNode& node, int /*version*/) return 0; } -sframes_t -MidiSource::length (sframes_t pos) const +bool +MidiSource::empty () const { + return _length_beats == 0; +} + +framecnt_t +MidiSource::length (framepos_t pos) const +{ + if (_length_beats == 0) { + return 0; + } + BeatsFramesConverter converter(_session.tempo_map(), pos); return converter.to(_length_beats); } diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index f26933d875..c94fa7b976 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -1044,14 +1044,10 @@ Session::state(bool full_state) and unused by any regions. */ - cerr << "Source " << siter->second->name() << " has UC = " << siter->second->used() - << " length = " << siter->second->length (0) - << endl; - boost::shared_ptr fs; if ((fs = boost::dynamic_pointer_cast (siter->second)) != 0) { if (!fs->destructive()) { - if (fs->length(fs->timeline_position()) == 0 && !fs->used()) { + if (fs->empty() && !fs->used()) { continue; } } -- cgit v1.2.3