diff options
author | Carl Hetherington <carl@carlh.net> | 2010-05-26 16:03:47 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-05-26 16:03:47 +0000 |
commit | 102f64f94c638a0b142dfd7642248aaecad0b051 (patch) | |
tree | ea423dacaeb908d0e579cbdfef75905f02800ba9 /libs | |
parent | b91e1f3605a5845b532a02620e12e3402c4785a5 (diff) |
Remove empty MIDI regions which result from recordings made when no MIDI data is received.
git-svn-id: svn://localhost/ardour2/branches/3.0@7167 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/playlist.h | 1 | ||||
-rw-r--r-- | libs/ardour/midi_diskstream.cc | 4 | ||||
-rw-r--r-- | libs/ardour/playlist.cc | 19 |
3 files changed, 24 insertions, 0 deletions
diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index d13789fa38..1021b8dba0 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -136,6 +136,7 @@ class Playlist : public SessionObject void add_region (boost::shared_ptr<Region>, framepos_t position, float times = 1, bool auto_partition = false); void remove_region (boost::shared_ptr<Region>); + void remove_region_by_source (boost::shared_ptr<Source>); void get_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&); void get_region_list_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&); void replace_region (boost::shared_ptr<Region> old, boost::shared_ptr<Region> newr, framepos_t pos); diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index e58c8896bd..fa2cdce014 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -1321,6 +1321,10 @@ MidiDiskstream::use_new_write_source (uint32_t n) if (_write_source) { if (_write_source->is_empty ()) { + /* remove any region that is using this empty source; they can result when MIDI recordings + are made, but no MIDI data is received. + */ + _playlist->remove_region_by_source (_write_source); _write_source->mark_for_remove (); _write_source->drop_references (); _write_source.reset(); diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 7c9ac93c3c..1d506dcee7 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -2939,3 +2939,22 @@ Playlist::has_region_at (framepos_t const p) const return (i != regions.end()); } + +/** Remove any region that uses a given source */ +void +Playlist::remove_region_by_source (boost::shared_ptr<Source> s) +{ + RegionLock rl (this); + + RegionList::iterator i = regions.begin(); + while (i != regions.end()) { + RegionList::iterator j = i; + ++j; + + if ((*i)->uses_source (s)) { + remove_region_internal (*i); + } + + i = j; + } +} |