decoder/wavpack: use template for format_sample_X()

This commit is contained in:
Max Kellermann 2016-12-09 22:53:01 +01:00
parent ad5abba8c6
commit ead7ae8504

View File

@ -71,13 +71,14 @@ GetDuration(WavpackContext *wpc)
} }
/* /*
* Convert 8 bit. * Convert integer samples.
*/ */
template<typename T>
static void static void
format_samples_8(void *buffer, uint32_t count) format_samples_int(void *buffer, uint32_t count)
{ {
int32_t *src = (int32_t *)buffer; int32_t *src = (int32_t *)buffer;
int8_t *dst = (int8_t *)buffer; T *dst = (T *)buffer;
/* /*
* The asserts like the following one are because we do the * The asserts like the following one are because we do the
* formatting of samples within a single buffer. The size of * formatting of samples within a single buffer. The size of
@ -86,21 +87,7 @@ format_samples_8(void *buffer, uint32_t count)
*/ */
static_assert(sizeof(*dst) <= sizeof(*src), "Wrong size"); static_assert(sizeof(*dst) <= sizeof(*src), "Wrong size");
/* pass through and align 8-bit samples */ /* pass through and align samples */
std::copy_n(src, count, dst);
}
/*
* Convert 16 bit.
*/
static void
format_samples_16(void *buffer, uint32_t count)
{
int32_t *src = (int32_t *)buffer;
int16_t *dst = (int16_t *)buffer;
static_assert(sizeof(*dst) <= sizeof(*src), "Wrong size");
/* pass through and align 16-bit samples */
std::copy_n(src, count, dst); std::copy_n(src, count, dst);
} }
@ -160,11 +147,11 @@ wavpack_decode(DecoderClient &client, WavpackContext *wpc, bool can_seek)
if (!is_float) { if (!is_float) {
switch (WavpackGetBytesPerSample(wpc)) { switch (WavpackGetBytesPerSample(wpc)) {
case 1: case 1:
format_samples = format_samples_8; format_samples = format_samples_int<int8_t>;
break; break;
case 2: case 2:
format_samples = format_samples_16; format_samples = format_samples_int<int16_t>;
break; break;
} }
} }