diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h index f52148bebc..4ae5b59fc8 100644 --- a/libs/ardour/ardour/audio_track.h +++ b/libs/ardour/ardour/audio_track.h @@ -42,7 +42,7 @@ class AudioTrack : public Track int roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler); - void use_new_diskstream (); + boost::shared_ptr create_diskstream (); void set_diskstream (boost::shared_ptr); DataType data_type () const { diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 0df9f538f3..1f2f11b5bc 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -46,7 +46,7 @@ public: void realtime_handle_transport_stopped (); void realtime_locate (); - void use_new_diskstream (); + boost::shared_ptr create_diskstream (); void set_diskstream (boost::shared_ptr); void set_record_enabled (bool yn, void *src); diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 529ec25d14..cce602437b 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -202,7 +202,7 @@ public: void lower_region_to_bottom (boost::shared_ptr); const PBD::ID& get_orig_track_id () const { return _orig_track_id; } - void set_orig_track_id (const PBD::ID& did) { _orig_track_id = did; } + void set_orig_track_id (const PBD::ID& did); /* destructive editing */ diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index 496b1e195b..f0492401d9 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -69,7 +69,8 @@ class Track : public Route, public PublicDiskstream bool can_record(); - virtual void use_new_diskstream () = 0; + void use_new_diskstream (); + virtual boost::shared_ptr create_diskstream() = 0; virtual void set_diskstream (boost::shared_ptr); void set_latency_compensation (framecnt_t); diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc index a8f43c4758..74be81c909 100644 --- a/libs/ardour/audio_track.cc +++ b/libs/ardour/audio_track.cc @@ -61,8 +61,8 @@ AudioTrack::~AudioTrack () { } -void -AudioTrack::use_new_diskstream () +boost::shared_ptr +AudioTrack::create_diskstream () { AudioDiskstream::Flag dflags = AudioDiskstream::Flag (0); @@ -78,13 +78,7 @@ AudioTrack::use_new_diskstream () dflags = AudioDiskstream::Flag(dflags | AudioDiskstream::NonLayered); } - AudioDiskstream* dsp (new AudioDiskstream (_session, name(), dflags)); - boost::shared_ptr ds (dsp); - - ds->do_refill_with_alloc (); - ds->set_block_size (_session.get_block_size ()); - - set_diskstream (ds); + return boost::shared_ptr (new AudioDiskstream (_session, name(), dflags)); } void diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index ff9810629f..3033f3d952 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -77,8 +77,8 @@ MidiTrack::init () return 0; } -void -MidiTrack::use_new_diskstream () +boost::shared_ptr +MidiTrack::create_diskstream () { MidiDiskstream::Flag dflags = MidiDiskstream::Flag (0); @@ -90,13 +90,10 @@ MidiTrack::use_new_diskstream () assert(_mode != Destructive); - boost::shared_ptr ds (new MidiDiskstream (_session, name(), dflags)); - ds->do_refill_with_alloc (); - ds->set_block_size (_session.get_block_size ()); - - set_diskstream (ds); + return boost::shared_ptr (new MidiDiskstream (_session, name(), dflags)); } + void MidiTrack::set_record_enabled (bool yn, void *src) { diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index ce6b6734af..e68c13b173 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -3391,3 +3391,9 @@ Playlist::count_joined_regions () const return cnt; } + +void +Playlist::set_orig_track_id (const PBD::ID& id) +{ + _orig_track_id = id; +} diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index b17b8f523f..4ae75da54d 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -67,6 +67,18 @@ Track::init () return 0; } +void +Track::use_new_diskstream () +{ + boost::shared_ptr ds = create_diskstream (); + + ds->do_refill_with_alloc (); + ds->set_block_size (_session.get_block_size ()); + ds->playlist()->set_orig_track_id (id()); + + set_diskstream (ds); +} + XMLNode& Track::get_state () { @@ -692,7 +704,11 @@ Track::playlist_modified () int Track::use_playlist (boost::shared_ptr p) { - return _diskstream->use_playlist (p); + int ret = _diskstream->use_playlist (p); + if (ret == 0) { + p->set_orig_track_id (id()); + } + return ret; } int