Merge branch 'master' into cairocanvas
[ardour.git] / libs / ardour / audio_buffer.cc
index a36ad81c2ae118d39195a9e874e92e6eb1b38f67..aa4f64755aeb9399d31e402b8703eae2dd1a4d1d 100644 (file)
@@ -76,12 +76,26 @@ AudioBuffer::resize (size_t size)
 }
 
 bool
-AudioBuffer::check_silence (pframes_t nframes, pframes_t& n) const
+AudioBuffer::check_silence (pframes_t nframes, bool wholebuffer, pframes_t& n) const
 {
-       for (n = 0; n < _size && n < nframes; ++n) {
+       for (n = 0; (wholebuffer || n < _size) &&  n < nframes; ++n) {
                if (_data[n] != Sample (0)) {
                        return false;
                }
        }
        return true;
 }
+
+void
+AudioBuffer::silence (framecnt_t len, framecnt_t offset) {
+
+       if (!_silent) {
+               assert(_capacity > 0);
+               assert(offset + len <= _capacity);
+               memset(_data + offset, 0, sizeof (Sample) * len);
+               if (len == _capacity) {
+                       _silent = true;
+               }
+       }
+       _written = true;
+}