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)
|
PcmClamp(typename Traits::long_type x)
|
||||||
{
|
{
|
||||||
typedef typename Traits::value_type T;
|
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;
|
typedef std::numeric_limits<T> limits;
|
||||||
static_assert(MIN_VALUE >= limits::min(), "out of range");
|
static_assert(Traits::MIN >= limits::min(), "out of range");
|
||||||
static_assert(MAX_VALUE <= limits::max(), "out of range");
|
static_assert(Traits::MAX <= limits::max(), "out of range");
|
||||||
|
|
||||||
if (gcc_unlikely(x < MIN_VALUE))
|
if (gcc_unlikely(x < Traits::MIN))
|
||||||
return T(MIN_VALUE);
|
return T(Traits::MIN);
|
||||||
|
|
||||||
if (gcc_unlikely(x > MAX_VALUE))
|
if (gcc_unlikely(x > Traits::MAX))
|
||||||
return T(MAX_VALUE);
|
return T(Traits::MAX);
|
||||||
|
|
||||||
return T(x);
|
return T(x);
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,16 @@ struct SampleTraits<SampleFormat::S8> {
|
|||||||
* not exist if this is not an integer sample format.
|
* not exist if this is not an integer sample format.
|
||||||
*/
|
*/
|
||||||
static constexpr unsigned BITS = sizeof(value_type) * 8;
|
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<>
|
template<>
|
||||||
@ -87,6 +97,9 @@ struct SampleTraits<SampleFormat::S16> {
|
|||||||
|
|
||||||
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
||||||
static constexpr unsigned BITS = sizeof(value_type) * 8;
|
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<>
|
template<>
|
||||||
@ -100,6 +113,9 @@ struct SampleTraits<SampleFormat::S32> {
|
|||||||
|
|
||||||
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
||||||
static constexpr unsigned BITS = sizeof(value_type) * 8;
|
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<>
|
template<>
|
||||||
@ -113,6 +129,9 @@ struct SampleTraits<SampleFormat::S24_P32> {
|
|||||||
|
|
||||||
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
||||||
static constexpr unsigned BITS = 24;
|
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<>
|
template<>
|
||||||
@ -125,6 +144,9 @@ struct SampleTraits<SampleFormat::FLOAT> {
|
|||||||
typedef float long_type;
|
typedef float long_type;
|
||||||
|
|
||||||
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
static constexpr size_t SAMPLE_SIZE = sizeof(value_type);
|
||||||
|
|
||||||
|
static constexpr value_type MIN = -1;
|
||||||
|
static constexpr value_type MAX = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user