permit different sizes for audio playback & capture buffers
git-svn-id: svn://localhost/ardour2/branches/3.0@7248 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
1e728e728a
commit
2b9dc7b380
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user