summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-05-26 06:21:05 +0200
committerRobin Gareus <robin@gareus.org>2014-05-26 06:56:04 +0200
commitbb727f4588a5ecdcf750a19bab08db5d6c71653e (patch)
tree31d3b8700934794608b1ec254de69bff19442fc3
parent491f3f6e448f5cde73a1af8bac22990dffe55106 (diff)
allow to set custom thread-buffer size
This is needed for gain and pan automation buffers as well as silent and scratch buffers when bouncing or exporting with larger chunk size than the current engine period.
-rw-r--r--libs/ardour/ardour/buffer_manager.h2
-rw-r--r--libs/ardour/ardour/thread_buffers.h2
-rw-r--r--libs/ardour/buffer_manager.cc4
-rw-r--r--libs/ardour/thread_buffers.cc15
4 files changed, 14 insertions, 9 deletions
diff --git a/libs/ardour/ardour/buffer_manager.h b/libs/ardour/ardour/buffer_manager.h
index f5a3935ead..c73b59b763 100644
--- a/libs/ardour/ardour/buffer_manager.h
+++ b/libs/ardour/ardour/buffer_manager.h
@@ -40,7 +40,7 @@ public:
static ThreadBuffers* get_thread_buffers ();
static void put_thread_buffers (ThreadBuffers*);
- static void ensure_buffers (ChanCount howmany = ChanCount::ZERO);
+ static void ensure_buffers (ChanCount howmany = ChanCount::ZERO, size_t custom = 0);
private:
static Glib::Threads::Mutex rb_mutex;
diff --git a/libs/ardour/ardour/thread_buffers.h b/libs/ardour/ardour/thread_buffers.h
index f30476a474..bf686fd57e 100644
--- a/libs/ardour/ardour/thread_buffers.h
+++ b/libs/ardour/ardour/thread_buffers.h
@@ -35,7 +35,7 @@ public:
ThreadBuffers ();
~ThreadBuffers ();
- void ensure_buffers (ChanCount howmany = ChanCount::ZERO);
+ void ensure_buffers (ChanCount howmany = ChanCount::ZERO, size_t custom = 0);
BufferSet* silent_buffers;
BufferSet* scratch_buffers;
diff --git a/libs/ardour/buffer_manager.cc b/libs/ardour/buffer_manager.cc
index c8819e41cb..c221837af8 100644
--- a/libs/ardour/buffer_manager.cc
+++ b/libs/ardour/buffer_manager.cc
@@ -75,11 +75,11 @@ BufferManager::put_thread_buffers (ThreadBuffers* tbp)
}
void
-BufferManager::ensure_buffers (ChanCount howmany)
+BufferManager::ensure_buffers (ChanCount howmany, size_t custom)
{
/* this is protected by the audioengine's process lock: we do not */
for (ThreadBufferList::iterator i = thread_buffers_list->begin(); i != thread_buffers_list->end(); ++i) {
- (*i)->ensure_buffers (howmany);
+ (*i)->ensure_buffers (howmany, custom);
}
}
diff --git a/libs/ardour/thread_buffers.cc b/libs/ardour/thread_buffers.cc
index 94490ca912..b51576bfc9 100644
--- a/libs/ardour/thread_buffers.cc
+++ b/libs/ardour/thread_buffers.cc
@@ -40,7 +40,7 @@ ThreadBuffers::ThreadBuffers ()
}
void
-ThreadBuffers::ensure_buffers (ChanCount howmany)
+ThreadBuffers::ensure_buffers (ChanCount howmany, size_t custom)
{
// std::cerr << "ThreadBuffers " << this << " resize buffers with count = " << howmany << std::endl;
@@ -60,9 +60,14 @@ ThreadBuffers::ensure_buffers (ChanCount howmany)
for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
size_t count = std::max (scratch_buffers->available().get(*t), howmany.get(*t));
- size_t size = (*t == DataType::MIDI)
- ? _engine->raw_buffer_size (*t)
- : _engine->raw_buffer_size (*t) / sizeof (Sample);
+ size_t size;
+ if (custom > 0) {
+ size = custom;
+ } else {
+ size = (*t == DataType::MIDI)
+ ? _engine->raw_buffer_size (*t)
+ : _engine->raw_buffer_size (*t) / sizeof (Sample);
+ }
scratch_buffers->ensure_buffers (*t, count, size);
mix_buffers->ensure_buffers (*t, count, size);
@@ -70,7 +75,7 @@ ThreadBuffers::ensure_buffers (ChanCount howmany)
route_buffers->ensure_buffers (*t, count, size);
}
- size_t audio_buffer_size = _engine->raw_buffer_size (DataType::AUDIO) / sizeof (Sample);
+ size_t audio_buffer_size = custom > 0 ? custom : _engine->raw_buffer_size (DataType::AUDIO) / sizeof (Sample);
delete [] gain_automation_buffer;
gain_automation_buffer = new gain_t[audio_buffer_size];