summaryrefslogtreecommitdiff
path: root/src/lib/audio_buffers.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-08-15 15:46:19 +0200
committerCarl Hetherington <cth@carlh.net>2023-08-15 18:27:05 +0200
commita7ed400c81c65a11623418d08cd5c953826754bd (patch)
treea95e9a2f648e80ede281e33b8f5daf1856063593 /src/lib/audio_buffers.cc
parent112911198b74cde35bcec6c1a1a571a84c950851 (diff)
Add Audiobuffers::set_channels().
Diffstat (limited to 'src/lib/audio_buffers.cc')
-rw-r--r--src/lib/audio_buffers.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/lib/audio_buffers.cc b/src/lib/audio_buffers.cc
index 119a499b4..4f01146f9 100644
--- a/src/lib/audio_buffers.cc
+++ b/src/lib/audio_buffers.cc
@@ -335,3 +335,22 @@ AudioBuffers::update_data_pointers ()
}
}
+
+/** Set a new channel count, either discarding data (if new_channels is less than the current
+ * channels()), or filling with silence (if new_channels is more than the current channels()
+ */
+void
+AudioBuffers::set_channels(int new_channels)
+{
+ DCPOMATIC_ASSERT(new_channels > 0);
+
+ ScopeGuard sg = [this]() { update_data_pointers(); };
+
+ int const old_channels = channels();
+ _data.resize(new_channels);
+
+ for (int channel = old_channels; channel < new_channels; ++channel) {
+ _data[channel].resize(frames());
+ }
+}
+