Skip to content

Commit 4e00207

Browse files
committed
Add audio_data_interleaved constructor
1 parent 49ba538 commit 4e00207

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

include/kfr/audio/data.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,17 @@ struct audio_data
504504
[[nodiscard]] audio_data(std::span<fbase* const> pointers, size_t size)
505505
requires(!Interleaved);
506506

507+
[[nodiscard]] audio_data(fbase* pointer, size_t channels, size_t size)
508+
requires(Interleaved);
509+
510+
template <std::invocable Fn>
511+
[[nodiscard]] audio_data(fbase* pointer, size_t channels, size_t size, Fn&& deallocator)
512+
requires(Interleaved)
513+
: audio_data(pointer, channels, size)
514+
{
515+
deallocator.reset(new details::lambda_deallocator<Fn>{ std::forward<Fn>(deallocator) });
516+
}
517+
507518
/**
508519
* @brief Constructs an audio_data buffer with the specified channel count and optional initial size.
509520
*

src/audio/data.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ audio_data<Interleaved>::audio_data(std::span<fbase* const> pointers, size_t siz
3838
std::copy(pointers.begin(), pointers.end(), data.begin());
3939
}
4040

41+
template <bool Interleaved>
42+
audio_data<Interleaved>::audio_data(fbase* pointer, size_t channels, size_t size)
43+
requires(Interleaved)
44+
: channels(channels), data(pointer), size(size), capacity(size)
45+
{
46+
KFR_ASSERT(channels > 0);
47+
KFR_ASSERT(channels <= max_audio_channels);
48+
}
49+
4150
template <bool Interleaved>
4251
audio_data<Interleaved>::audio_data(size_t channels, size_t size)
4352
: channels(channels), size(size), capacity(size)

0 commit comments

Comments
 (0)