summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-06-09 14:11:46 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-06-09 14:11:46 +0000
commit2b9dc7b380bb4e40171067f42b4010970869a57d (patch)
tree6f24f5035d79ce84d758f40c3ee6c071e064ca58 /libs
parent1e728e728a79d9b272cc18bc1c46f0c3c8831bf8 (diff)
permit different sizes for audio playback & capture buffers
git-svn-id: svn://localhost/ardour2/branches/3.0@7248 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audio_diskstream.h9
-rw-r--r--libs/ardour/ardour/butler.h6
-rw-r--r--libs/ardour/ardour/rc_configuration_vars.h3
-rw-r--r--libs/ardour/audio_diskstream.cc12
-rw-r--r--libs/ardour/butler.cc8
5 files changed, 25 insertions, 13 deletions
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h
index 6cf064a61d..0ab9231252 100644
--- a/libs/ardour/ardour/audio_diskstream.h
+++ b/libs/ardour/ardour/audio_diskstream.h
@@ -28,6 +28,8 @@
#include <time.h>
+#include <boost/utility.hpp>
+
#include "pbd/fastlog.h"
#include "pbd/ringbufferNPT.h"
#include "pbd/stateful.h"
@@ -179,9 +181,12 @@ class AudioDiskstream : public Diskstream
private:
- struct ChannelInfo {
+ struct ChannelInfo : public boost::noncopyable {
- ChannelInfo (nframes_t buffer_size, nframes_t speed_buffer_size, nframes_t wrap_buffer_size);
+ ChannelInfo (nframes_t playback_buffer_size,
+ nframes_t capture_buffer_size,
+ nframes_t speed_buffer_size,
+ nframes_t wrap_buffer_size);
~ChannelInfo ();
Sample *playback_wrap_buffer;
diff --git a/libs/ardour/ardour/butler.h b/libs/ardour/ardour/butler.h
index e3760a8c53..fc8e4c18c3 100644
--- a/libs/ardour/ardour/butler.h
+++ b/libs/ardour/ardour/butler.h
@@ -54,7 +54,8 @@ class Butler : public SessionHandleRef
float read_data_rate() const; ///< in usec
float write_data_rate() const;
- uint32_t audio_diskstream_buffer_size() const { return audio_dstream_buffer_size; }
+ nframes_t audio_diskstream_capture_buffer_size() const { return audio_dstream_capture_buffer_size; }
+ nframes_t audio_diskstream_playback_buffer_size() const { return audio_dstream_playback_buffer_size; }
uint32_t midi_diskstream_buffer_size() const { return midi_dstream_buffer_size; }
static void* _thread_work(void *arg);
@@ -75,7 +76,8 @@ class Butler : public SessionHandleRef
bool should_run;
mutable gint should_do_transport_work;
int request_pipe[2];
- uint32_t audio_dstream_buffer_size;
+ nframes_t audio_dstream_capture_buffer_size;
+ nframes_t audio_dstream_playback_buffer_size;
uint32_t midi_dstream_buffer_size;
RingBuffer<CrossThreadPool*> pool_trash;
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index 158f84a3c7..bbf37362a5 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -51,7 +51,8 @@ CONFIG_VARIABLE (RemoteModel, remote_model, "remote-model", MixerOrdered)
CONFIG_VARIABLE (uint32_t, minimum_disk_io_bytes, "minimum-disk-io-bytes", 1024 * 256)
CONFIG_VARIABLE (float, midi_readahead, "midi-readahead", 1.0)
-CONFIG_VARIABLE (float, audio_track_buffer_seconds, "track-buffer-seconds", 5.0)
+CONFIG_VARIABLE (float, audio_capture_buffer_seconds, "capture-buffer-seconds", 5.0)
+CONFIG_VARIABLE (float, audio_playback_buffer_seconds, "playback-buffer-seconds", 5.0)
CONFIG_VARIABLE (float, midi_track_buffer_seconds, "midi-track-buffer-seconds", 1.0)
CONFIG_VARIABLE (uint32_t, disk_choice_space_threshold, "disk-choice-space-threshold", 57600000)
CONFIG_VARIABLE (bool, auto_analyse_audio, "auto-analyse-audio", false)
diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc
index 91ca6a8f64..d864d86cf8 100644
--- a/libs/ardour/audio_diskstream.cc
+++ b/libs/ardour/audio_diskstream.cc
@@ -2056,8 +2056,10 @@ int
AudioDiskstream::add_channel_to (boost::shared_ptr<ChannelList> c, uint32_t how_many)
{
while (how_many--) {
- c->push_back (new ChannelInfo(_session.butler()->audio_diskstream_buffer_size(), speed_buffer_size, wrap_buffer_size));
- interpolation.add_channel_to (_session.butler()->audio_diskstream_buffer_size(), speed_buffer_size);
+ c->push_back (new ChannelInfo(_session.butler()->audio_diskstream_playback_buffer_size(),
+ _session.butler()->audio_diskstream_capture_buffer_size(),
+ speed_buffer_size, wrap_buffer_size));
+ interpolation.add_channel_to (_session.butler()->audio_diskstream_playback_buffer_size(), speed_buffer_size);
}
_n_channels.set(DataType::AUDIO, c->size());
@@ -2295,7 +2297,7 @@ AudioDiskstream::can_become_destructive (bool& requires_bounce) const
return true;
}
-AudioDiskstream::ChannelInfo::ChannelInfo (nframes_t bufsize, nframes_t speed_size, nframes_t wrap_size)
+AudioDiskstream::ChannelInfo::ChannelInfo (nframes_t playback_bufsize, nframes_t capture_bufsize, nframes_t speed_size, nframes_t wrap_size)
{
peak_power = 0.0f;
source = 0;
@@ -2307,8 +2309,8 @@ AudioDiskstream::ChannelInfo::ChannelInfo (nframes_t bufsize, nframes_t speed_si
playback_wrap_buffer = new Sample[wrap_size];
capture_wrap_buffer = new Sample[wrap_size];
- playback_buf = new RingBufferNPT<Sample> (bufsize);
- capture_buf = new RingBufferNPT<Sample> (bufsize);
+ playback_buf = new RingBufferNPT<Sample> (playback_bufsize);
+ capture_buf = new RingBufferNPT<Sample> (capture_bufsize);
capture_transition_buf = new RingBufferNPT<CaptureTransition> (256);
/* touch the ringbuffer buffers, which will cause
diff --git a/libs/ardour/butler.cc b/libs/ardour/butler.cc
index 9847d55e40..1eb96dea35 100644
--- a/libs/ardour/butler.cc
+++ b/libs/ardour/butler.cc
@@ -43,7 +43,8 @@ namespace ARDOUR {
Butler::Butler(Session& s)
: SessionHandleRef (s)
, thread(0)
- , audio_dstream_buffer_size(0)
+ , audio_dstream_capture_buffer_size(0)
+ , audio_dstream_playback_buffer_size(0)
, midi_dstream_buffer_size(0)
, pool_trash(16)
{
@@ -62,7 +63,8 @@ Butler::start_thread()
const float rate = (float)_session.frame_rate();
/* size is in Samples, not bytes */
- audio_dstream_buffer_size = (uint32_t) floor (Config->get_audio_track_buffer_seconds() * rate);
+ audio_dstream_capture_buffer_size = (uint32_t) floor (Config->get_audio_capture_buffer_seconds() * rate);
+ audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * rate);
/* size is in bytes
* XXX: Jack needs to tell us the MIDI buffer size
@@ -72,7 +74,7 @@ Butler::start_thread()
MidiDiskstream::set_readahead_frames ((nframes_t)(Config->get_midi_readahead() * rate));
- Crossfade::set_buffer_size (audio_dstream_buffer_size);
+ Crossfade::set_buffer_size (audio_dstream_playback_buffer_size);
should_run = false;