diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-04-07 13:54:23 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-04-07 13:54:23 +0000 |
commit | 070a905ba6e3e01a1a586957755b950a79cfaa72 (patch) | |
tree | 55dfb023d58a24cdec73b1a3201cd4ca817be907 /libs | |
parent | a2d2b69be208a27f334ffe5d503bbcb170f95291 (diff) |
fix for wierd punch behaviour where non-rec-enabled tracks end up with regions (typically at zero on the timeline) after a punch/capture pass. needs careful and thorough testing
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6872 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/audio_diskstream.cc | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 16cda7fdd3..8e987c4f54 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -410,7 +410,7 @@ AudioDiskstream::check_record_status (nframes_t transport_frame, nframes_t nfram /* starting to record: compute first+last frames */ first_recordable_frame = transport_frame + _capture_offset; - // cerr << "set FRF = " << transport_frame << " + " << _capture_offset << " = " << first_recordable_frame << endl; + // cerr << _name << " set FRF = " << transport_frame << " + " << _capture_offset << " = " << first_recordable_frame << endl; last_recordable_frame = max_frames; capture_start_frame = transport_frame; @@ -419,10 +419,10 @@ AudioDiskstream::check_record_status (nframes_t transport_frame, nframes_t nfram /* was stopped, now rolling (and recording) */ if (_alignment_style == ExistingMaterial) { - //cerr << "A FRF += " << _session.worst_output_latency () << endl; + // cerr << "\tA FRF += " << _session.worst_output_latency () << endl; first_recordable_frame += _session.worst_output_latency(); } else { - // cerr << "B FRF += " << _roll_delay<< endl; + // cerr << "\tB FRF += " << _roll_delay<< endl; first_recordable_frame += _roll_delay; } @@ -545,10 +545,21 @@ AudioDiskstream::process (nframes_t transport_frame, nframes_t nframes, bool can (*chan)->current_playback_buffer = 0; } - if (nominally_recording || (_session.get_record_enabled() && Config->get_punch_in())) { + /* two conditions to test for here: + + A: this track is rec-enabled, and the session has confirmed that we can record + B: this track is rec-enabled, has been recording, and we are set up for auto-punch-in + + The second test is necessary to capture the extra material that arrives AFTER the transport + frame has left the punch range (which will cause the "can_record" argument to be false). + */ + + if (nominally_recording || (re && was_recording && _session.get_record_enabled() && Config->get_punch_out())) { OverlapType ot; - // Safeguard against situations where process() goes haywire when autopunching and last_recordable_frame < first_recordable_frame + // 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; @@ -1800,7 +1811,9 @@ void AudioDiskstream::finish_capture (bool rec_monitors_input, boost::shared_ptr<ChannelList> c) { was_recording = false; - + first_recordable_frame = max_frames; + last_recordable_frame = max_frames; + if (capture_captured == 0) { return; } |