summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/diskstream.h8
-rw-r--r--libs/ardour/ardour/playlist.h3
-rwxr-xr-xlibs/ardour/ardour/public_diskstream.h4
-rw-r--r--libs/ardour/ardour/region.h2
-rw-r--r--libs/ardour/ardour/region_factory.h4
-rw-r--r--libs/ardour/ardour/session.h3
-rw-r--r--libs/ardour/ardour/session_playlists.h3
-rw-r--r--libs/ardour/ardour/source.h12
-rw-r--r--libs/ardour/ardour/track.h3
9 files changed, 30 insertions, 12 deletions
diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h
index c089a39736..d0d2bcbc36 100644
--- a/libs/ardour/ardour/diskstream.h
+++ b/libs/ardour/ardour/diskstream.h
@@ -45,7 +45,7 @@ namespace ARDOUR {
class IO;
class Playlist;
class Processor;
-class Region;
+class Source;
class Session;
class Track;
class Location;
@@ -134,12 +134,10 @@ class Diskstream : public SessionObject, public PublicDiskstream
int set_loop (Location *loc);
- std::list<boost::shared_ptr<Region> >& last_capture_regions () { return _last_capture_regions; }
+ std::list<boost::shared_ptr<Source> >& last_capture_sources () { return _last_capture_sources; }
void handle_input_change (IOChange, void *src);
- void remove_region_from_last_capture (boost::weak_ptr<Region> wregion);
-
void move_processor_automation (boost::weak_ptr<Processor>,
std::list<Evoral::RangeMove<framepos_t> > const &);
@@ -228,7 +226,7 @@ class Diskstream : public SessionObject, public PublicDiskstream
virtual bool realtime_set_speed (double, bool global_change);
- std::list<boost::shared_ptr<Region> > _last_capture_regions;
+ std::list<boost::shared_ptr<Source> > _last_capture_sources;
virtual int use_pending_capture_data (XMLNode& node) = 0;
diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h
index 4b42fc0bd6..7afc074b4d 100644
--- a/libs/ardour/ardour/playlist.h
+++ b/libs/ardour/ardour/playlist.h
@@ -65,7 +65,8 @@ class RegionListProperty : public PBD::SequenceProperty<std::list<boost::shared_
RegionListProperty (Playlist&);
boost::shared_ptr<Region> lookup_id (const PBD::ID& id);
- void diff (PBD::PropertyList& undo, PBD::PropertyList& redo) const;
+ void diff (PBD::PropertyList& undo, PBD::PropertyList& redo, Command*) const;
+ bool involves (boost::shared_ptr<Region>);
private:
friend class Playlist;
diff --git a/libs/ardour/ardour/public_diskstream.h b/libs/ardour/ardour/public_diskstream.h
index c31e88a79b..9e25cb24c6 100755
--- a/libs/ardour/ardour/public_diskstream.h
+++ b/libs/ardour/ardour/public_diskstream.h
@@ -23,7 +23,7 @@
namespace ARDOUR {
class Playlist;
-class Region;
+class Source;
class Location;
/** Public interface to a Diskstream */
@@ -34,7 +34,7 @@ public:
virtual boost::shared_ptr<Playlist> playlist () = 0;
virtual void monitor_input (bool) = 0;
virtual bool destructive () const = 0;
- virtual std::list<boost::shared_ptr<Region> > & last_capture_regions () = 0;
+ virtual std::list<boost::shared_ptr<Source> > & last_capture_sources () = 0;
virtual void set_capture_offset () = 0;
virtual void reset_write_sources (bool, bool force = false) = 0;
virtual float playback_buffer_load () const = 0;
diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h
index 2cf9bab97b..a30bb8660c 100644
--- a/libs/ardour/ardour/region.h
+++ b/libs/ardour/ardour/region.h
@@ -270,6 +270,8 @@ class Region
return _pending_explicit_relayer;
}
+ void drop_sources ();
+
protected:
friend class RegionFactory;
diff --git a/libs/ardour/ardour/region_factory.h b/libs/ardour/ardour/region_factory.h
index c9f387f172..459699d810 100644
--- a/libs/ardour/ardour/region_factory.h
+++ b/libs/ardour/ardour/region_factory.h
@@ -21,6 +21,7 @@
#define __ardour_region_factory_h__
#include <map>
+#include <set>
#include <glibmm/thread.h>
#include "pbd/id.h"
@@ -78,7 +79,10 @@ class RegionFactory {
/** create a region with specified sources @param srcs and XML state */
static boost::shared_ptr<Region> create (SourceList& srcs, const XMLNode&);
+ static void get_regions_using_source (boost::shared_ptr<Source>, std::set<boost::shared_ptr<Region> >& );
+
static void map_remove (boost::shared_ptr<Region>);
+ static void map_remove_with_equivalents (boost::shared_ptr<Region>);
static void delete_all_regions ();
static const RegionMap& regions() { return region_map; }
static uint32_t nregions ();
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index f7692e09cb..bca65c88e4 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -512,8 +512,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
int cleanup_sources (CleanupReport&);
int cleanup_trash_sources (CleanupReport&);
- int destroy_region (boost::shared_ptr<Region>);
- int destroy_regions (std::list<boost::shared_ptr<Region> >);
+ int destroy_sources (std::list<boost::shared_ptr<Source> >);
int remove_last_capture ();
diff --git a/libs/ardour/ardour/session_playlists.h b/libs/ardour/ardour/session_playlists.h
index d654595d60..1c83a312a5 100644
--- a/libs/ardour/ardour/session_playlists.h
+++ b/libs/ardour/ardour/session_playlists.h
@@ -53,6 +53,7 @@ public:
template<class T> void foreach (T *obj, void (T::*func)(boost::shared_ptr<Playlist>));
void get (std::vector<boost::shared_ptr<Playlist> >&);
void unassigned (std::list<boost::shared_ptr<Playlist> > & list);
+ void destroy_region (boost::shared_ptr<Region>);
private:
friend class Session;
@@ -69,7 +70,7 @@ private:
int load (Session &, const XMLNode&);
int load_unused (Session &, const XMLNode&);
boost::shared_ptr<Playlist> XMLPlaylistFactory (Session &, const XMLNode&);
-
+
mutable Glib::Mutex lock;
typedef std::set<boost::shared_ptr<Playlist> > List;
List playlists;
diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h
index bf92e5a6e4..16a762eb94 100644
--- a/libs/ardour/ardour/source.h
+++ b/libs/ardour/ardour/source.h
@@ -23,6 +23,8 @@
#include <string>
#include <set>
+#include <glib.h>
+
#include <boost/utility.hpp>
#include "pbd/statefuldestructible.h"
@@ -102,6 +104,15 @@ class Source : public SessionObject
Glib::Mutex& mutex() { return _lock; }
Flag flags() const { return _flags; }
+ void inc_use_count () { g_atomic_int_inc (&_use_count); }
+ void dec_use_count () {
+ gint oldval = g_atomic_int_exchange_and_add (&_use_count, -1);
+ assert (oldval > 0);
+ }
+
+ int use_count() const { return g_atomic_int_get (&_use_count); }
+ bool used() const { return use_count() > 0; }
+
protected:
DataType _type;
Flag _flags;
@@ -111,6 +122,7 @@ class Source : public SessionObject
mutable Glib::Mutex _lock;
mutable Glib::Mutex _analysis_lock;
Glib::Mutex _playlist_lock;
+ gint _use_count; /* atomic */
private:
void fix_writable_flags ();
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index ac948f12df..d72d29e563 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -29,6 +29,7 @@ namespace ARDOUR {
class Session;
class Playlist;
class RouteGroup;
+class Source;
class Region;
class Diskstream;
@@ -100,7 +101,7 @@ class Track : public Route, public PublicDiskstream
boost::shared_ptr<Playlist> playlist ();
void monitor_input (bool);
bool destructive () const;
- std::list<boost::shared_ptr<Region> > & last_capture_regions ();
+ std::list<boost::shared_ptr<Source> > & last_capture_sources ();
void set_capture_offset ();
void reset_write_sources (bool, bool force = false);
float playback_buffer_load () const;