pcm/Traits: add MIN and MAX
Move from PcmClamp().
This commit is contained in:
parent
316a25dead
commit
b43ec3d6f0
@ -51,19 +51,16 @@ static inline typename Traits::value_type
|
||||
PcmClamp(typename Traits::long_type x)
|
||||
{
|
||||
typedef typename Traits::value_type T;
|
||||
typedef typename Traits::long_type U;
|
||||
constexpr U MIN_VALUE = -(U(1) << (Traits::BITS - 1));
|
||||
constexpr U MAX_VALUE = (U(1) << (Traits::BITS - 1)) - 1;
|
||||
|
||||
typedef std::numeric_limits<T> limits;
|
||||
static_assert(MIN_VALUE >= limits::min(), "out of range");
|
||||
static_assert(MAX_VALUE <= limits::max(), "out of range");
|
||||
static_assert(Traits::MIN >= limits::min(), "out of range");
|
||||
static_assert(Traits::MAX <= limits::max(), "out of range");
|
||||
|
||||
if (gcc_unlikely(x < MIN_VALUE))
|
||||
return T(MIN_VALUE);
|
||||
if (gcc_unlikely(x < Traits::MIN))
|
||||
return T(Traits::MIN);
|
||||
|
||||
if (gcc_unlikely(x > MAX_VALUE))
|
||||
return T(MAX_VALUE);
|
||||
if (gcc_unlikely(x > Traits::MAX))
|
||||
return T(Traits::MAX);
|
||||
|
||||
return T(x);
|
||||
}
|
||||
|
@ -74,6 +74,16 @@ struct SampleTraits<SampleFormat::S8> {
|
||||
* not exist if this is not an integer sample format.
|
||||
*/
|
||||
static constexpr unsigned BITS = sizeof(value_type) * 8;
|
||||
|
||||
/**
|
||||
* The minimum sample value.
|
||||
*/
|
||||
static constexpr value_type MIN = -(sum_type(1) << (BITS - 1));
|
||||
|
||||
/**
|
||||
* The maximum sample value.
|
||||
*/
|
||||
static constexpr value_type MAX = (sum_type(1) << (BITS - 1)) - 1;
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -87,6 +97,9 @@ struct SampleTraits<SampleFormat::S16> {
|
||||
|
||||
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
||||
static constexpr unsigned BITS = sizeof(value_type) * 8;
|
||||
|
||||
static constexpr value_type MIN = -(sum_type(1) << (BITS - 1));
|
||||
static constexpr value_type MAX = (sum_type(1) << (BITS - 1)) - 1;
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -100,6 +113,9 @@ struct SampleTraits<SampleFormat::S32> {
|
||||
|
||||
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
||||
static constexpr unsigned BITS = sizeof(value_type) * 8;
|
||||
|
||||
static constexpr value_type MIN = -(sum_type(1) << (BITS - 1));
|
||||
static constexpr value_type MAX = (sum_type(1) << (BITS - 1)) - 1;
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -113,6 +129,9 @@ struct SampleTraits<SampleFormat::S24_P32> {
|
||||
|
||||
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
||||
static constexpr unsigned BITS = 24;
|
||||
|
||||
static constexpr value_type MIN = -(sum_type(1) << (BITS - 1));
|
||||
static constexpr value_type MAX = (sum_type(1) << (BITS - 1)) - 1;
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -125,6 +144,9 @@ struct SampleTraits<SampleFormat::FLOAT> {
|
||||
typedef float long_type;
|
||||
|
||||
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
||||
|
||||
static constexpr value_type MIN = -1;
|
||||
static constexpr value_type MAX = 1;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user