summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-04-21 21:29:15 +0000
committerCarl Hetherington <carl@carlh.net>2010-04-21 21:29:15 +0000
commit950ac6ef2b08b460adb16a1a3690077ecf55314c (patch)
tree480fbd68d985cb610b3f577268f333a3947c3f25 /libs
parent061a85191c301ac18f2e8ca59d43127a4499ba96 (diff)
Don't try to load separate diskstreams in 3.0 session files. Fix a few uses of Diskstream outside Track.
git-svn-id: svn://localhost/ardour2/branches/3.0@6946 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audio_track.h3
-rw-r--r--libs/ardour/ardour/midi_track.h8
-rw-r--r--libs/ardour/midi_track.cc28
-rw-r--r--libs/ardour/session.cc6
-rw-r--r--libs/ardour/session_state.cc12
5 files changed, 42 insertions, 15 deletions
diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h
index d74f5e53b9..c2428339c7 100644
--- a/libs/ardour/ardour/audio_track.h
+++ b/libs/ardour/ardour/audio_track.h
@@ -42,8 +42,6 @@ class AudioTrack : public Track
int roll (nframes_t nframes, framepos_t start_frame, framepos_t end_frame,
int declick, bool can_record, bool rec_monitors_input, bool& need_butler);
- boost::shared_ptr<AudioDiskstream> audio_diskstream() const;
-
void use_new_diskstream ();
void set_diskstream (boost::shared_ptr<Diskstream>);
@@ -60,6 +58,7 @@ class AudioTrack : public Track
boost::shared_ptr<AudioFileSource> write_source (uint32_t n = 0);
protected:
+ boost::shared_ptr<AudioDiskstream> audio_diskstream () const;
XMLNode& state (bool full);
int _set_state (const XMLNode&, int, bool call_base);
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h
index 0399492a02..5d5bdc0cb4 100644
--- a/libs/ardour/ardour/midi_track.h
+++ b/libs/ardour/ardour/midi_track.h
@@ -44,8 +44,6 @@ public:
void handle_transport_stopped (bool abort, bool did_locate, bool flush_processors);
- boost::shared_ptr<MidiDiskstream> midi_diskstream() const;
-
void use_new_diskstream ();
void set_diskstream (boost::shared_ptr<Diskstream>);
@@ -92,6 +90,10 @@ public:
void set_midi_thru (bool yn);
boost::shared_ptr<SMFSource> write_source (uint32_t n = 0);
+ void set_channel_mode (ChannelMode, uint16_t);
+ ChannelMode get_channel_mode ();
+ uint16_t get_channel_mask ();
+ boost::shared_ptr<MidiPlaylist> midi_playlist ();
protected:
XMLNode& state (bool full);
@@ -99,6 +101,8 @@ protected:
int _set_state (const XMLNode&, int, bool call_base);
private:
+ boost::shared_ptr<MidiDiskstream> midi_diskstream () const;
+
void write_out_of_band_data (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes);
void set_state_part_two ();
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 10bd7a23a5..9fc2755a16 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -570,7 +570,29 @@ MidiTrack::set_midi_thru (bool yn)
boost::shared_ptr<SMFSource>
MidiTrack::write_source (uint32_t n)
{
- boost::shared_ptr<MidiDiskstream> ds = boost::dynamic_pointer_cast<MidiDiskstream> (_diskstream);
- assert (ds);
- return ds->write_source ();
+ return midi_diskstream()->write_source ();
+}
+
+void
+MidiTrack::set_channel_mode (ChannelMode mode, uint16_t mask)
+{
+ midi_diskstream()->set_channel_mode (mode, mask);
+}
+
+ChannelMode
+MidiTrack::get_channel_mode ()
+{
+ return midi_diskstream()->get_channel_mode ();
+}
+
+uint16_t
+MidiTrack::get_channel_mask ()
+{
+ return midi_diskstream()->get_channel_mask ();
+}
+
+boost::shared_ptr<MidiPlaylist>
+MidiTrack::midi_playlist ()
+{
+ return midi_diskstream()->midi_playlist ();
}
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 5c9ee380c9..9cf48b7154 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -1461,7 +1461,7 @@ Session::new_midi_track (TrackMode mode, RouteGroup* route_group, uint32_t how_m
auto_connect_route (track, existing_inputs, existing_outputs);
- track->midi_diskstream()->non_realtime_input_change();
+ track->non_realtime_input_change();
if (route_group) {
route_group->add (track);
}
@@ -1630,7 +1630,7 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
route_group->add (track);
}
- track->audio_diskstream()->non_realtime_input_change();
+ track->non_realtime_input_change();
track->DiskstreamChanged.connect_same_thread (*this, boost::bind (&Session::resort_routes, this));
track->set_remote_control_id (control_id);
@@ -3327,7 +3327,7 @@ Session::write_one_track (AudioTrack& track, nframes_t start, nframes_t end,
boost::shared_ptr<AudioFileSource> fsource;
uint32_t x;
char buf[PATH_MAX+1];
- ChanCount nchans(track.audio_diskstream()->n_channels());
+ ChanCount nchans(track.n_channels());
nframes_t position;
nframes_t this_chunk;
nframes_t to_do;
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index 833ead56e2..280d6365ad 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -1300,11 +1300,13 @@ Session::set_state (const XMLNode& node, int version)
goto out;
}
- if (version < 3000 && ((child = find_named_node (node, X_("DiskStreams"))) == 0)) {
- error << _("Session: XML state has no diskstreams section") << endmsg;
- goto out;
- } else if (load_diskstreams_2X (*child, version)) {
- goto out;
+ if (version < 3000) {
+ if ((child = find_named_node (node, X_("DiskStreams"))) == 0) {
+ error << _("Session: XML state has no diskstreams section") << endmsg;
+ goto out;
+ } else if (load_diskstreams_2X (*child, version)) {
+ goto out;
+ }
}
if ((child = find_named_node (node, "Routes")) == 0) {