diff options
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/diskstream.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/playlist.h | 3 | ||||
-rwxr-xr-x | libs/ardour/ardour/public_diskstream.h | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/region.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/region_factory.h | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/session_playlists.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/source.h | 12 | ||||
-rw-r--r-- | libs/ardour/ardour/track.h | 3 |
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; |