if ((ar = boost::dynamic_pointer_cast<const AudioRegion>(region)) != 0) {
- AudioRegion* arn = new AudioRegion (ar, 0, true);
- boost_debug_shared_ptr_mark_interesting (arn, "Region");
-
- boost::shared_ptr<AudioRegion> arp (arn);
- ret = boost::static_pointer_cast<Region> (arp);
+ ret = boost::shared_ptr<Region> (new AudioRegion (ar, 0));
} else if ((mr = boost::dynamic_pointer_cast<const MidiRegion>(region)) != 0) {
- MidiRegion* mrn = new MidiRegion (mr, 0, true);
- boost::shared_ptr<MidiRegion> mrp (mrn);
- ret = boost::static_pointer_cast<Region> (mrp);
+ ret = boost::shared_ptr<Region> (new MidiRegion (mr, 0));
} else {
fatal << _("programming error: RegionFactory::create() called with unknown Region type")
map_add (ret);
/* pure copy constructor - no property list */
- /* pure copy constructor - no CheckNewRegion emitted */
if (announce) {
CheckNewRegion (ret);
}
}
-
+#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
+ boost_debug_shared_ptr_mark_interesting (ret.get(), "Region");
+#endif
return ret;
}
-boost::shared_ptr<Region>
-RegionFactory::create (boost::shared_ptr<Region> region, frameoffset_t offset, const PropertyList& plist, bool announce)
-{
- return create (region, offset, true, plist, announce);
-}
-
boost::shared_ptr<Region>
RegionFactory::create (boost::shared_ptr<Region> region, const PropertyList& plist, bool announce)
{
- return create (region, 0, false, plist, announce);
+ boost::shared_ptr<Region> ret;
+ boost::shared_ptr<const AudioRegion> other_a;
+ boost::shared_ptr<const MidiRegion> other_m;
+
+ if ((other_a = boost::dynamic_pointer_cast<AudioRegion>(region)) != 0) {
+
+ ret = boost::shared_ptr<Region> (new AudioRegion (other_a));
+
+ } else if ((other_m = boost::dynamic_pointer_cast<MidiRegion>(region)) != 0) {
+
+ ret = boost::shared_ptr<Region> (new MidiRegion (other_m));
+
+ } else {
+ fatal << _("programming error: RegionFactory::create() called with unknown Region type")
+ << endmsg;
+ /*NOTREACHED*/
+ return boost::shared_ptr<Region>();
+ }
+
+ if (ret) {
+ ret->apply_changes (plist);
+ map_add (ret);
+
+ if (announce) {
+ CheckNewRegion (ret);
+ }
+ }
+
+#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
+ boost_debug_shared_ptr_mark_interesting (ret.get(), "Region");
+#endif
+ return ret;
}
boost::shared_ptr<Region>
-RegionFactory::create (boost::shared_ptr<Region> region, frameoffset_t offset, bool offset_relative, const PropertyList& plist, bool announce)
+RegionFactory::create (boost::shared_ptr<Region> region, frameoffset_t offset, const PropertyList& plist, bool announce)
{
boost::shared_ptr<Region> ret;
boost::shared_ptr<const AudioRegion> other_a;
if ((other_a = boost::dynamic_pointer_cast<AudioRegion>(region)) != 0) {
- AudioRegion* ar = new AudioRegion (other_a, offset, offset_relative);
- boost_debug_shared_ptr_mark_interesting (ar, "Region");
-
- boost::shared_ptr<AudioRegion> arp (ar);
- ret = boost::static_pointer_cast<Region> (arp);
-
+ ret = boost::shared_ptr<Region> (new AudioRegion (other_a, offset));
+
} else if ((other_m = boost::dynamic_pointer_cast<MidiRegion>(region)) != 0) {
- MidiRegion* mr = new MidiRegion (other_m, offset, offset_relative);
- boost::shared_ptr<MidiRegion> mrp (mr);
- ret = boost::static_pointer_cast<Region> (mrp);
+ ret = boost::shared_ptr<Region> (new MidiRegion (other_m, offset));
} else {
fatal << _("programming error: RegionFactory::create() called with unknown Region type")
}
}
+#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
+ boost_debug_shared_ptr_mark_interesting (ret.get(), "Region");
+#endif
return ret;
}
// XXX use me in caller where plist is setup, this is start i think srcs.front()->length (srcs.front()->timeline_position())
- AudioRegion* ar = new AudioRegion (other, srcs);
- boost_debug_shared_ptr_mark_interesting (ar, "Region");
-
- boost::shared_ptr<AudioRegion> arp (ar);
- ret = boost::static_pointer_cast<Region> (arp);
+ ret = boost::shared_ptr<Region> (new AudioRegion (other, srcs));
} else {
fatal << _("programming error: RegionFactory::create() called with unknown Region type")
}
if (ret) {
-
ret->apply_changes (plist);
map_add (ret);
}
}
+#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
+ boost_debug_shared_ptr_mark_interesting (ret.get(), "Region");
+#endif
return ret;
-
}
boost::shared_ptr<Region>
if ((as = boost::dynamic_pointer_cast<AudioSource>(srcs[0])) != 0) {
- AudioRegion* ar = new AudioRegion (srcs);
- boost_debug_shared_ptr_mark_interesting (ar, "Region");
-
- boost::shared_ptr<AudioRegion> arp (ar);
- ret = boost::static_pointer_cast<Region> (arp);
+ ret = boost::shared_ptr<Region> (new AudioRegion (srcs));
} else if ((ms = boost::dynamic_pointer_cast<MidiSource>(srcs[0])) != 0) {
- MidiRegion* mr = new MidiRegion (srcs);
- boost_debug_shared_ptr_mark_interesting (mr, "Region");
- boost::shared_ptr<MidiRegion> mrp (mr);
- ret = boost::static_pointer_cast<Region> (mrp);
+ ret = boost::shared_ptr<Region> (new MidiRegion (srcs));
+
}
if (ret) {
-
ret->apply_changes (plist);
map_add (ret);
}
}
+#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
+ boost_debug_shared_ptr_mark_interesting (ret.get(), "Region");
+#endif
return ret;
}
if (srcs[0]->type() == DataType::AUDIO) {
- AudioRegion* ar = new AudioRegion (srcs);
- boost_debug_shared_ptr_mark_interesting (ar, "Region");
-
- boost::shared_ptr<AudioRegion> arp (ar);
- ret = boost::static_pointer_cast<Region> (arp);
+ ret = boost::shared_ptr<Region> (new AudioRegion (srcs));
} else if (srcs[0]->type() == DataType::MIDI) {
- MidiRegion* mr = new MidiRegion (srcs);
+ ret = boost::shared_ptr<Region> (new MidiRegion (srcs));
- boost::shared_ptr<MidiRegion> mrp (mr);
- ret = boost::static_pointer_cast<Region> (mrp);
}
if (ret) {
-
if (ret->set_state (node, Stateful::loading_state_version)) {
ret.reset ();
} else {
}
}
+#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
+ boost_debug_shared_ptr_mark_interesting (ret.get(), "Region");
+#endif
return ret;
}
}
}
}
+
+void
+RegionFactory::remove_regions_using_source (boost::shared_ptr<Source> src)
+{
+ Glib::Mutex::Lock lm (region_map_lock);
+
+ for (RegionMap::iterator i = region_map.begin(); i != region_map.end(); ++i) {
+ if (i->second->uses_source (src)) {
+ region_map.erase (i);
+ }
+ }
+}