summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/automation_control.h6
-rw-r--r--libs/ardour/ardour/record_enable_control.h1
-rw-r--r--libs/ardour/record_enable_control.cc32
3 files changed, 24 insertions, 15 deletions
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index ecc16cb134..e15abbec46 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -134,6 +134,12 @@ class LIBARDOUR_API AutomationControl
virtual void actually_set_value (double value, PBD::Controllable::GroupControlDisposition);
+ /* Session needs to call this method before it queues up the real
+ change for execution in a realtime context. C++ access control sucks.
+ */
+ friend class Session;
+ virtual void do_pre_realtime_queue_stuff (double new_value) {}
+
private:
/* I am unclear on why we have to make ControlGroup a friend in order
to get access to the ::set_group() method when it is already
diff --git a/libs/ardour/ardour/record_enable_control.h b/libs/ardour/ardour/record_enable_control.h
index d631c500a3..c5cb65c597 100644
--- a/libs/ardour/ardour/record_enable_control.h
+++ b/libs/ardour/ardour/record_enable_control.h
@@ -50,6 +50,7 @@ class LIBARDOUR_API RecordEnableControl : public SlavableAutomationControl
protected:
void actually_set_value (double val, Controllable::GroupControlDisposition gcd);
+ void do_pre_realtime_queue_stuff (double value);
private:
Recordable& _recordable;
diff --git a/libs/ardour/record_enable_control.cc b/libs/ardour/record_enable_control.cc
index f71fd5034b..67375e7431 100644
--- a/libs/ardour/record_enable_control.cc
+++ b/libs/ardour/record_enable_control.cc
@@ -39,21 +39,6 @@ RecordEnableControl::RecordEnableControl (Session& session, std::string const &
void
RecordEnableControl::set_value (double val, Controllable::GroupControlDisposition gcd)
{
- /* do the non-RT part of rec-enabling first - the RT part will be done
- * on the next process cycle. This does mean that theoretically we are
- * doing things provisionally on the assumption that the rec-enable
- * change will work, but this had better be a solid assumption for
- * other reasons.
- */
-
- if (!AudioEngine::instance()->in_process_thread()) {
- if (_recordable.prep_record_enabled (val)) {
- /* failed */
- std::cerr << "Prep rec-enable failed\n";
- return;
- }
- }
-
/* Because we are marked as a RealTime control, this will queue
up the control change to be executed in a realtime context.
*/
@@ -71,3 +56,20 @@ RecordEnableControl::actually_set_value (double val, Controllable::GroupControlD
SlavableAutomationControl::actually_set_value (val, gcd);
}
+void
+RecordEnableControl::do_pre_realtime_queue_stuff (double newval)
+{
+ /* do the non-RT part of rec-enabling first - the RT part will be done
+ * on the next process cycle. This does mean that theoretically we are
+ * doing things provisionally on the assumption that the rec-enable
+ * change will work, but this had better be a solid assumption for
+ * other reasons.
+ *
+ * this is guaranteed to be called from a non-process thread.
+ */
+
+ if (_recordable.prep_record_enabled (newval)) {
+ /* failed */
+ std::cerr << "Prep rec-enable failed\n";
+ }
+}