diff options
author | Chris Robinson <[email protected]> | 2023-11-15 00:52:57 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2023-11-15 00:52:57 -0800 |
commit | fe5b3f4fed727b6cf0e98a3454070a53ffcb2ee6 (patch) | |
tree | 784ac3793ef94cff7b4f1ab21f51f68b0e606dec /core | |
parent | b5f5622de373ebb3dac9a1b0ce15a12d84e03b19 (diff) |
Support 32-bit int sample storage
Diffstat (limited to 'core')
-rw-r--r-- | core/buffer_storage.cpp | 2 | ||||
-rw-r--r-- | core/buffer_storage.h | 1 | ||||
-rw-r--r-- | core/fmt_traits.h | 8 | ||||
-rw-r--r-- | core/voice.cpp | 1 |
4 files changed, 12 insertions, 0 deletions
diff --git a/core/buffer_storage.cpp b/core/buffer_storage.cpp index 98ca2c1b..6ffab124 100644 --- a/core/buffer_storage.cpp +++ b/core/buffer_storage.cpp @@ -12,6 +12,7 @@ const char *NameFromFormat(FmtType type) noexcept { case FmtUByte: return "UInt8"; case FmtShort: return "Int16"; + case FmtInt: return "Int32"; case FmtFloat: return "Float"; case FmtDouble: return "Double"; case FmtMulaw: return "muLaw"; @@ -49,6 +50,7 @@ uint BytesFromFmt(FmtType type) noexcept { case FmtUByte: return sizeof(uint8_t); case FmtShort: return sizeof(int16_t); + case FmtInt: return sizeof(int32_t); case FmtFloat: return sizeof(float); case FmtDouble: return sizeof(double); case FmtMulaw: return sizeof(uint8_t); diff --git a/core/buffer_storage.h b/core/buffer_storage.h index d8ab0b67..3b581b5e 100644 --- a/core/buffer_storage.h +++ b/core/buffer_storage.h @@ -15,6 +15,7 @@ using uint = unsigned int; enum FmtType : unsigned char { FmtUByte, FmtShort, + FmtInt, FmtFloat, FmtDouble, FmtMulaw, diff --git a/core/fmt_traits.h b/core/fmt_traits.h index 1879c81b..02473014 100644 --- a/core/fmt_traits.h +++ b/core/fmt_traits.h @@ -31,6 +31,14 @@ struct FmtTypeTraits<FmtShort> { static constexpr OutT to(const Type val) noexcept { return val*OutT{1.0/32768.0}; } }; template<> +struct FmtTypeTraits<FmtInt> { + using Type = int32_t; + + template<typename OutT> + static constexpr OutT to(const Type val) noexcept + { return static_cast<OutT>(val)*OutT{1.0/2147483648.0}; } +}; +template<> struct FmtTypeTraits<FmtFloat> { using Type = float; diff --git a/core/voice.cpp b/core/voice.cpp index b8acc7a6..3889c42d 100644 --- a/core/voice.cpp +++ b/core/voice.cpp @@ -474,6 +474,7 @@ void LoadSamples(float *dstSamples, const std::byte *src, const size_t srcChan, { HANDLE_FMT(FmtUByte); HANDLE_FMT(FmtShort); + HANDLE_FMT(FmtInt); HANDLE_FMT(FmtFloat); HANDLE_FMT(FmtDouble); HANDLE_FMT(FmtMulaw); |