summaryrefslogtreecommitdiff
path: root/libs/ardour/diskstream.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-05-12 14:15:07 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-06-29 14:18:12 -0400
commit4644e113a86974ba29c5979b7285260bd3afdfcb (patch)
tree688444caf4110e3d552c08aab7ad541359291835 /libs/ardour/diskstream.cc
parent9ef4888e9140aa479422a6c1ad377b4194e3e94c (diff)
introduce the idea of buffering presets, along with 3 possible settings (plus custom).
Actual numbers for the parameters are still to be determined/verified, and probably subject to some platform specificity
Diffstat (limited to 'libs/ardour/diskstream.cc')
-rw-r--r--libs/ardour/diskstream.cc60
1 files changed, 60 insertions, 0 deletions
diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc
index 5a8f26f17d..91859e76a3 100644
--- a/libs/ardour/diskstream.cc
+++ b/libs/ardour/diskstream.cc
@@ -805,3 +805,63 @@ Diskstream::default_disk_write_chunk_frames ()
{
return 65536;
}
+
+void
+Diskstream::set_buffering_parameters (BufferingPreset bp)
+{
+ framecnt_t read_chunk_size;
+ framecnt_t read_buffer_size;
+ framecnt_t write_chunk_size;
+ framecnt_t write_buffer_size;
+
+ if (!get_buffering_presets (bp, read_chunk_size, read_buffer_size, write_chunk_size, write_buffer_size)) {
+ return;
+ }
+
+ disk_read_chunk_frames = read_chunk_size;
+ disk_write_chunk_frames = write_chunk_size;
+ Config->set_audio_capture_buffer_seconds (write_buffer_size);
+ Config->set_audio_playback_buffer_seconds (read_buffer_size);
+
+ cerr << "Set buffering params to " << disk_read_chunk_frames << '|' << disk_write_chunk_frames << '|'
+ << Config->get_audio_playback_buffer_seconds() << '|'
+ << Config->get_audio_capture_buffer_seconds ()
+ << endl;
+}
+
+bool
+Diskstream::get_buffering_presets (BufferingPreset bp,
+ framecnt_t& read_chunk_size,
+ framecnt_t& read_buffer_size,
+ framecnt_t& write_chunk_size,
+ framecnt_t& write_buffer_size)
+{
+ switch (bp) {
+ case Small:
+ read_chunk_size = 65536; /* samples */
+ write_chunk_size = 65536; /* samples */
+ read_buffer_size = 5; /* seconds */
+ write_buffer_size = 5; /* seconds */
+ break;
+
+ case Medium:
+ read_chunk_size = 262144; /* samples */
+ write_chunk_size = 131072; /* samples */
+ read_buffer_size = 10; /* seconds */
+ write_buffer_size = 10; /* seconds */
+ break;
+
+ case Large:
+ read_chunk_size = 524288; /* samples */
+ write_chunk_size = 131072; /* samples */
+ read_buffer_size = 20; /* seconds */
+ write_buffer_size = 20; /* seconds */
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+