aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-06-22 17:20:37 +0200
committerMax Kellermann <max@duempel.org>2015-06-22 17:20:37 +0200
commit16639f9d71a11f2d63df84c7ec660f2a9bd5f526 (patch)
treeb43c4ea466593079ff5a491dcb7240284bdc3cca /src
parent22f2605e2569eaa51495e23ac335bdfde217c23c (diff)
downloadmpd-16639f9d71a11f2d63df84c7ec660f2a9bd5f526.tar.gz
mpd-16639f9d71a11f2d63df84c7ec660f2a9bd5f526.tar.xz
mpd-16639f9d71a11f2d63df84c7ec660f2a9bd5f526.zip
pcm/Interleave: instantiate a 16 bit optimization
Diffstat (limited to 'src')
-rw-r--r--src/pcm/Interleave.cxx15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/pcm/Interleave.cxx b/src/pcm/Interleave.cxx
index 9926b5f7f..1152a7070 100644
--- a/src/pcm/Interleave.cxx
+++ b/src/pcm/Interleave.cxx
@@ -51,6 +51,14 @@ PcmInterleaveT(T *gcc_restrict dest,
}
}
+static void
+PcmInterleave16(int16_t *gcc_restrict dest,
+ const ConstBuffer<const int16_t *> src,
+ size_t n_frames)
+{
+ PcmInterleaveT(dest, src, n_frames);
+}
+
void
PcmInterleave32(int32_t *gcc_restrict dest,
const ConstBuffer<const int32_t *> src,
@@ -65,6 +73,13 @@ PcmInterleave(void *gcc_restrict dest,
size_t n_frames, size_t sample_size)
{
switch (sample_size) {
+ case 2:
+ PcmInterleave16((int16_t *)dest,
+ ConstBuffer<const int16_t *>((const int16_t *const*)src.data,
+ src.size),
+ n_frames);
+ break;
+
case 4:
PcmInterleave32((int32_t *)dest,
ConstBuffer<const int32_t *>((const int32_t *const*)src.data,