summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-12-13 16:52:33 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-12-13 16:52:33 +0000
commit88d49cdb5734632ada27d2de018533ecd13ac31e (patch)
tree73af68bc87738020aef6b37b2de22d6c0615b147
parent9f897d097a72601b9a032c0474422d40d6c415f5 (diff)
fix up mess with unassigned Playlist::orig_track_id
git-svn-id: svn://localhost/ardour2/branches/3.0@10998 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--libs/ardour/ardour/audio_track.h2
-rw-r--r--libs/ardour/ardour/midi_track.h2
-rw-r--r--libs/ardour/ardour/playlist.h2
-rw-r--r--libs/ardour/ardour/track.h3
-rw-r--r--libs/ardour/audio_track.cc12
-rw-r--r--libs/ardour/midi_track.cc11
-rw-r--r--libs/ardour/playlist.cc6
-rw-r--r--libs/ardour/track.cc18
8 files changed, 35 insertions, 21 deletions
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<Diskstream> create_diskstream ();
void set_diskstream (boost::shared_ptr<Diskstream>);
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<Diskstream> create_diskstream ();
void set_diskstream (boost::shared_ptr<Diskstream>);
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<Region>);
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<Diskstream> create_diskstream() = 0;
virtual void set_diskstream (boost::shared_ptr<Diskstream>);
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<Diskstream>
+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<AudioDiskstream> ds (dsp);
-
- ds->do_refill_with_alloc ();
- ds->set_block_size (_session.get_block_size ());
-
- set_diskstream (ds);
+ return boost::shared_ptr<AudioDiskstream> (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<Diskstream>
+MidiTrack::create_diskstream ()
{
MidiDiskstream::Flag dflags = MidiDiskstream::Flag (0);
@@ -90,13 +90,10 @@ MidiTrack::use_new_diskstream ()
assert(_mode != Destructive);
- boost::shared_ptr<MidiDiskstream> 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<Diskstream> (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<Diskstream> 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<Playlist> p)
{
- return _diskstream->use_playlist (p);
+ int ret = _diskstream->use_playlist (p);
+ if (ret == 0) {
+ p->set_orig_track_id (id());
+ }
+ return ret;
}
int