summaryrefslogtreecommitdiff
path: root/libs/ardour/diskstream.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-06-16 08:44:03 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-06-16 08:44:03 -0400
commit90220998af4f9683d696b511a09b34034e799093 (patch)
treee974251993f9bf8b33c26bdeb117a8759b476d77 /libs/ardour/diskstream.cc
parentd65f03d07455c4ea38084af71a38c383bd2b3e19 (diff)
add Record-Safe feature to libardour (from Nikolay Polyanovskii)
Diffstat (limited to 'libs/ardour/diskstream.cc')
-rw-r--r--libs/ardour/diskstream.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc
index 49d9d62ec4..9f3322dade 100644
--- a/libs/ardour/diskstream.cc
+++ b/libs/ardour/diskstream.cc
@@ -64,6 +64,7 @@ Diskstream::Diskstream (Session &sess, const string &name, Flag flag)
, i_am_the_modifier (0)
, _track (0)
, _record_enabled (0)
+ , _record_safe (0)
, _visible_speed (1.0f)
, _actual_speed (1.0f)
, _buffer_reallocation_required (false)
@@ -102,6 +103,7 @@ Diskstream::Diskstream (Session& sess, const XMLNode& /*node*/)
, i_am_the_modifier (0)
, _track (0)
, _record_enabled (0)
+ , _record_safe (0)
, _visible_speed (1.0f)
, _actual_speed (1.0f)
, _buffer_reallocation_required (false)
@@ -468,6 +470,7 @@ Diskstream::get_state ()
snprintf (buf, sizeof(buf), "%f", _visible_speed);
node->add_property ("speed", buf);
node->add_property ("capture-alignment", enum_2_string (_alignment_choice));
+ node->add_property ("record-safe", _record_safe ? "yes" : "no");
if (_extra_xml) {
node->add_child_copy (*_extra_xml);
@@ -516,8 +519,12 @@ Diskstream::set_state (const XMLNode& node, int /*version*/)
non_realtime_set_speed ();
}
}
+
+ if ((prop = node.property ("record-safe")) != 0) {
+ _record_safe = PBD::string_is_affirmative (prop->value()) ? 1 : 0;
+ }
- return 0;
+ return 0;
}
void
@@ -769,6 +776,18 @@ Diskstream::disengage_record_enable ()
g_atomic_int_set (&_record_enabled, 0);
}
+void
+Diskstream::engage_record_safe ()
+{
+ g_atomic_int_set (&_record_safe, 1);
+}
+
+void
+Diskstream::disengage_record_safe ()
+{
+ g_atomic_int_set (&_record_safe, 0);
+}
+
framecnt_t
Diskstream::default_disk_read_chunk_frames()
{