From 477bc772beaf1214e309edd4fb748621c07e2e7b Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 18 Nov 2009 17:58:38 +0000 Subject: [PATCH] Make BufferSet::is_silent work so that session silent_buffers are correctly silenced, preventing feedback from occurring with plugins that output non-zero values for zero inputs. git-svn-id: svn://localhost/ardour2/branches/3.0@6124 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/buffer.h | 1 + libs/ardour/ardour/buffer_set.h | 3 +-- libs/ardour/buffer_set.cc | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libs/ardour/ardour/buffer.h b/libs/ardour/ardour/buffer.h index 46a6d62667..48fd7f099b 100644 --- a/libs/ardour/ardour/buffer.h +++ b/libs/ardour/ardour/buffer.h @@ -61,6 +61,7 @@ public: DataType type() const { return _type; } bool silent() const { return _silent; } + void is_silent(bool yn) { _silent = yn; } /** Reallocate the buffer used internally to handle at least @a size_t units of data. * diff --git a/libs/ardour/ardour/buffer_set.h b/libs/ardour/ardour/buffer_set.h index f9547e69a2..0c4d5671d3 100644 --- a/libs/ardour/ardour/buffer_set.h +++ b/libs/ardour/ardour/buffer_set.h @@ -76,8 +76,7 @@ public: const ChanCount& count() const { return _count; } ChanCount& count() { return _count; } - void is_silent(bool yn) { _is_silent = yn; } - bool is_silent() const { return _is_silent; } + void is_silent(bool yn); void silence (nframes_t nframes, nframes_t offset); bool is_mirror() const { return _is_mirror; } diff --git a/libs/ardour/buffer_set.cc b/libs/ardour/buffer_set.cc index c77db6a683..70f75985f7 100644 --- a/libs/ardour/buffer_set.cc +++ b/libs/ardour/buffer_set.cc @@ -335,5 +335,16 @@ BufferSet::silence (nframes_t nframes, nframes_t offset) } } +void +BufferSet::is_silent (bool yn) +{ + for (std::vector::iterator i = _buffers.begin(); i != _buffers.end(); ++i) { + for (BufferVec::iterator b = i->begin(); b != i->end(); ++b) { + (*b)->is_silent (yn); + } + } + +} + } // namespace ARDOUR