From 3511852f39cd5023ec8e6d0b94cc69f34e9201ed Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 3 Aug 2023 15:32:28 +1000 Subject: Add very limited resampling (it's slow as shit) --- src/audio/include/stream_info.hpp | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'src/audio/include/stream_info.hpp') diff --git a/src/audio/include/stream_info.hpp b/src/audio/include/stream_info.hpp index d48c39a8..d31e035c 100644 --- a/src/audio/include/stream_info.hpp +++ b/src/audio/include/stream_info.hpp @@ -56,6 +56,18 @@ class StreamInfo { bool operator==(const Encoded&) const = default; }; + /* + * Two-channel, interleaved, 32-bit floating point pcm samples. + */ + struct FloatingPointPcm { + // Number of channels in this stream. + uint8_t channels; + // The sample rate. + uint32_t sample_rate; + + bool operator==(const FloatingPointPcm&) const = default; + }; + struct Pcm { // Number of channels in this stream. uint8_t channels; @@ -64,10 +76,14 @@ class StreamInfo { // The sample rate. uint32_t sample_rate; + auto real_bytes_per_sample() const -> uint8_t { + return bits_per_sample == 16 ? 2 : 4; + } + bool operator==(const Pcm&) const = default; }; - typedef std::variant Format; + typedef std::variant Format; auto format() const -> const Format& { return format_; } auto set_format(Format f) -> void { format_ = f; } @@ -98,6 +114,12 @@ class RawStream { auto info() -> StreamInfo& { return info_; } auto data() -> cpp::span; + template + auto data_as() -> cpp::span { + auto orig = data(); + return {reinterpret_cast(orig.data()), orig.size_bytes() / sizeof(T)}; + } + auto empty() const -> bool { return info_.bytes_in_stream() == 0; } private: StreamInfo info_; @@ -114,6 +136,12 @@ class InputStream { const StreamInfo& info() const; cpp::span data() const; + template + auto data_as() const -> cpp::span { + auto orig = data(); + return {reinterpret_cast(orig.data()), + orig.size_bytes() / sizeof(T)}; + } private: RawStream* raw_; @@ -131,6 +159,11 @@ class OutputStream { const StreamInfo& info() const; cpp::span data() const; + template + auto data_as() const -> cpp::span { + auto orig = data(); + return {reinterpret_cast(orig.data()), orig.size_bytes() / sizeof(T)}; + } private: RawStream* raw_; -- cgit v1.2.3