summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/audio_diskstream.h12
-rw-r--r--libs/ardour/ardour/audiofilesource.h10
-rw-r--r--libs/ardour/ardour/audioregion.h13
-rw-r--r--libs/ardour/ardour/audiosource.h4
-rw-r--r--libs/ardour/ardour/auditioner.h2
-rw-r--r--libs/ardour/ardour/diskstream.h2
-rw-r--r--libs/ardour/ardour/region_factory.h5
-rw-r--r--libs/ardour/ardour/session.h30
-rw-r--r--libs/ardour/ardour/source.h8
-rw-r--r--libs/ardour/ardour/source_factory.h29
-rw-r--r--libs/ardour/ardour/types.h3
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