diff --git a/gtk2_ardour/tracks_control_panel.cc b/gtk2_ardour/tracks_control_panel.cc
index 49ec5f2341..83c84d8cf4 100644
--- a/gtk2_ardour/tracks_control_panel.cc
+++ b/gtk2_ardour/tracks_control_panel.cc
@@ -78,8 +78,7 @@ TracksControlPanel::TracksControlPanel ()
, _waveform_shape_dropdown (get_waves_dropdown ("waveform_shape_dropdown"))
, _peak_hold_time_dropdown (get_waves_dropdown ("peak_hold_time_dropdown"))
, _dpm_fall_off_dropdown (get_waves_dropdown ("dpm_fall_off_dropdown"))
- , _recording_seconds_dropdown (get_waves_dropdown ("recording_seconds_dropdown"))
- , _playback_seconds_dropdown (get_waves_dropdown ("playback_seconds_dropdown"))
+ , _hard_disk_buffering_dropdown (get_waves_dropdown ("hard_disk_buffering_dropdown"))
, _have_control (false)
, _ignore_changes (0)
diff --git a/gtk2_ardour/tracks_control_panel.h b/gtk2_ardour/tracks_control_panel.h
index fdea33e4ac..40c8dc5bcc 100644
--- a/gtk2_ardour/tracks_control_panel.h
+++ b/gtk2_ardour/tracks_control_panel.h
@@ -94,8 +94,7 @@ class TracksControlPanel : public WavesDialog, public PBD::ScopedConnectionList
WavesDropdown& _waveform_shape_dropdown;
WavesDropdown& _peak_hold_time_dropdown;
WavesDropdown& _dpm_fall_off_dropdown;
- WavesDropdown& _recording_seconds_dropdown;
- WavesDropdown& _playback_seconds_dropdown;
+ WavesDropdown& _hard_disk_buffering_dropdown;
Gtk::Label& _latency_label;
Gtk::Label& _default_open_path;
diff --git a/gtk2_ardour/tracks_control_panel.logic.cc b/gtk2_ardour/tracks_control_panel.logic.cc
index 85283a18d8..e5db97e467 100644
--- a/gtk2_ardour/tracks_control_panel.logic.cc
+++ b/gtk2_ardour/tracks_control_panel.logic.cc
@@ -1023,42 +1023,26 @@ TracksControlPanel::display_meter_falloff ()
}
void
-TracksControlPanel::display_audio_capture_buffer_seconds ()
+TracksControlPanel::display_hdd_buffering ()
{
- long period = Config->get_audio_capture_buffer_seconds ();
+ BufferingPreset preset = Config->get_buffering_preset ();
int selected_item = 0;
- if (period <= 5) {
- selected_item = 0;
- } else if (period <= 10) {
- selected_item = 1;
- } else if (period <= 15) {
- selected_item = 2;
- } else {
- selected_item = 3;
- }
- _recording_seconds_dropdown.set_current_item (selected_item);
+ switch (preset) {
+ case Small:
+ selected_item = 0;
+ break;
+ case Medium:
+ selected_item = 1;
+ break;
+ case Large:
+ selected_item = 2;
+ break;
+ }
+
+ _hard_disk_buffering_dropdown.set_current_item (selected_item);
}
-void
-TracksControlPanel::display_audio_playback_buffer_seconds ()
-{
- long period = Config->get_audio_playback_buffer_seconds ();
- int selected_item = 0;
-
- if (period <= 5) {
- selected_item = 0;
- } else if (period <= 10) {
- selected_item = 1;
- } else if (period <= 15) {
- selected_item = 2;
- } else {
- selected_item = 3;
- }
-
- _playback_seconds_dropdown.set_current_item (selected_item);
-}
-
void
TracksControlPanel::display_mmc_control ()
{
@@ -1114,8 +1098,7 @@ TracksControlPanel::display_general_preferences ()
display_waveform_color_fader ();
display_meter_hold ();
display_meter_falloff ();
- display_audio_capture_buffer_seconds ();
- display_audio_playback_buffer_seconds ();
+ display_hdd_buffering ();
display_mmc_control ();
display_send_mmc ();
display_mmc_send_device_id ();
@@ -1222,8 +1205,7 @@ TracksControlPanel::save_general_preferences ()
Config->set_history_depth (_limit_undo_history_spinbutton.get_value ());
Config->set_saved_history_depth (_save_undo_history_spinbutton.get_value ());
Config->set_save_history (_save_undo_history_spinbutton.get_value () > 0);
- Config->set_audio_capture_buffer_seconds (PBD::atoi (_recording_seconds_dropdown.get_text ()));
- Config->set_audio_playback_buffer_seconds (PBD::atoi (_playback_seconds_dropdown.get_text()));
+ Config->set_buffering_preset (string_to_hdd_buffering_preset (_hard_disk_buffering_dropdown.get_text ()));
}
void TracksControlPanel::on_engine_dropdown_item_clicked (WavesDropdown*, int)
@@ -1786,9 +1768,7 @@ TracksControlPanel::on_parameter_changed (const std::string& parameter_name)
} else if (parameter_name == "meter-falloff") {
display_meter_falloff ();
} else if (parameter_name == "capture-buffer-seconds") {
- display_audio_capture_buffer_seconds ();
- } else if (parameter_name == "playback-buffer-seconds") {
- display_audio_playback_buffer_seconds ();
+ display_hdd_buffering ();
} else if (parameter_name == "mmc-control") {
display_mmc_control ();
} else if (parameter_name == "send-mmc") {
diff --git a/gtk2_ardour/tracks_control_panel.logic.h b/gtk2_ardour/tracks_control_panel.logic.h
index 2288520d98..06640a9b1a 100644
--- a/gtk2_ardour/tracks_control_panel.logic.h
+++ b/gtk2_ardour/tracks_control_panel.logic.h
@@ -133,8 +133,7 @@
void display_waveform_shape ();
void display_meter_hold ();
void display_meter_falloff ();
- void display_audio_capture_buffer_seconds ();
- void display_audio_playback_buffer_seconds ();
+ void display_hdd_buffering ();
void display_mmc_control ();
void display_send_mmc ();
void display_mmc_send_device_id ();
diff --git a/gtk2_ardour/ui/tracks_preferences.xml b/gtk2_ardour/ui/tracks_preferences.xml
index fae0093242..522cd1a9a3 100644
--- a/gtk2_ardour/ui/tracks_preferences.xml
+++ b/gtk2_ardour/ui/tracks_preferences.xml
@@ -922,9 +922,9 @@
+ text="Drive Buffering"/>
-
@@ -933,46 +933,15 @@
width="117"/>
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ data="Large"/>
diff --git a/libs/ardour/ardour/utils.h b/libs/ardour/ardour/utils.h
index 5edfca46d7..488576a64f 100644
--- a/libs/ardour/ardour/utils.h
+++ b/libs/ardour/ardour/utils.h
@@ -75,6 +75,9 @@ LIBARDOUR_API ARDOUR::SyncSource string_to_sync_source (std::string str);
LIBARDOUR_API const char* edit_mode_to_string (ARDOUR::EditMode);
LIBARDOUR_API ARDOUR::EditMode string_to_edit_mode (std::string);
+
+LIBARDOUR_API ARDOUR::BufferingPreset string_to_hdd_buffering_preset (const std::string& str);
+LIBARDOUR_API const char* hdd_buffering_preset_to_string (BufferingPreset preset);
#undef OLD_GAIN_MATH
#define OLD_GAIN_MATH
diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc
index c2536550b7..694a418a31 100644
--- a/libs/ardour/utils.cc
+++ b/libs/ardour/utils.cc
@@ -504,6 +504,39 @@ ARDOUR::sync_source_to_string (SyncSource src, bool sh)
return _("JACK");
}
+BufferingPreset
+ARDOUR::string_to_hdd_buffering_preset (const string& str)
+{
+ if (str == _("Small")) {
+ return Small;
+ } else if (str == _("Medium")) {
+ return Medium;
+ } else if (str == _("Large")) {
+ return Large;
+ }
+
+ fatal << string_compose (_("programming error: unknown buffering preset \"%1\""), str) << endmsg;
+ /*NOTREACHED*/
+ return Small;
+}
+
+const char*
+ARDOUR::hdd_buffering_preset_to_string (BufferingPreset preset)
+{
+ switch (preset) {
+ case Small:
+ return _("Small");
+
+ case Medium:
+ return _("Medium");
+
+ case Large:
+ return _("Large");
+ }
+ /* GRRRR .... stupid, stupid gcc - you can't get here from there, all enum values are handled */
+ return _("Small");
+}
+
float
ARDOUR::meter_falloff_to_float (MeterFalloff falloff)
{