summaryrefslogtreecommitdiff
path: root/libs/ardour/audiosource.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-05-16 02:17:58 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-05-16 02:17:58 +0000
commit0a9cef7720ed9bd83442d284d18831437b80a482 (patch)
tree73f8b7e6780bbaf57bcf14dccb6d759556220cef /libs/ardour/audiosource.cc
parent88a6513e76e397bdd19d4e76eaf44da8170cf73a (diff)
very basic Join (regions) editing operation. not finished yet, no undoable, no sensible name for new region, etc. etc
git-svn-id: svn://localhost/ardour2/branches/3.0@9518 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audiosource.cc')
-rw-r--r--libs/ardour/audiosource.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc
index ac98837183..ffb8068ea5 100644
--- a/libs/ardour/audiosource.cc
+++ b/libs/ardour/audiosource.cc
@@ -38,6 +38,7 @@
#include "pbd/pthread_utils.h"
#include "ardour/audiosource.h"
+#include "ardour/audio_diskstream.h"
#include "ardour/cycle_timer.h"
#include "ardour/session.h"
#include "ardour/transient_detector.h"
@@ -49,6 +50,10 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
+Glib::StaticMutex AudioSource::_level_buffer_lock = GLIBMM_STATIC_MUTEX_INIT;
+vector<Sample*> AudioSource::_mixdown_buffers;
+vector<gain_t*> AudioSource::_gain_buffers;
+size_t AudioSource::_working_buffers_size = 0;
bool AudioSource::_build_missing_peakfiles = false;
/** true if we want peakfiles (e.g. if we are displaying a GUI) */
@@ -958,3 +963,26 @@ AudioSource::mark_streaming_write_completed ()
PeaksReady (); /* EMIT SIGNAL */
}
}
+
+void
+AudioSource::allocate_working_buffers()
+{
+ assert(AudioDiskstream::disk_io_frames() > 0);
+ _working_buffers_size = AudioDiskstream::disk_io_frames();
+ /* we don't need any buffers allocated until
+ a level 1 audiosource is created, at which
+ time we'll call ::ensure_buffers_for_level()
+ with the right value and do the right thing.
+ */
+}
+
+void
+AudioSource::ensure_buffers_for_level (uint32_t level)
+{
+ Glib::Mutex::Lock lm (_level_buffer_lock);
+
+ while (_mixdown_buffers.size() < level) {
+ _mixdown_buffers.push_back (new Sample[_working_buffers_size]);
+ _gain_buffers.push_back (new gain_t[_working_buffers_size]);
+ }
+}