diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-06-09 14:11:46 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-06-09 14:11:46 +0000 |
commit | 2b9dc7b380bb4e40171067f42b4010970869a57d (patch) | |
tree | 6f24f5035d79ce84d758f40c3ee6c071e064ca58 /libs | |
parent | 1e728e728a79d9b272cc18bc1c46f0c3c8831bf8 (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.h | 9 | ||||
-rw-r--r-- | libs/ardour/ardour/butler.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/rc_configuration_vars.h | 3 | ||||
-rw-r--r-- | libs/ardour/audio_diskstream.cc | 12 | ||||
-rw-r--r-- | libs/ardour/butler.cc | 8 |
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; |