42 static inline quint32
shl(
const quint32 v,
const int s)
61 template<
const unsigned int bits,
const bool is_signed,
62 const bool is_little_endian>
67 const quint32 negative = ~(sign - 1);
68 const quint32 bytes = (bits+7) >> 3;
75 if (is_little_endian) {
77 for (
unsigned int byte = 0; byte < bytes; ++byte, ++src) {
78 s |=
static_cast<quint8
>(*src) << (byte << 3);
82 for (
int byte = bytes - 1; byte >= 0; --byte, ++src) {
83 s |=
static_cast<quint8
>(*src) << (byte << 3);
88 if (!is_signed) s -=
shl(1, bits-1)-1;
94 if (is_signed && (s & sign)) s |= negative;
97 *(dst++) = static_cast<sample_t>(s);
102 #define MAKE_DECODER(bits) \ 103 if (sample_format != Kwave::SampleFormat::Unsigned) { \ 104 if (endianness != Kwave::BigEndian) { \ 105 m_decoder = decode_linear<bits, true, true>; \ 107 m_decoder = decode_linear<bits, true, false>; \ 110 if (endianness != Kwave::BigEndian) { \ 111 m_decoder = decode_linear<bits, false, true>; \ 113 m_decoder = decode_linear<bits, false, false>; \ 120 unsigned int bits_per_sample,
124 m_bytes_per_sample((bits_per_sample + 7) >> 3),
139 #if Q_BYTE_ORDER == Q_BIG_ENDIAN 174 const quint8 *src =
reinterpret_cast<const quint8 *
>(raw_data.constData());
unsigned int m_bytes_per_sample
void decode_linear(const quint8 *src, sample_t *dst, unsigned int count)
virtual void decode(QByteArray &raw_data, Kwave::SampleArray &decoded) Q_DECL_OVERRIDE
static quint32 shl(const quint32 v, const int s)
#define MAKE_DECODER(bits)
static void decode_NULL(const quint8 *src, sample_t *dst, unsigned int count)
virtual ~SampleDecoderLinear() Q_DECL_OVERRIDE
SampleDecoderLinear(Kwave::SampleFormat::Format sample_format, unsigned int bits_per_sample, Kwave::byte_order_t endianness)
virtual unsigned int rawBytesPerSample() Q_DECL_OVERRIDE
void(* m_decoder)(const quint8 *, sample_t *, unsigned int)