kwave  18.07.70
Kwave::SampleDecoderLinear Class Reference

#include <SampleDecoderLinear.h>

Inheritance diagram for Kwave::SampleDecoderLinear:
Inheritance graph
Collaboration diagram for Kwave::SampleDecoderLinear:
Collaboration graph

Public Member Functions

 SampleDecoderLinear (Kwave::SampleFormat::Format sample_format, unsigned int bits_per_sample, Kwave::byte_order_t endianness)
 
virtual ~SampleDecoderLinear () Q_DECL_OVERRIDE
 
virtual void decode (QByteArray &raw_data, Kwave::SampleArray &decoded) Q_DECL_OVERRIDE
 
virtual unsigned int rawBytesPerSample () Q_DECL_OVERRIDE
 
- Public Member Functions inherited from Kwave::SampleDecoder
 SampleDecoder ()
 
virtual ~SampleDecoder ()
 

Private Attributes

unsigned int m_bytes_per_sample
 
void(* m_decoder )(const quint8 *, sample_t *, unsigned int)
 

Detailed Description

Definition at line 28 of file SampleDecoderLinear.h.

Constructor & Destructor Documentation

◆ SampleDecoderLinear()

Kwave::SampleDecoderLinear::SampleDecoderLinear ( Kwave::SampleFormat::Format  sample_format,
unsigned int  bits_per_sample,
Kwave::byte_order_t  endianness 
)

Constructor

Parameters
sample_formatindex of the sample format (signed/unsigned)
bits_per_samplenumber of bits per sample in the raw data
endiannesseither SOURCE_LITTLE_ENDIAN or SOURCE_BIG_ENDIAN

Definition at line 118 of file SampleDecoderLinear.cpp.

References Kwave::BigEndian, Kwave::CpuEndian, Kwave::LittleEndian, m_bytes_per_sample, MAKE_DECODER, Kwave::SampleFormat::Signed, Kwave::UnknownEndian, and Kwave::SampleFormat::Unsigned.

124  m_bytes_per_sample((bits_per_sample + 7) >> 3),
126 {
127  // sanity checks: we support only signed/unsigned and big/little endian
128  Q_ASSERT((sample_format == Kwave::SampleFormat::Signed) ||
129  (sample_format == Kwave::SampleFormat::Unsigned));
130  if ((sample_format != Kwave::SampleFormat::Signed) &&
131  (sample_format != Kwave::SampleFormat::Unsigned)) return;
132 
133  // allow unknown endianness only with 8 bits
134  Q_ASSERT((endianness != Kwave::UnknownEndian) || (m_bytes_per_sample == 1));
135  if ((endianness == Kwave::UnknownEndian) &&
136  (m_bytes_per_sample != 1)) return;
137 
138  // map cpu endianness to little or big
139 #if Q_BYTE_ORDER == Q_BIG_ENDIAN
140  if (endianness == Kwave::CpuEndian) endianness = Kwave::BigEndian;
141 #else
142  if (endianness == Kwave::CpuEndian) endianness = Kwave::LittleEndian;
143 #endif
144 
145  switch (m_bytes_per_sample) {
146  case 1:
147  MAKE_DECODER(8);
148  break;
149  case 2:
150  MAKE_DECODER(16);
151  break;
152  case 3:
153  MAKE_DECODER(24);
154  break;
155  case 4:
156  MAKE_DECODER(32);
157  break;
158  }
159 }
#define MAKE_DECODER(bits)
static void decode_NULL(const quint8 *src, sample_t *dst, unsigned int count)
void(* m_decoder)(const quint8 *, sample_t *, unsigned int)

◆ ~SampleDecoderLinear()

Kwave::SampleDecoderLinear::~SampleDecoderLinear ( )
virtual

Destructor

Definition at line 162 of file SampleDecoderLinear.cpp.

163 {
164 }

Member Function Documentation

◆ decode()

void Kwave::SampleDecoderLinear::decode ( QByteArray &  raw_data,
Kwave::SampleArray decoded 
)
virtual

Decodes the given buffer (byte array) by splitting it into it's tracks, decoding all samples and writing the result to the corresponding Writers.

Parameters
raw_dataarray with raw undecoded audio data
decodedarray with decoded samples

Implements Kwave::SampleDecoder.

Definition at line 167 of file SampleDecoderLinear.cpp.

References Kwave::SampleArray::data(), m_bytes_per_sample, and m_decoder.

169 {
170  Q_ASSERT(m_decoder);
171  if (!m_decoder) return;
172 
173  unsigned int samples = raw_data.size() / m_bytes_per_sample;
174  const quint8 *src = reinterpret_cast<const quint8 *>(raw_data.constData());
175  sample_t *dst = decoded.data();
176 
177  m_decoder(src, dst, samples);
178 }
sample_t * data()
Definition: SampleArray.h:62
void(* m_decoder)(const quint8 *, sample_t *, unsigned int)
qint32 sample_t
Definition: Sample.h:37
Here is the call graph for this function:

◆ rawBytesPerSample()

unsigned int Kwave::SampleDecoderLinear::rawBytesPerSample ( )
virtual

Returns the number of bytes per sample in raw (not encoded) form

Implements Kwave::SampleDecoder.

Definition at line 181 of file SampleDecoderLinear.cpp.

References m_bytes_per_sample.

182 {
183  return m_bytes_per_sample;
184 }

Member Data Documentation

◆ m_bytes_per_sample

unsigned int Kwave::SampleDecoderLinear::m_bytes_per_sample
private

number of bytes per raw sample

Definition at line 61 of file SampleDecoderLinear.h.

Referenced by decode(), rawBytesPerSample(), and SampleDecoderLinear().

◆ m_decoder

void(* Kwave::SampleDecoderLinear::m_decoder) (const quint8 *, sample_t *, unsigned int)
private

optimized function used for decoding the given format

Definition at line 64 of file SampleDecoderLinear.h.

Referenced by decode().


The documentation for this class was generated from the following files: