summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/audio_diskstream.h2
-rw-r--r--libs/ardour/ardour/diskstream.h2
-rw-r--r--libs/ardour/ardour/midi_diskstream.h2
-rw-r--r--libs/ardour/audio_diskstream.cc18
-rw-r--r--libs/ardour/midi_diskstream.cc15
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;
+}
+