summaryrefslogtreecommitdiff
path: root/libs/ardour/playlist.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/playlist.cc')
-rw-r--r--libs/ardour/playlist.cc222
1 files changed, 108 insertions, 114 deletions
diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc
index 61aa5c587a..f778175e9e 100644
--- a/libs/ardour/playlist.cc
+++ b/libs/ardour/playlist.cc
@@ -55,19 +55,19 @@ struct ShowMeTheList {
};
struct RegionSortByLayer {
- bool operator() (Region *a, Region *b) {
+ bool operator() (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
return a->layer() < b->layer();
}
};
struct RegionSortByPosition {
- bool operator() (Region *a, Region *b) {
+ bool operator() (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
return a->position() < b->position();
}
};
struct RegionSortByLastLayerOp {
- bool operator() (Region *a, Region *b) {
+ bool operator() (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
return a->last_layer_op() < b->last_layer_op();
}
};
@@ -106,7 +106,7 @@ Playlist::Playlist (const Playlist& other, string namestr, bool hide)
in_set_state = true;
- for (list<Region*>::iterator x = tmp.begin(); x != tmp.end(); ++x) {
+ for (list<boost::shared_ptr<Region> >::iterator x = tmp.begin(); x != tmp.end(); ++x) {
add_region_internal( (*x), (*x)->position() );
}
@@ -140,8 +140,8 @@ Playlist::Playlist (const Playlist& other, jack_nframes_t start, jack_nframes_t
for (RegionList::const_iterator i = other.regions.begin(); i != other.regions.end(); i++) {
- Region *region;
- Region *new_region;
+ boost::shared_ptr<Region> region;
+ boost::shared_ptr<Region> new_region;
jack_nframes_t offset = 0;
jack_nframes_t position = 0;
jack_nframes_t len = 0;
@@ -183,7 +183,7 @@ Playlist::Playlist (const Playlist& other, jack_nframes_t start, jack_nframes_t
_session.region_name (new_name, region->name(), false);
- new_region = createRegion (*region, offset, len, new_name, region->layer(), region->flags());
+ new_region = RegionFactory::RegionFactory::create (region, offset, len, new_name, region->layer(), region->flags());
add_region_internal (new_region, position, true);
}
@@ -221,7 +221,7 @@ Playlist::copy_regions (RegionList& newlist) const
RegionLock rlock (const_cast<Playlist *> (this));
for (RegionList::const_iterator i = regions.begin(); i != regions.end(); ++i) {
- newlist.push_back (createRegion (**i));
+ newlist.push_back (RegionFactory::RegionFactory::create (*i));
}
}
@@ -266,6 +266,7 @@ Playlist::Playlist (Playlist& pl)
Playlist::~Playlist ()
{
+ /* GoingAway must be emitted by derived classes */
}
void
@@ -336,7 +337,7 @@ Playlist::notify_modified ()
}
void
-Playlist::notify_region_removed (Region *r)
+Playlist::notify_region_removed (boost::shared_ptr<Region> r)
{
if (holding_state ()) {
pending_removals.insert (pending_removals.end(), r);
@@ -351,7 +352,7 @@ Playlist::notify_region_removed (Region *r)
}
void
-Playlist::notify_region_added (Region *r)
+Playlist::notify_region_added (boost::shared_ptr<Region> r)
{
if (holding_state()) {
pending_adds.insert (pending_adds.end(), r);
@@ -381,7 +382,7 @@ Playlist::flush_notifications ()
{
RegionList::iterator r;
RegionList::iterator a;
- set<Region*> dependent_checks_needed;
+ set<boost::shared_ptr<Region> > dependent_checks_needed;
uint32_t n = 0;
if (in_flush) {
@@ -401,7 +402,7 @@ Playlist::flush_notifications ()
for (RegionList::iterator r = pending_bounds.begin(); r != pending_bounds.end(); ++r) {
if (_session.get_layer_model() == Session::MoveAddHigher) {
- timestamp_layer_op (**r);
+ timestamp_layer_op (*r);
}
pending_length = true;
n++;
@@ -418,12 +419,12 @@ Playlist::flush_notifications ()
n++;
}
- for (set<Region*>::iterator x = dependent_checks_needed.begin(); x != dependent_checks_needed.end(); ++x) {
- check_dependents (**x, false);
+ for (set<boost::shared_ptr<Region> >::iterator x = dependent_checks_needed.begin(); x != dependent_checks_needed.end(); ++x) {
+ check_dependents (*x, false);
}
for (r = pending_removals.begin(); r != pending_removals.end(); ++r) {
- remove_dependents (**r);
+ remove_dependents (*r);
RegionRemoved (*r); /* EMIT SIGNAL */
n++;
}
@@ -460,7 +461,7 @@ Playlist::flush_notifications ()
*************************************************************/
void
-Playlist::add_region (const Region& region, jack_nframes_t position, float times, bool with_save)
+Playlist::add_region (boost::shared_ptr<Region> region, jack_nframes_t position, float times, bool with_save)
{
RegionLock rlock (this);
@@ -471,8 +472,8 @@ Playlist::add_region (const Region& region, jack_nframes_t position, float times
jack_nframes_t pos = position;
if (itimes >= 1) {
- add_region_internal (const_cast<Region*>(&region), pos, true);
- pos += region.length();
+ add_region_internal (region, pos, true);
+ pos += region->length();
--itimes;
}
@@ -487,16 +488,16 @@ Playlist::add_region (const Region& region, jack_nframes_t position, float times
*/
for (int i = 0; i < itimes; ++i) {
- Region *copy = createRegion (region);
+ boost::shared_ptr<Region> copy = RegionFactory::create (region);
add_region_internal (copy, pos, true);
- pos += region.length();
+ pos += region->length();
}
if (floor (times) != times) {
- jack_nframes_t length = (jack_nframes_t) floor (region.length() * (times - floor (times)));
+ jack_nframes_t length = (jack_nframes_t) floor (region->length() * (times - floor (times)));
string name;
- _session.region_name (name, region.name(), false);
- Region *sub = createRegion (region, 0, length, name, region.layer(), region.flags());
+ _session.region_name (name, region->name(), false);
+ boost::shared_ptr<Region> sub = RegionFactory::create (region, 0, length, name, region->layer(), region->flags());
add_region_internal (sub, pos, true);
}
@@ -506,22 +507,19 @@ Playlist::add_region (const Region& region, jack_nframes_t position, float times
}
void
-Playlist::add_region_internal (Region *region, jack_nframes_t position, bool delay_sort)
+Playlist::add_region_internal (boost::shared_ptr<Region> region, jack_nframes_t position, bool delay_sort)
{
RegionSortByPosition cmp;
jack_nframes_t old_length = 0;
- // cerr << "adding region " << region->name() << " at " << position << endl;
-
if (!holding_state()) {
old_length = _get_maximum_extent();
}
region->set_playlist (this);
region->set_position (position, this);
- region->lock_sources ();
- timestamp_layer_op (*region);
+ timestamp_layer_op (region);
regions.insert (upper_bound (regions.begin(), regions.end(), region, cmp), region);
@@ -535,7 +533,7 @@ Playlist::add_region_internal (Region *region, jack_nframes_t position, bool del
notify_region_added (region);
if (!holding_state ()) {
- check_dependents (*region, false);
+ check_dependents (region, false);
if (old_length != _get_maximum_extent()) {
notify_length_changed ();
}
@@ -545,12 +543,12 @@ Playlist::add_region_internal (Region *region, jack_nframes_t position, bool del
}
void
-Playlist::replace_region (Region& old, Region& newr, jack_nframes_t pos)
+Playlist::replace_region (boost::shared_ptr<Region> old, boost::shared_ptr<Region> newr, jack_nframes_t pos)
{
RegionLock rlock (this);
- remove_region_internal (&old);
- add_region_internal (&newr, pos);
+ remove_region_internal (old);
+ add_region_internal (newr, pos);
if (!holding_state ()) {
possibly_splice_unlocked ();
@@ -560,7 +558,7 @@ Playlist::replace_region (Region& old, Region& newr, jack_nframes_t pos)
}
void
-Playlist::remove_region (Region *region)
+Playlist::remove_region (boost::shared_ptr<Region> region)
{
RegionLock rlock (this);
remove_region_internal (region);
@@ -573,7 +571,7 @@ Playlist::remove_region (Region *region)
}
int
-Playlist::remove_region_internal (Region *region, bool delay_sort)
+Playlist::remove_region_internal (boost::shared_ptr<Region>region, bool delay_sort)
{
RegionList::iterator i;
jack_nframes_t old_length = 0;
@@ -591,7 +589,7 @@ Playlist::remove_region_internal (Region *region, bool delay_sort)
if (!holding_state ()) {
relayer ();
- remove_dependents (*region);
+ remove_dependents (region);
if (old_length != _get_maximum_extent()) {
notify_length_changed ();
@@ -606,7 +604,7 @@ Playlist::remove_region_internal (Region *region, bool delay_sort)
}
void
-Playlist::get_equivalent_regions (const Region& other, vector<Region*>& results)
+Playlist::get_equivalent_regions (boost::shared_ptr<Region> other, vector<boost::shared_ptr<Region> >& results)
{
for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) {
if (Config->get_use_overlap_equivalency()) {
@@ -620,7 +618,7 @@ Playlist::get_equivalent_regions (const Region& other, vector<Region*>& results)
}
void
-Playlist::get_region_list_equivalent_regions (const Region& other, vector<Region*>& results)
+Playlist::get_region_list_equivalent_regions (boost::shared_ptr<Region> other, vector<boost::shared_ptr<Region> >& results)
{
for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) {
@@ -648,8 +646,8 @@ void
Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cutting, RegionList& thawlist)
{
RegionLock rlock (this);
- Region *region;
- Region *current;
+ boost::shared_ptr<Region> region;
+ boost::shared_ptr<Region> current;
string new_name;
RegionList::iterator tmp;
OverlapType overlap;
@@ -709,7 +707,7 @@ Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cut
/* "middle" ++++++ */
_session.region_name (new_name, current->name(), false);
- region = createRegion (*current, pos2 - pos1, pos3 - pos2, new_name,
+ region = RegionFactory::create (current, pos2 - pos1, pos3 - pos2, new_name,
regions.size(), Region::Flag(current->flags()|Region::Automatic|Region::LeftOfSplit|Region::RightOfSplit));
add_region_internal (region, start, true);
new_regions.push_back (region);
@@ -718,7 +716,7 @@ Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cut
/* "end" ====== */
_session.region_name (new_name, current->name(), false);
- region = createRegion (*current, pos3 - pos1, pos4 - pos3, new_name,
+ region = RegionFactory::create (current, pos3 - pos1, pos4 - pos3, new_name,
regions.size(), Region::Flag(current->flags()|Region::Automatic|Region::RightOfSplit));
add_region_internal (region, end, true);
@@ -748,7 +746,7 @@ Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cut
/* end +++++ */
_session.region_name (new_name, current->name(), false);
- region = createRegion (*current, pos2 - pos1, pos4 - pos2, new_name, (layer_t) regions.size(),
+ region = RegionFactory::create (current, pos2 - pos1, pos4 - pos2, new_name, (layer_t) regions.size(),
Region::Flag(current->flags()|Region::Automatic|Region::LeftOfSplit));
add_region_internal (region, start, true);
new_regions.push_back (region);
@@ -782,7 +780,7 @@ Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cut
/* front **** */
_session.region_name (new_name, current->name(), false);
- region = createRegion (*current, 0, pos3 - pos1, new_name,
+ region = RegionFactory::create (current, 0, pos3 - pos1, new_name,
regions.size(), Region::Flag(current->flags()|Region::Automatic|Region::RightOfSplit));
add_region_internal (region, pos1, true);
new_regions.push_back (region);
@@ -822,7 +820,7 @@ Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cut
in_partition = false;
for (RegionList::iterator i = new_regions.begin(); i != new_regions.end(); ++i) {
- check_dependents (**i, false);
+ check_dependents (*i, false);
}
}
@@ -943,7 +941,7 @@ Playlist::paste (Playlist& other, jack_nframes_t position, float times)
while (itimes--) {
for (RegionList::iterator i = other.regions.begin(); i != other.regions.end(); ++i) {
- Region *copy_of_region = createRegion (**i);
+ boost::shared_ptr<Region> copy_of_region = RegionFactory::create (*i);
/* put these new regions on top of all existing ones, but preserve
the ordering they had in the original playlist.
@@ -973,7 +971,7 @@ Playlist::paste (Playlist& other, jack_nframes_t position, float times)
void
-Playlist::duplicate (Region& region, jack_nframes_t position, float times)
+Playlist::duplicate (boost::shared_ptr<Region> region, jack_nframes_t position, float times)
{
times = fabs (times);
@@ -982,16 +980,16 @@ Playlist::duplicate (Region& region, jack_nframes_t position, float times)
jack_nframes_t pos = position;
while (itimes--) {
- Region *copy = createRegion (region);
+ boost::shared_ptr<Region> copy = RegionFactory::create (region);
add_region_internal (copy, pos, true);
- pos += region.length();
+ pos += region->length();
}
if (floor (times) != times) {
- jack_nframes_t length = (jack_nframes_t) floor (region.length() * (times - floor (times)));
+ jack_nframes_t length = (jack_nframes_t) floor (region->length() * (times - floor (times)));
string name;
- _session.region_name (name, region.name(), false);
- Region *sub = createRegion (region, 0, length, name, region.layer(), region.flags());
+ _session.region_name (name, region->name(), false);
+ boost::shared_ptr<Region> sub = RegionFactory::create (region, 0, length, name, region->layer(), region->flags());
add_region_internal (sub, pos, true);
}
@@ -999,40 +997,40 @@ Playlist::duplicate (Region& region, jack_nframes_t position, float times)
}
void
-Playlist::split_region (Region& region, jack_nframes_t playlist_position)
+Playlist::split_region (boost::shared_ptr<Region> region, jack_nframes_t playlist_position)
{
RegionLock rl (this);
- if (!region.covers (playlist_position)) {
+ if (!region->covers (playlist_position)) {
return;
}
- if (region.position() == playlist_position ||
- region.last_frame() == playlist_position) {
+ if (region->position() == playlist_position ||
+ region->last_frame() == playlist_position) {
return;
}
- Region *left;
- Region *right;
+ boost::shared_ptr<Region> left;
+ boost::shared_ptr<Region> right;
jack_nframes_t before;
jack_nframes_t after;
string before_name;
string after_name;
- before = playlist_position - region.position();
- after = region.length() - before;
+ before = playlist_position - region->position();
+ after = region->length() - before;
- _session.region_name (before_name, region.name(), false);
- left = createRegion (region, 0, before, before_name, region.layer(), Region::Flag (region.flags()|Region::LeftOfSplit));
+ _session.region_name (before_name, region->name(), false);
+ left = RegionFactory::create (region, 0, before, before_name, region->layer(), Region::Flag (region->flags()|Region::LeftOfSplit));
- _session.region_name (after_name, region.name(), false);
- right = createRegion (region, before, after, after_name, region.layer(), Region::Flag (region.flags()|Region::RightOfSplit));
+ _session.region_name (after_name, region->name(), false);
+ right = RegionFactory::create (region, before, after, after_name, region->layer(), Region::Flag (region->flags()|Region::RightOfSplit));
- add_region_internal (left, region.position(), true);
- add_region_internal (right, region.position() + before);
+ add_region_internal (left, region->position(), true);
+ add_region_internal (right, region->position() + before);
- uint64_t orig_layer_op = region.last_layer_op();
+ uint64_t orig_layer_op = region->last_layer_op();
for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) {
if ((*i)->last_layer_op() > orig_layer_op) {
(*i)->set_last_layer_op( (*i)->last_layer_op() + 1 );
@@ -1044,9 +1042,9 @@ Playlist::split_region (Region& region, jack_nframes_t playlist_position)
layer_op_counter++;
- finalize_split_region (&region, left, right);
+ finalize_split_region (region, left, right);
- if (remove_region_internal (&region, true)) {
+ if (remove_region_internal (region, true)) {
return;
}
@@ -1110,7 +1108,7 @@ Playlist::core_splice ()
}
void
-Playlist::region_bounds_changed (Change what_changed, Region *region)
+Playlist::region_bounds_changed (Change what_changed, boost::shared_ptr<Region> region)
{
if (in_set_state || _splicing || _nudging) {
return;
@@ -1134,8 +1132,7 @@ Playlist::region_bounds_changed (Change what_changed, Region *region)
}
regions.erase (i);
- regions.insert (upper_bound (regions.begin(), regions.end(), region, cmp),
- region);
+ regions.insert (upper_bound (regions.begin(), regions.end(), region, cmp), region);
}
@@ -1146,11 +1143,11 @@ Playlist::region_bounds_changed (Change what_changed, Region *region)
} else {
if (_session.get_layer_model() == Session::MoveAddHigher) {
/* it moved or changed length, so change the timestamp */
- timestamp_layer_op (*region);
+ timestamp_layer_op (region);
}
possibly_splice ();
- check_dependents (*region, false);
+ check_dependents (region, false);
notify_length_changed ();
relayer ();
}
@@ -1158,7 +1155,7 @@ Playlist::region_bounds_changed (Change what_changed, Region *region)
}
void
-Playlist::region_changed_proxy (Change what_changed, Region* region)
+Playlist::region_changed_proxy (Change what_changed, boost::shared_ptr<Region> region)
{
/* this makes a virtual call to the right kind of playlist ... */
@@ -1166,7 +1163,7 @@ Playlist::region_changed_proxy (Change what_changed, Region* region)
}
bool
-Playlist::region_changed (Change what_changed, Region* region)
+Playlist::region_changed (Change what_changed, boost::shared_ptr<Region> region)
{
Change our_interests = Change (Region::MuteChanged|Region::LayerChanged|Region::OpacityChanged);
bool save = false;
@@ -1183,7 +1180,7 @@ Playlist::region_changed (Change what_changed, Region* region)
if ((what_changed & Region::MuteChanged) &&
!(what_changed & Change (ARDOUR::PositionChanged|ARDOUR::LengthChanged))) {
- check_dependents (*region, false);
+ check_dependents (region, false);
}
if (what_changed & our_interests) {
@@ -1195,7 +1192,7 @@ Playlist::region_changed (Change what_changed, Region* region)
}
void
-Playlist::clear (bool with_delete, bool with_save)
+Playlist::clear (bool with_save)
{
RegionList::iterator i;
RegionList tmp;
@@ -1208,9 +1205,6 @@ Playlist::clear (bool with_delete, bool with_save)
for (i = tmp.begin(); i != tmp.end(); ++i) {
notify_region_removed (*i);
- if (with_delete) {
- delete *i;
- }
}
if (with_save) {
@@ -1230,14 +1224,14 @@ Playlist::regions_at (jack_nframes_t frame)
return find_regions_at (frame);
}
-Region *
+boost::shared_ptr<Region>
Playlist::top_region_at (jack_nframes_t frame)
{
RegionLock rlock (this);
RegionList *rlist = find_regions_at (frame);
- Region *region = 0;
-
+ boost::shared_ptr<Region> region;
+
if (rlist->size()) {
RegionSortByLayer cmp;
rlist->sort (cmp);
@@ -1278,18 +1272,17 @@ Playlist::regions_touched (jack_nframes_t start, jack_nframes_t end)
}
-Region*
-
+boost::shared_ptr<Region>
Playlist::find_next_region (jack_nframes_t frame, RegionPoint point, int dir)
{
RegionLock rlock (this);
- Region* ret = 0;
+ boost::shared_ptr<Region> ret;
jack_nframes_t closest = max_frames;
for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) {
jack_nframes_t distance;
- Region* r = (*i);
+ boost::shared_ptr<Region> r = (*i);
jack_nframes_t pos = 0;
switch (point) {
@@ -1354,10 +1347,10 @@ Playlist::set_state (const XMLNode& node)
XMLPropertyList plist;
XMLPropertyConstIterator piter;
XMLProperty *prop;
- Region *region;
+ boost::shared_ptr<Region> region;
string region_name;
- clear (false, false);
+ clear (false);
if (node.name() != "Playlist") {
in_set_state = false;
@@ -1387,12 +1380,12 @@ Playlist::set_state (const XMLNode& node)
if (child->name() == "Region") {
- if ((region = createRegion (_session, *child, true)) == 0) {
+ if ((region = RegionFactory::create (_session, *child, true)) == 0) {
error << _("Playlist: cannot create region from state file") << endmsg;
continue;
}
- add_region (*region, region->position(), 1.0, false);
+ add_region (region, region->position(), 1.0, false);
// So that layer_op ordering doesn't get screwed up
region->set_last_layer_op( region->layer());
@@ -1406,7 +1399,7 @@ Playlist::set_state (const XMLNode& node)
*/
for (RegionList::iterator r = regions.begin(); r != regions.end(); ++r) {
- check_dependents (**r, false);
+ check_dependents (*r, false);
}
in_set_state = false;
@@ -1589,10 +1582,10 @@ Playlist::relayer ()
/* XXX these layer functions are all deprecated */
void
-Playlist::raise_region (Region& region)
+Playlist::raise_region (boost::shared_ptr<Region> region)
{
uint32_t rsz = regions.size();
- layer_t target = region.layer() + 1U;
+ layer_t target = region->layer() + 1U;
if (target >= rsz) {
/* its already at the effective top */
@@ -1603,20 +1596,20 @@ Playlist::raise_region (Region& region)
}
void
-Playlist::lower_region (Region& region)
+Playlist::lower_region (boost::shared_ptr<Region> region)
{
- if (region.layer() == 0) {
+ if (region->layer() == 0) {
/* its already at the bottom */
return;
}
- layer_t target = region.layer() - 1U;
+ layer_t target = region->layer() - 1U;
move_region_to_layer (target, region, -1);
}
void
-Playlist::raise_region_to_top (Region& region)
+Playlist::raise_region_to_top (boost::shared_ptr<Region> region)
{
/* does nothing useful if layering mode is later=higher */
if ((_session.get_layer_model() == Session::MoveAddHigher) ||
@@ -1627,21 +1620,21 @@ Playlist::raise_region_to_top (Region& region)
}
void
-Playlist::lower_region_to_bottom (Region& region)
+Playlist::lower_region_to_bottom (boost::shared_ptr<Region> region)
{
/* does nothing useful if layering mode is later=higher */
if ((_session.get_layer_model() == Session::MoveAddHigher) ||
(_session.get_layer_model() == Session::AddHigher)) {
- region.set_last_layer_op (0);
+ region->set_last_layer_op (0);
relayer ();
}
}
int
-Playlist::move_region_to_layer (layer_t target_layer, Region& region, int dir)
+Playlist::move_region_to_layer (layer_t target_layer, boost::shared_ptr<Region> region, int dir)
{
RegionList::iterator i;
- typedef pair<Region*,layer_t> LayerInfo;
+ typedef pair<boost::shared_ptr<Region>,layer_t> LayerInfo;
list<LayerInfo> layerinfo;
layer_t dest;
@@ -1650,7 +1643,7 @@ Playlist::move_region_to_layer (layer_t target_layer, Region& region, int dir)
for (i = regions.begin(); i != regions.end(); ++i) {
- if (&region == *i) {
+ if (region == *i) {
continue;
}
@@ -1660,7 +1653,7 @@ Playlist::move_region_to_layer (layer_t target_layer, Region& region, int dir)
down 1
*/
- if ((*i)->layer() > region.layer() && (*i)->layer() <= target_layer) {
+ if ((*i)->layer() > region->layer() && (*i)->layer() <= target_layer) {
dest = (*i)->layer() - 1;
} else {
/* not affected */
@@ -1672,7 +1665,7 @@ Playlist::move_region_to_layer (layer_t target_layer, Region& region, int dir)
up 1
*/
- if ((*i)->layer() < region.layer() && (*i)->layer() >= target_layer) {
+ if ((*i)->layer() < region->layer() && (*i)->layer() >= target_layer) {
dest = (*i)->layer() + 1;
} else {
/* not affected */
@@ -1695,12 +1688,12 @@ Playlist::move_region_to_layer (layer_t target_layer, Region& region, int dir)
x->first->set_layer (x->second);
}
- region.set_layer (target_layer);
+ region->set_layer (target_layer);
/* now check all dependents */
for (list<LayerInfo>::iterator x = layerinfo.begin(); x != layerinfo.end(); ++x) {
- check_dependents (*(x->first), false);
+ check_dependents (x->first, false);
}
check_dependents (region, false);
@@ -1755,19 +1748,20 @@ Playlist::nudge_after (jack_nframes_t start, jack_nframes_t distance, bool forwa
}
-Region*
+boost::shared_ptr<Region>
Playlist::find_region (const ID& id) const
{
RegionLock rlock (const_cast<Playlist*> (this));
RegionList::const_iterator i;
-
+ boost::shared_ptr<Region> ret;
+
for (i = regions.begin(); i != regions.end(); ++i) {
if ((*i)->id() == id) {
- return (*i);
+ ret = *i;
}
}
- return 0;
+ return ret;
}
void
@@ -1781,7 +1775,7 @@ Playlist::save_state (std::string why)
void
Playlist::dump () const
{
- Region *r;
+ boost::shared_ptr<Region> r;
cerr << "Playlist \"" << _name << "\" " << endl
<< regions.size() << " regions "
@@ -1806,11 +1800,11 @@ Playlist::set_frozen (bool yn)
}
void
-Playlist::timestamp_layer_op (Region& region)
+Playlist::timestamp_layer_op (boost::shared_ptr<Region> region)
{
// struct timeval tv;
// gettimeofday (&tv, 0);
- region.set_last_layer_op (++layer_op_counter);
+ region->set_last_layer_op (++layer_op_counter);
}
void