diff options
author | David Robillard <d@drobilla.net> | 2009-10-20 02:14:53 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-10-20 02:14:53 +0000 |
commit | ed3b46e03bb06e8f0f1624c27fb72244fac23538 (patch) | |
tree | fab02c695794c0719d3bf382bb1adb1fb7258d88 | |
parent | 22fd9aec55587a50c427fff8f5e800afcef6ac69 (diff) |
Factor out more duplicated code.
git-svn-id: svn://localhost/ardour2/branches/3.0@5819 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | libs/ardour/ardour/diskstream.h | 5 | ||||
-rw-r--r-- | libs/ardour/audio_diskstream.cc | 44 | ||||
-rw-r--r-- | libs/ardour/diskstream.cc | 45 | ||||
-rw-r--r-- | libs/ardour/midi_diskstream.cc | 44 |
4 files changed, 53 insertions, 85 deletions
diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h index d6f3b739e9..e135d1319b 100644 --- a/libs/ardour/ardour/diskstream.h +++ b/libs/ardour/ardour/diskstream.h @@ -131,7 +131,7 @@ class Diskstream : public SessionObject, public boost::noncopyable /* Stateful */ virtual XMLNode& get_state(void) = 0; virtual int set_state(const XMLNode&, int version) = 0; - + virtual void monitor_input (bool) {} nframes_t capture_offset() const { return _capture_offset; } @@ -246,6 +246,9 @@ class Diskstream : public SessionObject, public boost::noncopyable virtual void setup_destructive_playlist () {} virtual void use_destructive_playlist () {} + void calculate_record_range(OverlapType ot, sframes_t transport_frame, nframes_t nframes, + nframes_t& rec_nframes, nframes_t& rec_offset); + static nframes_t disk_io_chunk_frames; std::vector<CaptureInfo*> capture_info; Glib::Mutex capture_info_lock; diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 4f631c50cb..599e5ea1f9 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -470,54 +470,14 @@ AudioDiskstream::process (nframes_t transport_frame, nframes_t nframes, bool can } if (nominally_recording || (_session.get_record_enabled() && _session.config.get_punch_in())) { - OverlapType ot; - // Safeguard against situations where process() goes haywire when autopunching and last_recordable_frame < first_recordable_frame if (last_recordable_frame < first_recordable_frame) { last_recordable_frame = max_frames; } - ot = coverage (first_recordable_frame, last_recordable_frame, transport_frame, transport_frame + nframes); - - switch (ot) { - case OverlapNone: - rec_nframes = 0; - break; - - case OverlapInternal: - /* ---------- recrange - |---| transrange - */ - rec_nframes = nframes; - rec_offset = 0; - break; - - case OverlapStart: - /* |--------| recrange - -----| transrange - */ - rec_nframes = transport_frame + nframes - first_recordable_frame; - if (rec_nframes) { - rec_offset = first_recordable_frame - transport_frame; - } - break; - - case OverlapEnd: - /* |--------| recrange - |-------- transrange - */ - rec_nframes = last_recordable_frame - transport_frame; - rec_offset = 0; - break; + OverlapType ot = coverage (first_recordable_frame, last_recordable_frame, transport_frame, transport_frame + nframes); - case OverlapExternal: - /* |--------| recrange - -------------- transrange - */ - rec_nframes = last_recordable_frame - first_recordable_frame; - rec_offset = first_recordable_frame - transport_frame; - break; - } + calculate_record_range(ot, transport_frame, nframes, rec_nframes, rec_offset); if (rec_nframes && !was_recording) { capture_captured = 0; diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc index 0b4c98eaa3..aaeb15a995 100644 --- a/libs/ardour/diskstream.cc +++ b/libs/ardour/diskstream.cc @@ -594,3 +594,48 @@ Diskstream::route_going_away () { _io.reset (); } + +void +Diskstream::calculate_record_range(OverlapType ot, sframes_t transport_frame, nframes_t nframes, + nframes_t& rec_nframes, nframes_t& rec_offset) +{ + switch (ot) { + case OverlapNone: + rec_nframes = 0; + break; + + case OverlapInternal: + /* ---------- recrange + |---| transrange + */ + rec_nframes = nframes; + rec_offset = 0; + break; + + case OverlapStart: + /* |--------| recrange + -----| transrange + */ + rec_nframes = transport_frame + nframes - first_recordable_frame; + if (rec_nframes) { + rec_offset = first_recordable_frame - transport_frame; + } + break; + + case OverlapEnd: + /* |--------| recrange + |-------- transrange + */ + rec_nframes = last_recordable_frame - transport_frame; + rec_offset = 0; + break; + + case OverlapExternal: + /* |--------| recrange + -------------- transrange + */ + rec_nframes = last_recordable_frame - first_recordable_frame; + rec_offset = first_recordable_frame - transport_frame; + break; + } +} diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index 8172bd9d66..12d39426d8 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -528,49 +528,9 @@ MidiDiskstream::process (nframes_t transport_frame, nframes_t nframes, bool can_ adjust_capture_position = 0; if (nominally_recording || (_session.get_record_enabled() && _session.config.get_punch_in())) { - OverlapType ot; + OverlapType ot = coverage (first_recordable_frame, last_recordable_frame, transport_frame, transport_frame + nframes); - ot = coverage (first_recordable_frame, last_recordable_frame, transport_frame, transport_frame + nframes); - - switch (ot) { - case OverlapNone: - rec_nframes = 0; - break; - - case OverlapInternal: - /* ---------- recrange - |---| transrange - */ - rec_nframes = nframes; - rec_offset = 0; - break; - - case OverlapStart: - /* |--------| recrange - -----| transrange - */ - rec_nframes = transport_frame + nframes - first_recordable_frame; - if (rec_nframes) { - rec_offset = first_recordable_frame - transport_frame; - } - break; - - case OverlapEnd: - /* |--------| recrange - |-------- transrange - */ - rec_nframes = last_recordable_frame - transport_frame; - rec_offset = 0; - break; - - case OverlapExternal: - /* |--------| recrange - -------------- transrange - */ - rec_nframes = last_recordable_frame - last_recordable_frame; - rec_offset = first_recordable_frame - transport_frame; - break; - } + calculate_record_range(ot, transport_frame, nframes, rec_nframes, rec_offset); if (rec_nframes && !was_recording) { capture_captured = 0; |