- if (_buffers) {
- /* We have some buffers, so we are moving the audio later */
-
- /* Copy the input data */
- AudioBuffers input (*data.get ());
-
- int to_do = data->frames ();
-
- /* Write some of our buffer to the output */
- int const from_buffer = min (to_do, _buffers->frames());
- data->copy_from (_buffers.get(), from_buffer, 0, 0);
- to_do -= from_buffer;
-
- /* Write some of the input to the output */
- int const from_input = to_do;
- data->copy_from (&input, from_input, 0, from_buffer);
-
- int const left_in_buffer = _buffers->frames() - from_buffer;
-
- /* Shuffle our buffer down */
- _buffers->move (from_buffer, 0, left_in_buffer);
-
- /* Copy remaining input data to our buffer */
- _buffers->copy_from (&input, input.frames() - from_input, from_input, left_in_buffer);
-
- } else {
-
- /* Chop the initial data off until _negative_delay_remaining
- is zero, then just pass data.
- */
-
- int const to_do = min (data->frames(), _negative_delay_remaining);
- if (to_do) {
- data->move (to_do, 0, data->frames() - to_do);
- data->set_frames (data->frames() - to_do);
- _negative_delay_remaining -= to_do;
- }