(Untested) loop recording support in MIDI Diskstream (fix compilation broken by loop recording changes).

git-svn-id: svn://localhost/ardour2/trunk@2036 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2007-06-26 04:16:17 +00:00
parent e9b1b7110b
commit 72b0e4399c
2 changed files with 32 additions and 0 deletions

View file

@ -127,6 +127,7 @@ class MidiDiskstream : public Diskstream
void finish_capture (bool rec_monitors_input);
void transport_stopped (struct tm&, time_t, bool abort);
void transport_looped (nframes_t transport_frame);
void init (Diskstream::Flag);
@ -145,6 +146,8 @@ class MidiDiskstream : public Diskstream
void engage_record_enable ();
void disengage_record_enable ();
/* FIXME: too much code duplication in this class because of lack of ChannelInfo */
MidiRingBuffer* _playback_buf;
MidiRingBuffer* _capture_buf;
MidiPort* _source_port;

View file

@ -1106,6 +1106,35 @@ MidiDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_cap
capture_start_frame = 0;
}
void
MidiDiskstream::transport_looped (nframes_t transport_frame)
{
if (was_recording) {
// adjust the capture length knowing that the data will be recorded to disk
// only necessary after the first loop where we're recording
if (capture_info.size() == 0) {
capture_captured += _capture_offset;
if (_alignment_style == ExistingMaterial) {
capture_captured += _session.worst_output_latency();
} else {
capture_captured += _roll_delay;
}
}
finish_capture (true);
// the next region will start recording via the normal mechanism
// we'll set the start position to the current transport pos
// no latency adjustment or capture offset needs to be made, as that already happened the first time
capture_start_frame = transport_frame;
first_recordable_frame = transport_frame; // mild lie
last_recordable_frame = max_frames;
was_recording = true;
}
}
void
MidiDiskstream::finish_capture (bool rec_monitors_input)
{