X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fdiskstream.cc;h=e046d5a830beda849f45ab7a77208f8de90a18ba;hb=944c32346b3c6bb87fccb22f159bdd9297bae50d;hp=7a0b0a81b1bdc255a253fa06dd0fbd1f3cc533c5;hpb=6fa6514cfdb0ce38d93b51197f599dfd091bad1d;p=ardour.git diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc index 7a0b0a81b1..e046d5a830 100644 --- a/libs/ardour/diskstream.cc +++ b/libs/ardour/diskstream.cc @@ -29,9 +29,8 @@ #include #include #include -#include -#include +#include #include "pbd/error.h" #include "pbd/basename.h" @@ -171,7 +170,7 @@ Diskstream::set_track (Track* t) void Diskstream::handle_input_change (IOChange change, void * /*src*/) { - Glib::Mutex::Lock lm (state_lock); + Glib::Threads::Mutex::Lock lm (state_lock); if (change.type & (IOChange::ConfigurationChanged|IOChange::ConnectionsChanged)) { @@ -193,7 +192,7 @@ Diskstream::non_realtime_set_speed () { if (_buffer_reallocation_required) { - Glib::Mutex::Lock lm (state_lock); + Glib::Threads::Mutex::Lock lm (state_lock); allocate_temporary_buffers (); _buffer_reallocation_required = false; @@ -224,8 +223,8 @@ Diskstream::realtime_set_speed (double sp, bool global) if (new_speed != _actual_speed) { - framecnt_t required_wrap_size = (framecnt_t) floor (_session.get_block_size() * - fabs (new_speed)) + 1; + framecnt_t required_wrap_size = (framecnt_t) ceil (_session.get_block_size() * + fabs (new_speed)) + 2; if (required_wrap_size > wrap_buffer_size) { _buffer_reallocation_required = true; @@ -315,7 +314,7 @@ Diskstream::set_loop (Location *location) ARDOUR::framepos_t Diskstream::get_capture_start_frame (uint32_t n) const { - Glib::Mutex::Lock lm (capture_info_lock); + Glib::Threads::Mutex::Lock lm (capture_info_lock); if (capture_info.size() > n) { /* this is a completed capture */ @@ -329,7 +328,7 @@ Diskstream::get_capture_start_frame (uint32_t n) const ARDOUR::framecnt_t Diskstream::get_captured_frames (uint32_t n) const { - Glib::Mutex::Lock lm (capture_info_lock); + Glib::Threads::Mutex::Lock lm (capture_info_lock); if (capture_info.size() > n) { /* this is a completed capture */ @@ -356,7 +355,7 @@ Diskstream::use_playlist (boost::shared_ptr playlist) bool prior_playlist = false; { - Glib::Mutex::Lock lm (state_lock); + Glib::Threads::Mutex::Lock lm (state_lock); if (playlist == _playlist) { return 0; @@ -571,7 +570,7 @@ Diskstream::move_processor_automation (boost::weak_ptr p, list< Evora set const a = processor->what_can_be_automated (); - for (set::iterator i = a.begin (); i != a.end (); ++i) { + for (set::const_iterator i = a.begin (); i != a.end (); ++i) { boost::shared_ptr al = processor->automation_control(*i)->alist(); XMLNode & before = al->get_state (); bool const things_moved = al->move_ranges (movements); @@ -601,7 +600,7 @@ Diskstream::check_record_status (framepos_t transport_frame, bool can_record) */ rolling = _session.transport_speed() != 0.0f; - possibly_recording = (rolling << 2) | (record_enabled() << 1) | can_record; + possibly_recording = (rolling << 2) | ((int)record_enabled() << 1) | (int)can_record; change = possibly_recording ^ last_possibly_recording; if (possibly_recording == last_possibly_recording) { @@ -727,3 +726,16 @@ Diskstream::prepare_to_stop (framepos_t pos) { last_recordable_frame = pos + _capture_offset; } + +void +Diskstream::engage_record_enable () +{ + g_atomic_int_set (&_record_enabled, 1); +} + +void +Diskstream::disengage_record_enable () +{ + g_atomic_int_set (&_record_enabled, 0); +} +