- /* caller must hold process lock */
-
- if (_has_been_mixed_down) {
- return *_buffer;
- }
-
- if (receives_input ()) {
-
- /* INPUT */
-
- /* If we're external (), we have some data in our buffer set up by JACK;
- otherwise, we have an undefined buffer. In either case we mix down
- our non-JACK inputs; either accumulating into the JACK data or
- overwriting the undefined data */
-
- mixdown (nframes, offset, !external ());
-
- } else {
-
- /* OUTPUT */
-
- if (!external ()) {
- /* start internal output buffers with silence */
- _buffer->silence (nframes, offset);
+ if (sends_output() && !_buffer->written()) {
+ if (_buffer->capacity() >= nframes) {
+ _buffer->silence (nframes);