X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fdiskstream.cc;h=a359f228e8d68c7818d46141578cfb696e2bd8a9;hb=985e3dcc50fc7dd66a258ae0758956a1fff8f3bd;hp=6e23eb81aacc534a68df54f9ad9b9f9afb310f1a;hpb=a2897ecef6da6a458aa1de8c2d9973a1e809dca2;p=ardour.git diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc index 6e23eb81aa..a359f228e8 100644 --- a/libs/ardour/diskstream.cc +++ b/libs/ardour/diskstream.cc @@ -31,8 +31,7 @@ #include #include - -#include +#include #include "pbd/error.h" #include "pbd/basename.h" @@ -40,22 +39,12 @@ #include "pbd/xml++.h" #include "pbd/stacktrace.h" -#include "ardour/ardour.h" -#include "ardour/audioengine.h" #include "ardour/debug.h" #include "ardour/diskstream.h" -#include "ardour/utils.h" -#include "ardour/configuration.h" -#include "ardour/audiofilesource.h" -#include "ardour/send.h" +#include "ardour/io.h" #include "ardour/pannable.h" -#include "ardour/panner_shell.h" #include "ardour/playlist.h" -#include "ardour/cycle_timer.h" -#include "ardour/region.h" -#include "ardour/panner.h" #include "ardour/session.h" -#include "ardour/io.h" #include "ardour/track.h" #include "i18n.h" @@ -182,7 +171,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)) { @@ -204,7 +193,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; @@ -235,8 +224,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; @@ -326,7 +315,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 */ @@ -340,7 +329,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 */ @@ -367,7 +356,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; @@ -738,3 +727,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); +} +