diff options
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/audio_diskstream.h | 7 | ||||
-rw-r--r-- | libs/ardour/ardour/audio_track.h | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/audioengine.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/diskstream.h | 21 | ||||
-rw-r--r-- | libs/ardour/ardour/route.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 18 | ||||
-rw-r--r-- | libs/ardour/ardour/track.h | 6 |
7 files changed, 26 insertions, 40 deletions
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h index 0cc2079d8e..18f8328cfd 100644 --- a/libs/ardour/ardour/audio_diskstream.h +++ b/libs/ardour/ardour/audio_diskstream.h @@ -59,12 +59,10 @@ class AudioDiskstream : public Diskstream public: AudioDiskstream (Session &, const string& name, Diskstream::Flag f = Recordable); AudioDiskstream (Session &, const XMLNode&); + ~AudioDiskstream(); const PBD::ID& id() const { return _id; } - // FIXME - AudioDiskstream& ref() { _refcnt++; return *this; } - float playback_buffer_load() const; float capture_buffer_load() const; @@ -176,9 +174,6 @@ class AudioDiskstream : public Diskstream private: - /* use unref() to destroy a diskstream */ - ~AudioDiskstream(); - struct ChannelInfo { Sample *playback_wrap_buffer; diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h index 9892179085..33010dc880 100644 --- a/libs/ardour/ardour/audio_track.h +++ b/libs/ardour/ardour/audio_track.h @@ -46,7 +46,7 @@ class AudioTrack : public Track int silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t offset, bool can_record, bool rec_monitors_input); - AudioDiskstream& audio_diskstream() const; + boost::shared_ptr<AudioDiskstream> audio_diskstream() const; int use_diskstream (string name); int use_diskstream (const PBD::ID& id); @@ -71,7 +71,7 @@ class AudioTrack : public Track uint32_t n_process_buffers (); private: - int set_diskstream (AudioDiskstream&, void *); + int set_diskstream (boost::shared_ptr<AudioDiskstream>, void *); int deprecated_use_diskstream_connections (); void set_state_part_two (); void set_state_part_three (); diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index e7500fc7a2..00a0ce6b19 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -31,6 +31,8 @@ #include <glibmm/thread.h> +#include <pbd/rcu.h> + #include <ardour/ardour.h> #include <jack/jack.h> #include <jack/transport.h> @@ -189,7 +191,6 @@ class AudioEngine : public sigc::trackable ARDOUR::Session *session; jack_client_t *_jack; std::string jack_client_name; - Glib::Mutex port_lock; Glib::Mutex _process_lock; Glib::Mutex session_remove_lock; Glib::Cond session_removed; @@ -208,7 +209,7 @@ class AudioEngine : public sigc::trackable int _usecs_per_cycle; typedef std::set<Port*> Ports; - Ports ports; + SerializedRCUManager<Ports> ports; int process_callback (jack_nframes_t nframes); void remove_all_ports (); diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h index e0202a4fae..bcd418b452 100644 --- a/libs/ardour/ardour/diskstream.h +++ b/libs/ardour/ardour/diskstream.h @@ -34,6 +34,7 @@ #include <pbd/fastlog.h> #include <pbd/ringbufferNPT.h> #include <pbd/stateful.h> +#include <pbd/destructible.h> #include <ardour/ardour.h> #include <ardour/configuration.h> @@ -43,7 +44,6 @@ #include <ardour/port.h> #include <ardour/utils.h> - struct tm; namespace ARDOUR { @@ -54,7 +54,7 @@ class Session; class Playlist; class IO; -class Diskstream : public Stateful, public sigc::trackable + class Diskstream : public Stateful, public sigc::trackable, public PBD::Destructible { public: enum Flag { @@ -63,16 +63,16 @@ class Diskstream : public Stateful, public sigc::trackable Destructive = 0x4 }; + Diskstream (Session &, const string& name, Flag f = Recordable); + Diskstream (Session &, const XMLNode&); + virtual ~Diskstream(); + string name () const { return _name; } virtual int set_name (string str); ARDOUR::IO* io() const { return _io; } void set_io (ARDOUR::IO& io); - virtual Diskstream& ref() { _refcnt++; return *this; } - void unref() { if (_refcnt) _refcnt--; if (_refcnt == 0) delete this; } - uint32_t refcnt() const { return _refcnt; } - virtual float playback_buffer_load() const = 0; virtual float capture_buffer_load() const = 0; @@ -148,15 +148,11 @@ class Diskstream : public Stateful, public sigc::trackable static sigc::signal<void> DiskOverrun; static sigc::signal<void> DiskUnderrun; - static sigc::signal<void,Diskstream*> DiskstreamCreated; // XXX use a ref with sigc2 static sigc::signal<void,list<Source*>*> DeleteSources; protected: friend class Session; - Diskstream (Session &, const string& name, Flag f = Recordable); - Diskstream (Session &, const XMLNode&); - /* the Session is the only point of access for these because they require * that the Session is "inactive" while they are called. */ @@ -187,9 +183,6 @@ class Diskstream : public Stateful, public sigc::trackable //private: - /** Use unref() to destroy a diskstream */ - virtual ~Diskstream(); - enum TransitionType { CaptureStart = 0, CaptureEnd @@ -304,8 +297,6 @@ class Diskstream : public Stateful, public sigc::trackable jack_nframes_t scrub_buffer_size; jack_nframes_t scrub_offset; - uint32_t _refcnt; - sigc::connection ports_created_c; sigc::connection plmod_connection; sigc::connection plstate_connection; diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index d1db818e40..ff7aa6184c 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -35,6 +35,7 @@ #include <pbd/undo.h> #include <pbd/stateful.h> #include <pbd/controllable.h> +#include <pbd/destructible.h> #include <ardour/ardour.h> #include <ardour/io.h> @@ -55,7 +56,7 @@ enum mute_type { MAIN_OUTS = 0x8 }; -class Route : public IO + class Route : public IO, public PBD::Destructible { protected: @@ -192,8 +193,6 @@ class Route : public IO sigc::signal<void> active_changed; sigc::signal<void,void*> meter_change; - sigc::signal<void> GoingAway; - /* gui's call this for their own purposes. */ sigc::signal<void,std::string,void*> gui_changed; diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index d067de4e68..3763ebe91e 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -270,8 +270,9 @@ class Session : public sigc::trackable, public Stateful vector<Sample*>& get_silent_buffers (uint32_t howmany); vector<Sample*>& get_send_buffers () { return _send_buffers; } - Diskstream* diskstream_by_id (const PBD::ID& id); - Diskstream* diskstream_by_name (string name); + void add_diskstream (boost::shared_ptr<Diskstream>); + boost::shared_ptr<Diskstream> diskstream_by_id (const PBD::ID& id); + boost::shared_ptr<Diskstream> diskstream_by_name (string name); bool have_captured() const { return _have_captured; } @@ -281,9 +282,8 @@ class Session : public sigc::trackable, public Stateful uint32_t get_next_diskstream_id() const { return n_diskstreams(); } uint32_t n_diskstreams() const; - typedef list<Diskstream *> DiskstreamList; - - typedef std::list<boost::shared_ptr<Route> > RouteList; + typedef std::list<boost::shared_ptr<Diskstream> > DiskstreamList; + typedef std::list<boost::shared_ptr<Route> > RouteList; boost::shared_ptr<RouteList> get_routes() const { return routes.reader (); @@ -346,7 +346,6 @@ class Session : public sigc::trackable, public Stateful sigc::signal<void> HaltOnXrun; sigc::signal<void,boost::shared_ptr<Route> > RouteAdded; - sigc::signal<void,Diskstream*> DiskstreamAdded; // FIXME: make a shared_ptr void request_roll (); void request_bounded_roll (jack_nframes_t start, jack_nframes_t end); @@ -1509,10 +1508,9 @@ class Session : public sigc::trackable, public Stateful /* disk-streams */ - DiskstreamList diskstreams; - mutable Glib::RWLock diskstream_lock; + SerializedRCUManager<DiskstreamList> diskstreams; + uint32_t dstream_buffer_size; - void add_diskstream (Diskstream*); int load_diskstreams (const XMLNode&); /* routes stuff */ @@ -1580,7 +1578,7 @@ class Session : public sigc::trackable, public Stateful Playlist *XMLPlaylistFactory (const XMLNode&); void playlist_length_changed (Playlist *); - void diskstream_playlist_changed (Diskstream *); + void diskstream_playlist_changed (boost::shared_ptr<Diskstream>); /* NAMED SELECTIONS */ diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index 4e2af5c80e..ec444e78dc 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -19,6 +19,8 @@ #ifndef __ardour_track_h__ #define __ardour_track_h__ +#include <boost/shared_ptr.hpp> + #include <ardour/route.h> namespace ARDOUR { @@ -50,7 +52,7 @@ class Track : public Route virtual bool can_record(); - Diskstream& diskstream() const { return *_diskstream; } + boost::shared_ptr<Diskstream> diskstream() const { return _diskstream; } virtual int use_diskstream (string name) = 0; virtual int use_diskstream (const PBD::ID& id) = 0; @@ -100,7 +102,7 @@ class Track : public Route virtual uint32_t n_process_buffers () = 0; - Diskstream *_diskstream; + boost::shared_ptr<Diskstream> _diskstream; MeterPoint _saved_meter_point; TrackMode _mode; |