X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fdiskstream.cc;h=a359f228e8d68c7818d46141578cfb696e2bd8a9;hb=3566fa2d8ef069805c70e39101a129c35419ded7;hp=6501998171887ab2e7246351690214223f50d8a4;hpb=8f5dd22c511737e4da61a727498d7229ddb588c1;p=ardour.git diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc index 6501998171..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" @@ -84,7 +73,6 @@ Diskstream::Diskstream (Session &sess, const string &name, Flag flag) , _actual_speed (1.0f) , _buffer_reallocation_required (false) , _seek_required (false) - , force_refill (false) , capture_start_frame (0) , capture_captured (0) , was_recording (false) @@ -96,7 +84,6 @@ Diskstream::Diskstream (Session &sess, const string &name, Flag flag) , last_possibly_recording (0) , _alignment_style (ExistingMaterial) , _alignment_choice (Automatic) - , _scrubbing (false) , _slaved (false) , loop_location (0) , overwrite_frame (0) @@ -109,9 +96,6 @@ Diskstream::Diskstream (Session &sess, const string &name, Flag flag) , _target_speed (_speed) , file_frame (0) , playback_sample (0) - , playback_distance (0) - , _read_data_count (0) - , _write_data_count (0) , in_set_state (false) , _flags (flag) , deprecated_io_node (0) @@ -127,7 +111,6 @@ Diskstream::Diskstream (Session& sess, const XMLNode& /*node*/) , _actual_speed (1.0f) , _buffer_reallocation_required (false) , _seek_required (false) - , force_refill (false) , capture_start_frame (0) , capture_captured (0) , was_recording (false) @@ -139,7 +122,6 @@ Diskstream::Diskstream (Session& sess, const XMLNode& /*node*/) , last_possibly_recording (0) , _alignment_style (ExistingMaterial) , _alignment_choice (Automatic) - , _scrubbing (false) , _slaved (false) , loop_location (0) , overwrite_frame (0) @@ -152,9 +134,6 @@ Diskstream::Diskstream (Session& sess, const XMLNode& /*node*/) , _target_speed (_speed) , file_frame (0) , playback_sample (0) - , playback_distance (0) - , _read_data_count (0) - , _write_data_count (0) , in_set_state (false) , _flags (Recordable) , deprecated_io_node (0) @@ -192,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)) { @@ -214,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; @@ -245,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; @@ -336,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 */ @@ -350,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 */ @@ -377,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; @@ -495,13 +474,9 @@ Diskstream::set_state (const XMLNode& node, int /*version*/) } if (deprecated_io_node) { - if ((prop = deprecated_io_node->property ("id")) != 0) { - _id = prop->value (); - } + set_id (*deprecated_io_node); } else { - if ((prop = node.property ("id")) != 0) { - _id = prop->value (); - } + set_id (node); } if ((prop = node.property ("flags")) != 0) { @@ -518,16 +493,8 @@ Diskstream::set_state (const XMLNode& node, int /*version*/) return -1; } - { - bool had_playlist = (_playlist != 0); - - if (find_and_use_playlist (prop->value())) { - return -1; - } - - if (!had_playlist) { - _playlist->set_orig_diskstream_id (id()); - } + if (find_and_use_playlist (prop->value())) { + return -1; } if ((prop = node.property ("speed")) != 0) { @@ -707,15 +674,15 @@ Diskstream::route_going_away () } void -Diskstream::calculate_record_range(OverlapType ot, framepos_t transport_frame, framecnt_t nframes, - framecnt_t & rec_nframes, framecnt_t & rec_offset) +Diskstream::calculate_record_range (Evoral::OverlapType ot, framepos_t transport_frame, framecnt_t nframes, + framecnt_t & rec_nframes, framecnt_t & rec_offset) { switch (ot) { - case OverlapNone: + case Evoral::OverlapNone: rec_nframes = 0; break; - case OverlapInternal: + case Evoral::OverlapInternal: /* ---------- recrange |---| transrange */ @@ -723,7 +690,7 @@ Diskstream::calculate_record_range(OverlapType ot, framepos_t transport_frame, f rec_offset = 0; break; - case OverlapStart: + case Evoral::OverlapStart: /* |--------| recrange -----| transrange */ @@ -733,7 +700,7 @@ Diskstream::calculate_record_range(OverlapType ot, framepos_t transport_frame, f } break; - case OverlapEnd: + case Evoral::OverlapEnd: /* |--------| recrange |-------- transrange */ @@ -741,7 +708,7 @@ Diskstream::calculate_record_range(OverlapType ot, framepos_t transport_frame, f rec_offset = 0; break; - case OverlapExternal: + case Evoral::OverlapExternal: /* |--------| recrange -------------- transrange */ @@ -760,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); +} +