- /* note: this is only called for input ports */
-
- if (_connections.empty()) {
-
- /* no internal mixing to do, so for internal ports
- just make sure the buffer is silent.
- */
-
- if (!external()) {
- _buffer->silence (cnt, offset);
- }
-
- } else {
-
- set<Port*>::const_iterator p = _connections.begin();
-
- /* mix in internally-connected ports. if this is an external port
- then it may already have data present from JACK. in that case, we
- do not want to overwrite that data, so we skip the initial ::read_from()
- call and do everything with accumulate_from()
- */
-
- if (!external()) {
- _buffer->read_from (dynamic_cast<AudioPort*>(*p)->get_audio_buffer (cnt, offset), cnt, offset);
- ++p;
-
+ if (sends_output() && !_buffer->written()) {
+ if (_buffer->capacity() >= nframes) {
+ _buffer->silence (nframes);