X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsource.cc;h=16cc603089150c396434e1c2566419677ed1b932;hb=5a3a2fad4fd1c217a5771caa64efe92a0b305275;hp=7ade8a8573fdd7db1187520cd62cd6b3c0057dfc;hpb=ffdf5ada616d285fafb58f45c2e3d37b212a328a;p=ardour.git diff --git a/libs/ardour/source.cc b/libs/ardour/source.cc index 7ade8a8573..16cc603089 100644 --- a/libs/ardour/source.cc +++ b/libs/ardour/source.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -34,6 +33,7 @@ #include #include +#include #include "i18n.h" @@ -46,13 +46,17 @@ Source::Source (Session& s, string name) : _session (s) { _name = name; + _analysed = false; _timestamp = 0; + _in_use = 0; } Source::Source (Session& s, const XMLNode& node) : _session (s) { _timestamp = 0; + _analysed = false; + _in_use = 0; if (set_state (node)) { throw failed_constructor(); @@ -106,3 +110,67 @@ Source::set_state (const XMLNode& node) return 0; } +void +Source::add_playlist (boost::shared_ptr pl) +{ + std::pair res; + std::pair, uint32_t> newpair (pl, 1); + Glib::Mutex::Lock lm (playlist_lock); + + res = _playlists.insert (newpair); + + if (!res.second) { + /* it already existed, bump count */ + res.first->second++; + } + + pl->GoingAway.connect (bind (mem_fun (*this, &Source::remove_playlist), boost::weak_ptr (pl))); +} + +void +Source::remove_playlist (boost::weak_ptr wpl) +{ + boost::shared_ptr pl (wpl.lock()); + + if (!pl) { + return; + } + + PlaylistMap::iterator x; + Glib::Mutex::Lock lm (playlist_lock); + + if ((x = _playlists.find (pl)) != _playlists.end()) { + if (x->second > 1) { + x->second--; + } else { + _playlists.erase (x); + } + } +} + +uint32_t +Source::used () const +{ + return _playlists.size(); +} + +bool +Source::has_been_analysed() const +{ + Glib::Mutex::Lock lm (_analysis_lock); + return _analysed; +} + +void +Source::set_been_analysed (bool yn) +{ + { + Glib::Mutex::Lock lm (_analysis_lock); + _analysed = yn; + } + + if (yn) { + AnalysisChanged(); // EMIT SIGNAL + } +} +