diff options
author | Carl Hetherington <carl@carlh.net> | 2011-05-08 23:45:26 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-05-08 23:45:26 +0000 |
commit | d901dbccc912314b54494fab068785c188884fe4 (patch) | |
tree | c1233ee42710a6f0384bef250df8c3e7671ac284 | |
parent | 143dddd9a76ef23544b2ee61c8778a44b96badb0 (diff) |
Make a new write source when the diskstream name changes so that sources don't get a name which includes the old name.
git-svn-id: svn://localhost/ardour2/branches/3.0@9485 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | libs/ardour/ardour/audio_diskstream.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/diskstream.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_diskstream.h | 2 | ||||
-rw-r--r-- | libs/ardour/audio_diskstream.cc | 18 | ||||
-rw-r--r-- | libs/ardour/midi_diskstream.cc | 15 |
5 files changed, 35 insertions, 4 deletions
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h index 70691f7e3f..f05b690901 100644 --- a/libs/ardour/ardour/audio_diskstream.h +++ b/libs/ardour/ardour/audio_diskstream.h @@ -119,6 +119,8 @@ class AudioDiskstream : public Diskstream int add_channel (uint32_t how_many); int remove_channel (uint32_t how_many); + bool set_name (std::string const &); + /* stateful */ XMLNode& get_state(void); diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h index 42ee154fd4..deb81d4837 100644 --- a/libs/ardour/ardour/diskstream.h +++ b/libs/ardour/ardour/diskstream.h @@ -64,7 +64,7 @@ class Diskstream : public SessionObject, public PublicDiskstream Diskstream (Session &, const XMLNode&); virtual ~Diskstream(); - bool set_name (const std::string& str); + virtual bool set_name (const std::string& str); boost::shared_ptr<ARDOUR::IO> io() const { return _io; } void set_track (ARDOUR::Track *); diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h index 019b621bdd..8c927c5fc6 100644 --- a/libs/ardour/ardour/midi_diskstream.h +++ b/libs/ardour/ardour/midi_diskstream.h @@ -72,6 +72,8 @@ class MidiDiskstream : public Diskstream int use_new_playlist (); int use_copy_playlist (); + bool set_name (std::string const &); + /* stateful */ XMLNode& get_state(void); int set_state(const XMLNode&, int version); diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 1327914085..109dfe41ed 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -2359,3 +2359,21 @@ AudioDiskstream::ChannelInfo::~ChannelInfo () capture_transition_buf = 0; } + +bool +AudioDiskstream::set_name (string const & name) +{ + Diskstream::set_name (name); + + /* get a new write source so that its name reflects the new diskstream name */ + + boost::shared_ptr<ChannelList> c = channels.reader(); + ChannelList::iterator i; + int n = 0; + + for (n = 0, i = c->begin(); i != c->end(); ++i, ++n) { + use_new_write_source (n); + } + + return true; +} diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index 038f5beb07..3659a2ac60 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -79,8 +79,6 @@ MidiDiskstream::MidiDiskstream (Session &sess, const string &name, Diskstream::F , _frames_written_to_ringbuffer(0) , _frames_read_from_ringbuffer(0) { - /* prevent any write sources from being created */ - in_set_state = true; init (); @@ -1288,7 +1286,7 @@ MidiDiskstream::use_new_write_source (uint32_t n) if (!_session.writable() || !recordable()) { return 1; } - + assert(n == 0); _write_source.reset(); @@ -1440,3 +1438,14 @@ MidiDiskstream::get_playback (MidiBuffer& dst, framepos_t start, framepos_t end) g_atomic_int_add(&_frames_read_from_ringbuffer, frames_read); } +bool +MidiDiskstream::set_name (string const & name) +{ + Diskstream::set_name (name); + + /* get a new write source so that its name reflects the new diskstream name */ + use_new_write_source (0); + + return true; +} + |