diff options
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/audio_diskstream.h | 12 | ||||
-rw-r--r-- | libs/ardour/ardour/audiofilesource.h | 10 | ||||
-rw-r--r-- | libs/ardour/ardour/audioregion.h | 13 | ||||
-rw-r--r-- | libs/ardour/ardour/audiosource.h | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/auditioner.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/diskstream.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/region_factory.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 30 | ||||
-rw-r--r-- | libs/ardour/ardour/source.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/source_factory.h | 29 | ||||
-rw-r--r-- | libs/ardour/ardour/types.h | 3 |
11 files changed, 69 insertions, 49 deletions
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h index eaa69e00d8..44fb6e59a4 100644 --- a/libs/ardour/ardour/audio_diskstream.h +++ b/libs/ardour/ardour/audio_diskstream.h @@ -108,10 +108,10 @@ class AudioDiskstream : public Diskstream return 0; } - AudioFileSource *write_source (uint32_t n=0) { + boost::shared_ptr<AudioFileSource> write_source (uint32_t n=0) { if (n < channels.size()) return channels[n].write_source; - return 0; + return boost::shared_ptr<AudioFileSource>(); } int add_channel (); @@ -179,9 +179,9 @@ class AudioDiskstream : public Diskstream Sample *speed_buffer; float peak_power; - - AudioFileSource *fades_source; - AudioFileSource *write_source; + + boost::shared_ptr<AudioFileSource> fades_source; + boost::shared_ptr<AudioFileSource> write_source; Port *source; Sample *current_capture_buffer; @@ -249,7 +249,7 @@ class AudioDiskstream : public Diskstream int _do_refill (Sample *mixdown_buffer, float *gain_buffer); - std::vector<AudioFileSource*> capturing_sources; + std::vector<boost::shared_ptr<AudioFileSource> > capturing_sources; typedef vector<ChannelInfo> ChannelList; ChannelList channels; diff --git a/libs/ardour/ardour/audiofilesource.h b/libs/ardour/ardour/audiofilesource.h index eb3fd750d4..b0aa9bac58 100644 --- a/libs/ardour/ardour/audiofilesource.h +++ b/libs/ardour/ardour/audiofilesource.h @@ -56,16 +56,6 @@ class AudioFileSource : public AudioSource { static void set_peak_dir (string dir) { peak_dir = dir; } - /* factory for an existing but not-used-in-session audio file. this exists - because there maybe multiple back-end derivations of AudioFileSource, - some of which can handle formats that cannot be handled by others. - For example, CoreAudioFileSource can handle MP3 files, which SndFileSource - cannot. - */ - - static AudioFileSource* create (const string& path_plus_channel, Flag flags = Flag (0)); - static AudioFileSource* create (const XMLNode&); - static bool get_soundfile_info (string path, SoundFileInfo& _info, string& error); void set_allow_remove_if_empty (bool yn); diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h index ad8672a269..36c6256d50 100644 --- a/libs/ardour/ardour/audioregion.h +++ b/libs/ardour/ardour/audioregion.h @@ -71,9 +71,7 @@ class AudioRegion : public Region bool speed_mismatch (float) const; - void lock_sources (); - void unlock_sources (); - AudioSource& source (uint32_t n=0) const { if (n < sources.size()) return *sources[n]; else return *sources[0]; } + boost::shared_ptr<AudioSource> source (uint32_t n=0) const { if (n < sources.size()) return sources[n]; else return sources[0]; } void set_scale_amplitude (gain_t); gain_t scale_amplitude() const { return _scale_amplitude; } @@ -155,12 +153,12 @@ class AudioRegion : public Region private: friend class RegionFactory; - AudioRegion (AudioSource&, jack_nframes_t start, jack_nframes_t length); - AudioRegion (AudioSource&, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags); + AudioRegion (boost::shared_ptr<AudioSource>, jack_nframes_t start, jack_nframes_t length); + AudioRegion (boost::shared_ptr<AudioSource>, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags); AudioRegion (SourceList &, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags); AudioRegion (boost::shared_ptr<const AudioRegion>, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags); AudioRegion (boost::shared_ptr<const AudioRegion>); - AudioRegion (AudioSource&, const XMLNode&); + AudioRegion (boost::shared_ptr<AudioSource>, const XMLNode&); AudioRegion (SourceList &, const XMLNode&); private: @@ -190,8 +188,7 @@ class AudioRegion : public Region void envelope_changed (Change); - void source_deleted (Source*); - + void source_deleted (boost::shared_ptr<Source>); SourceList sources; diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h index 786423d9f8..45fe8e5c9f 100644 --- a/libs/ardour/ardour/audiosource.h +++ b/libs/ardour/ardour/audiosource.h @@ -84,8 +84,6 @@ class AudioSource : public Source int build_peaks (); bool peaks_ready (sigc::slot<void>, sigc::connection&) const; - static sigc::signal<void,AudioSource*> AudioSourceCreated; - mutable sigc::signal<void> PeaksReady; mutable sigc::signal<void,jack_nframes_t,jack_nframes_t> PeakRangeReady; @@ -147,7 +145,7 @@ class AudioSource : public Source static vector<AudioSource*> pending_peak_sources; static Glib::Mutex* pending_peak_sources_lock; - static void queue_for_peaks (AudioSource&); + static void queue_for_peaks (AudioSource*); static void clear_queue_for_peaks (); struct PeakBuildRecord { diff --git a/libs/ardour/ardour/auditioner.h b/libs/ardour/ardour/auditioner.h index c693589864..424ede0009 100644 --- a/libs/ardour/ardour/auditioner.h +++ b/libs/ardour/ardour/auditioner.h @@ -40,7 +40,7 @@ class Auditioner : public AudioTrack Auditioner (Session&); ~Auditioner (); - void audition_region (boost::shared_ptr<AudioRegion>); + void audition_region (boost::shared_ptr<Region>); ARDOUR::AudioPlaylist& prepare_playlist (); void audition_current_playlist (); diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h index f9463a3320..3c2154896c 100644 --- a/libs/ardour/ardour/diskstream.h +++ b/libs/ardour/ardour/diskstream.h @@ -148,7 +148,7 @@ class IO; static sigc::signal<void> DiskOverrun; static sigc::signal<void> DiskUnderrun; - static sigc::signal<void,list<Source*>*> DeleteSources; + static sigc::signal<void,std::list<boost::shared_ptr<Source> >*> DeleteSources; protected: friend class Session; diff --git a/libs/ardour/ardour/region_factory.h b/libs/ardour/ardour/region_factory.h index d4033680ee..3bf1b6005e 100644 --- a/libs/ardour/ardour/region_factory.h +++ b/libs/ardour/ardour/region_factory.h @@ -26,7 +26,10 @@ class RegionFactory { static boost::shared_ptr<Region> create (boost::shared_ptr<Region>, jack_nframes_t start, jack_nframes_t length, std::string name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); - static boost::shared_ptr<Region> create (Source&, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); + static boost::shared_ptr<Region> create (boost::shared_ptr<AudioRegion>, jack_nframes_t start, + jack_nframes_t length, std::string name, + layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); + static boost::shared_ptr<Region> create (boost::shared_ptr<Source>, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); static boost::shared_ptr<Region> create (SourceList &, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true); static boost::shared_ptr<Region> create (boost::shared_ptr<Region>); static boost::shared_ptr<Region> create (Session&, XMLNode&, bool); diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index c299358268..ec7deccc31 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -21,12 +21,16 @@ #ifndef __ardour_session_h__ #define __ardour_session_h__ + #include <string> #include <list> #include <map> #include <vector> #include <set> #include <stack> + +#include <boost/weak_ptr.hpp> + #include <stdint.h> #include <sndfile.h> @@ -172,6 +176,8 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible Route* route; }; + boost::shared_ptr<Region> region; + list<AudioRange> audio_range; list<MusicRange> music_range; @@ -654,9 +660,9 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible int start_audio_export (ARDOUR::AudioExportSpecification&); int stop_audio_export (ARDOUR::AudioExportSpecification&); - void add_audio_source (AudioSource *); - void remove_source (Source *); - int cleanup_audio_file_source (AudioFileSource&); + void add_source (boost::shared_ptr<Source>); + void remove_source (boost::weak_ptr<Source>); + int cleanup_audio_file_source (boost::shared_ptr<AudioFileSource>); struct cleanup_report { vector<string> paths; @@ -685,12 +691,12 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible static sigc::signal<int> AskAboutPendingState; - sigc::signal<void,Source *> SourceAdded; - sigc::signal<void,Source *> SourceRemoved; + sigc::signal<void,boost::shared_ptr<Source> > SourceAdded; + sigc::signal<void,boost::shared_ptr<Source> > SourceRemoved; - AudioFileSource *create_audio_source_for_session (ARDOUR::AudioDiskstream&, uint32_t which_channel, bool destructive); + boost::shared_ptr<AudioFileSource> create_audio_source_for_session (ARDOUR::AudioDiskstream&, uint32_t which_channel, bool destructive); - Source *source_by_id (const PBD::ID&); + boost::shared_ptr<Source> source_by_id (const PBD::ID&); /* playlist management */ @@ -735,7 +741,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible /* flattening stuff */ - int write_one_audio_track (AudioTrack&, jack_nframes_t start, jack_nframes_t cnt, bool overwrite, vector<AudioSource*>&, + int write_one_audio_track (AudioTrack&, jack_nframes_t start, jack_nframes_t cnt, bool overwrite, vector<boost::shared_ptr<AudioSource> >&, InterThreadInfo& wot); int freeze (InterThreadInfo&); @@ -1555,14 +1561,14 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible /* SOURCES */ mutable Glib::Mutex audio_source_lock; - typedef std::map<PBD::ID,AudioSource *> AudioSourceList; + typedef std::map<PBD::ID,boost::shared_ptr<AudioSource> > AudioSourceList; AudioSourceList audio_sources; int load_sources (const XMLNode& node); XMLNode& get_sources_as_xml (); - Source *XMLSourceFactory (const XMLNode&); + boost::shared_ptr<Source> XMLSourceFactory (const XMLNode&); /* PLAYLISTS */ @@ -1605,9 +1611,9 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible /* AUDITIONING */ boost::shared_ptr<Auditioner> auditioner; - void set_audition (boost::shared_ptr<AudioRegion>); + void set_audition (boost::shared_ptr<Region>); void non_realtime_set_audition (); - boost::shared_ptr<AudioRegion> pending_audition_region; + boost::shared_ptr<Region> pending_audition_region; /* EXPORT */ diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h index dee75a2300..20a8190bd4 100644 --- a/libs/ardour/ardour/source.h +++ b/libs/ardour/ardour/source.h @@ -24,6 +24,7 @@ #include <string> #include <sigc++/signal.h> +#include <boost/enable_shared_from_this.hpp> #include <pbd/statefuldestructible.h> @@ -31,7 +32,7 @@ namespace ARDOUR { -class Source : public PBD::StatefulDestructible, public sigc::trackable +class Source : public PBD::StatefulDestructible, public sigc::trackable, public boost::enable_shared_from_this<Source> { public: Source (std::string name); @@ -43,10 +44,6 @@ class Source : public PBD::StatefulDestructible, public sigc::trackable const PBD::ID& id() const { return _id; } - uint32_t use_cnt() const { return _use_cnt; } - void use (); - void release (); - time_t timestamp() const { return _timestamp; } void stamp (time_t when) { _timestamp = when; } @@ -56,7 +53,6 @@ class Source : public PBD::StatefulDestructible, public sigc::trackable protected: string _name; - uint32_t _use_cnt; time_t _timestamp; private: diff --git a/libs/ardour/ardour/source_factory.h b/libs/ardour/ardour/source_factory.h new file mode 100644 index 0000000000..92ed0415c8 --- /dev/null +++ b/libs/ardour/ardour/source_factory.h @@ -0,0 +1,29 @@ +#ifndef __ardour_source_factory_h__ +#define __ardour_source_factory_h__ + +#include <string> +#include <stdint.h> +#include <sigc++/sigc++.h> +#include <boost/shared_ptr.hpp> + +#include <ardour/source.h> +#include <ardour/audiofilesource.h> + +class XMLNode; + +namespace ARDOUR { + +class SourceFactory { + public: + static sigc::signal<void,boost::shared_ptr<Source> > SourceCreated; + + static boost::shared_ptr<Source> create (const XMLNode& node); + + // MIDI sources will have to be hacked in here somehow + static boost::shared_ptr<Source> createReadable (std::string idstr, AudioFileSource::Flag flags, bool announce = true); + static boost::shared_ptr<Source> createWritable (std::string name, bool destructive, jack_nframes_t rate, bool announce = true); +}; + +} + +#endif /* __ardour_source_factory_h__ */ diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index 9c92b49ed0..39c06b6dcc 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -27,6 +27,7 @@ #include <istream> #include <vector> +#include <boost/shared_ptr.hpp> #include <inttypes.h> #include <jack/types.h> @@ -252,7 +253,7 @@ namespace ARDOUR { VST }; - typedef std::vector<AudioSource *> SourceList; + typedef std::vector<boost::shared_ptr<AudioSource> > SourceList; } // namespace ARDOUR |