diff options
Diffstat (limited to 'src/pcm')
-rw-r--r-- | src/pcm/Traits.hxx | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/pcm/Traits.hxx b/src/pcm/Traits.hxx index b102b41ab..58a61c9c5 100644 --- a/src/pcm/Traits.hxx +++ b/src/pcm/Traits.hxx @@ -51,6 +51,13 @@ struct SampleTraits<SampleFormat::S8> { typedef const value_type *const_pointer_type; /** + * A "long" type that is large and accurate enough for + * arithmetic without risking an (integer) overflow or + * (floating point) precision loss. + */ + typedef int long_type; + + /** * The size of one sample in bytes. */ static constexpr size_t SAMPLE_SIZE = sizeof(value_type); @@ -68,6 +75,8 @@ struct SampleTraits<SampleFormat::S16> { typedef value_type *pointer_type; typedef const value_type *const_pointer_type; + typedef int long_type; + static constexpr size_t SAMPLE_SIZE = sizeof(value_type); static constexpr unsigned BITS = sizeof(value_type) * 8; }; @@ -78,6 +87,8 @@ struct SampleTraits<SampleFormat::S32> { typedef value_type *pointer_type; typedef const value_type *const_pointer_type; + typedef int64_t long_type; + static constexpr size_t SAMPLE_SIZE = sizeof(value_type); static constexpr unsigned BITS = sizeof(value_type) * 8; }; @@ -88,6 +99,8 @@ struct SampleTraits<SampleFormat::S24_P32> { typedef value_type *pointer_type; typedef const value_type *const_pointer_type; + typedef int long_type; + static constexpr size_t SAMPLE_SIZE = sizeof(value_type); static constexpr unsigned BITS = 24; }; |