summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-08-29 00:23:45 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-08-29 00:23:45 +0000
commit6535cd1b1dbab7cc59a356c81d92dbc2cf25333b (patch)
tree90002ec1819c61db4b0981405d27535af3a79f70 /gtk2_ardour
parentc871ca6d9833ebda3bf286462b96146550b49cef (diff)
used shared_ptr<Source>, somewhat successfully
git-svn-id: svn://localhost/ardour2/trunk@861 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc6
-rw-r--r--gtk2_ardour/ardour_ui.h2
-rw-r--r--gtk2_ardour/audio_region_view.cc2
-rw-r--r--gtk2_ardour/audio_streamview.cc8
-rw-r--r--gtk2_ardour/audio_streamview.h4
-rw-r--r--gtk2_ardour/crossfade_edit.cc2
-rw-r--r--gtk2_ardour/editor_audio_import.cc5
-rw-r--r--gtk2_ardour/editor_export_audio.cc27
-rw-r--r--gtk2_ardour/editor_region_list.cc16
-rw-r--r--gtk2_ardour/sfdb_ui.cc7
-rw-r--r--gtk2_ardour/tape_region_view.cc2
11 files changed, 41 insertions, 40 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 66374ff417..f2ab470c3d 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -2156,12 +2156,12 @@ ARDOUR_UI::halt_on_xrun_message ()
}
void
-ARDOUR_UI::delete_sources_in_the_right_thread (list<ARDOUR::Source*>* deletion_list)
+ARDOUR_UI::delete_sources_in_the_right_thread (list<boost::shared_ptr<ARDOUR::Source> >* deletion_list)
{
ENSURE_GUI_THREAD (bind (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread), deletion_list));
- for (list<Source*>::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
- delete *i;
+ for (list<boost::shared_ptr<Source> >::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
+ (*i)->drop_references ();
}
delete deletion_list;
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index cafa335bf2..5a9b7c4ae4 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -638,7 +638,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
struct timeval last_peak_grab;
struct timeval last_shuttle_request;
- void delete_sources_in_the_right_thread (list<ARDOUR::Source*>*);
+ void delete_sources_in_the_right_thread (list<boost::shared_ptr<ARDOUR::Source> >*);
void editor_display_control_changed (Editing::DisplayControl c);
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index 19c8702e89..86786b801f 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -761,7 +761,7 @@ AudioRegionView::create_waves ()
wave_caches.push_back (WaveView::create_cache ());
if (wait_for_data) {
- if (audio_region()->source(n).peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
+ if (audio_region()->source(n)->peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
create_one_wave (n, true);
} else {
create_zero_line = false;
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index c0b3ba4c39..beb8cb8d2e 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -25,7 +25,7 @@
#include <ardour/audioplaylist.h>
#include <ardour/audioregion.h>
-#include <ardour/audiosource.h>
+#include <ardour/audiofilesource.h>
#include <ardour/audio_diskstream.h>
#include <ardour/audio_track.h>
#include <ardour/playlist_templates.h>
@@ -404,7 +404,7 @@ AudioStreamView::setup_rec_box ()
assert(ads);
for (uint32_t n=0; n < ads->n_channels(); ++n) {
- AudioSource *src = (AudioSource *) ads->write_source (n);
+ boost::shared_ptr<AudioFileSource> src = boost::static_pointer_cast<AudioFileSource> (ads->write_source (n));
if (src) {
sources.push_back (src);
peak_ready_connections.push_back (src->PeakRangeReady.connect (bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), src)));
@@ -530,7 +530,7 @@ AudioStreamView::foreach_crossfadeview (void (CrossfadeView::*pmf)(void))
}
void
-AudioStreamView::rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, Source * src)
+AudioStreamView::rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, boost::shared_ptr<Source> src)
{
// this is called from the peak building thread
@@ -605,7 +605,7 @@ AudioStreamView::update_rec_regions ()
if (nlen != region->length()) {
- if (region->source(0).length() >= region->start() + nlen) {
+ if (region->source(0)->length() >= region->start() + nlen) {
region->freeze ();
region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h
index 8d5ab4117c..13b042eec8 100644
--- a/gtk2_ardour/audio_streamview.h
+++ b/gtk2_ardour/audio_streamview.h
@@ -76,7 +76,7 @@ class AudioStreamView : public StreamView
private:
void setup_rec_box ();
- void rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, ARDOUR::Source* src);
+ void rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, boost::shared_ptr<ARDOUR::Source> src);
void update_rec_regions ();
void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves);
@@ -103,7 +103,7 @@ class AudioStreamView : public StreamView
list<sigc::connection> peak_ready_connections;
jack_nframes_t last_rec_peak_frame;
- map<ARDOUR::Source*, bool> rec_peak_ready_map;
+ map<boost::shared_ptr<ARDOUR::Source>, bool> rec_peak_ready_map;
};
diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc
index a89d4462ae..1d275d5e3b 100644
--- a/gtk2_ardour/crossfade_edit.cc
+++ b/gtk2_ardour/crossfade_edit.cc
@@ -1036,7 +1036,7 @@ CrossfadeEditor::make_waves (boost::shared_ptr<AudioRegion> region, WhichFade wh
gdouble yoff = n * ht;
- if (region->source(n).peaks_ready (bind (mem_fun(*this, &CrossfadeEditor::peaks_ready), region, which), peaks_ready_connection)) {
+ if (region->source(n)->peaks_ready (bind (mem_fun(*this, &CrossfadeEditor::peaks_ready), region, which), peaks_ready_connection)) {
WaveView* waveview = new WaveView (*(canvas->root()));
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index ebff933514..fffad2e2eb 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -32,6 +32,7 @@
#include <ardour/audioplaylist.h>
#include <ardour/audiofilesource.h>
#include <ardour/region_factory.h>
+#include <ardour/source_factory.h>
#include <pbd/memento_command.h>
#include "ardour_ui.h"
@@ -189,7 +190,7 @@ int
Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool& check_sample_rate, ImportMode mode,
AudioTrack* track, jack_nframes_t& pos, bool prompt)
{
- AudioFileSource *source = 0; /* keep g++ quiet */
+ boost::shared_ptr<AudioFileSource> source;
SourceList sources;
boost::shared_ptr<AudioRegion> region;
string idspec;
@@ -269,7 +270,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
idspec += string_compose(":%1", n);
try {
- source = AudioFileSource::create (idspec.c_str(), (mode == ImportAsTrack ? AudioFileSource::Destructive : AudioFileSource::Flag (0)));
+ source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (idspec, (mode == ImportAsTrack ? AudioFileSource::Destructive : AudioFileSource::Flag (0))));
sources.push_back(source);
}
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index 6eeff78d84..dc7fadb470 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -41,6 +41,8 @@
#include <ardour/audio_diskstream.h>
#include <ardour/audioregion.h>
#include <ardour/audioplaylist.h>
+#include <ardour/source_factory.h>
+#include <ardour/audiofilesource.h>
#include "i18n.h"
@@ -157,7 +159,7 @@ Editor::bounce_region_selection ()
bool
Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
{
- AudioFileSource* fs;
+ boost::shared_ptr<AudioFileSource> fs;
const jack_nframes_t chunk_size = 4096;
jack_nframes_t to_read;
Sample buf[chunk_size];
@@ -165,14 +167,14 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
jack_nframes_t pos;
char s[PATH_MAX+1];
uint32_t cnt;
- vector<AudioFileSource *> sources;
+ vector<boost::shared_ptr<AudioFileSource> > sources;
uint32_t nchans;
nchans = region->n_channels();
/* don't do duplicate of the entire source if that's what is going on here */
- if (region->start() == 0 && region->length() == region->source().length()) {
+ if (region->start() == 0 && region->length() == region->source()->length()) {
/* XXX should link(2) to create a new inode with "path" */
return true;
}
@@ -206,7 +208,7 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
try {
- fs = AudioFileSource::create (path);
+ fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (path, AudioFileSource::Flag (0)));
}
catch (failed_constructor& err) {
@@ -229,7 +231,7 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
this_time = min (to_read, chunk_size);
- for (vector<AudioFileSource *>::iterator src=sources.begin(); src != sources.end(); ++src) {
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator src=sources.begin(); src != sources.end(); ++src) {
fs = (*src);
@@ -252,7 +254,7 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
time (&tnow);
now = localtime (&tnow);
- for (vector<AudioFileSource *>::iterator src = sources.begin(); src != sources.end(); ++src) {
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator src = sources.begin(); src != sources.end(); ++src) {
(*src)->update_header (0, *now, tnow);
}
@@ -260,10 +262,8 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
error_out:
- for (vector<AudioFileSource*>::iterator i = sources.begin(); i != sources.end(); ++i) {
-
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator i = sources.begin(); i != sources.end(); ++i) {
(*i)->mark_for_remove ();
- delete (*i);
}
return 0;
@@ -303,7 +303,7 @@ Editor::write_audio_selection (TimeSelection& ts)
bool
Editor::write_audio_range (AudioPlaylist& playlist, uint32_t channels, list<AudioRange>& range)
{
- AudioFileSource* fs;
+ boost::shared_ptr<AudioFileSource> fs;
const jack_nframes_t chunk_size = 4096;
jack_nframes_t nframes;
Sample buf[chunk_size];
@@ -312,7 +312,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, uint32_t channels, list<Audi
char s[PATH_MAX+1];
uint32_t cnt;
string path;
- vector<AudioFileSource *> sources;
+ vector<boost::shared_ptr<AudioFileSource> > sources;
for (uint32_t n=0; n < channels; ++n) {
@@ -339,7 +339,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, uint32_t channels, list<Audi
path = s;
try {
- fs = AudioFileSource::create (path);
+ fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (path, AudioFileSource::Flag (0)));
}
catch (failed_constructor& err) {
@@ -422,9 +422,8 @@ Editor::write_audio_range (AudioPlaylist& playlist, uint32_t channels, list<Audi
error_out:
/* unref created files */
- for (vector<AudioFileSource*>::iterator i = sources.begin(); i != sources.end(); ++i) {
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator i = sources.begin(); i != sources.end(); ++i) {
(*i)->mark_for_remove ();
- delete *i;
}
return false;
diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc
index 09a56e9af5..a84e53c749 100644
--- a/gtk2_ardour/editor_region_list.cc
+++ b/gtk2_ardour/editor_region_list.cc
@@ -120,11 +120,11 @@ Editor::add_audio_region_to_region_display (boost::shared_ptr<AudioRegion> regio
set_color(c, rgba_from_style ("RegionListWholeFile", 0xff, 0, 0, 0, "fg", Gtk::STATE_NORMAL, false ));
row[region_list_columns.color_] = c;
- if (region->source().name()[0] == '/') { // external file
+ if (region->source()->name()[0] == '/') { // external file
if (region->whole_file()) {
str = ".../";
- str += PBD::basename_nosuffix (region->source().name());
+ str += PBD::basename_nosuffix (region->source()->name());
} else {
str = region->name();
@@ -467,7 +467,7 @@ Editor::region_list_sorter (TreeModel::iterator a, TreeModel::iterator b)
break;
case ByTimestamp:
- cmp = region1->source().timestamp() - region2->source().timestamp();
+ cmp = region1->source()->timestamp() - region2->source()->timestamp();
break;
case ByStartInFile:
@@ -479,22 +479,22 @@ Editor::region_list_sorter (TreeModel::iterator a, TreeModel::iterator b)
break;
case BySourceFileName:
- cmp = strcasecmp (region1->source().name().c_str(), region2->source().name().c_str());
+ cmp = strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
break;
case BySourceFileLength:
- cmp = region1->source().length() - region2->source().length();
+ cmp = region1->source()->length() - region2->source()->length();
break;
case BySourceFileCreationDate:
- cmp = region1->source().timestamp() - region2->source().timestamp();
+ cmp = region1->source()->timestamp() - region2->source()->timestamp();
break;
case BySourceFileFS:
- if (region1->source().name() == region2->source().name()) {
+ if (region1->source()->name() == region2->source()->name()) {
cmp = strcasecmp (region1->name().c_str(), region2->name().c_str());
} else {
- cmp = strcasecmp (region1->source().name().c_str(), region2->source().name().c_str());
+ cmp = strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
}
break;
}
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index 34dcf56ec3..cfede6d863 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -33,6 +33,7 @@
#include <ardour/audioregion.h>
#include <ardour/audiofilesource.h>
#include <ardour/region_factory.h>
+#include <ardour/source_factory.h>
#include "ardour_ui.h"
#include "gui_thread.h"
@@ -192,11 +193,11 @@ SoundFileBox::play_btn_clicked ()
if (region_cache.find (path) == region_cache.end()) {
SourceList srclist;
- AudioFileSource* afs;
-
+ boost::shared_ptr<AudioFileSource> afs;
+
for (int n = 0; n < sf_info.channels; ++n) {
try {
- afs = AudioFileSource::create (path+":"+string_compose("%1", n));
+ afs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (path+":"+string_compose("%1", n), AudioFileSource::Flag (0)));
srclist.push_back(afs);
} catch (failed_constructor& err) {
diff --git a/gtk2_ardour/tape_region_view.cc b/gtk2_ardour/tape_region_view.cc
index e71429ed3a..0cf50b87e6 100644
--- a/gtk2_ardour/tape_region_view.cc
+++ b/gtk2_ardour/tape_region_view.cc
@@ -68,7 +68,7 @@ TapeAudioRegionView::init (Gdk::Color& basic_color, bool wfw)
/* every time the wave data changes and peaks are ready, redraw */
for (uint32_t n = 0; n < audio_region()->n_channels(); ++n) {
- audio_region()->source(n).PeaksReady.connect (bind (mem_fun(*this, &TapeAudioRegionView::update), n));
+ audio_region()->source(n)->PeaksReady.connect (bind (mem_fun(*this, &TapeAudioRegionView::update), n));
}
}