diff options
author | Carl Hetherington <carl@carlh.net> | 2010-04-21 21:29:15 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-04-21 21:29:15 +0000 |
commit | 950ac6ef2b08b460adb16a1a3690077ecf55314c (patch) | |
tree | 480fbd68d985cb610b3f577268f333a3947c3f25 /libs | |
parent | 061a85191c301ac18f2e8ca59d43127a4499ba96 (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.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_track.h | 8 | ||||
-rw-r--r-- | libs/ardour/midi_track.cc | 28 | ||||
-rw-r--r-- | libs/ardour/session.cc | 6 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 12 |
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) { |