diff options
author | Max Kellermann <max@duempel.org> | 2015-06-22 14:45:59 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-06-22 16:32:06 +0200 |
commit | 69476b4f2193546cb72c3def9679136a182adfe3 (patch) | |
tree | 56010536b8b36071c87583cb5e5817b02c9bdab1 /src/pcm/Interleave.hxx | |
parent | fdf92c5f3b05c874ba6ae74bb0e1477f1b3ca77f (diff) | |
download | mpd-69476b4f2193546cb72c3def9679136a182adfe3.tar.gz mpd-69476b4f2193546cb72c3def9679136a182adfe3.tar.xz mpd-69476b4f2193546cb72c3def9679136a182adfe3.zip |
pcm/Interleave: add optimization for 32 bit samples
Move code from the "vorbis" decoder.
Diffstat (limited to 'src/pcm/Interleave.hxx')
-rw-r--r-- | src/pcm/Interleave.hxx | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/pcm/Interleave.hxx b/src/pcm/Interleave.hxx index 76f1a6216..3cb117d80 100644 --- a/src/pcm/Interleave.hxx +++ b/src/pcm/Interleave.hxx @@ -24,6 +24,8 @@ #include "Compiler.h" #include "util/ConstBuffer.hxx" +#include <stdint.h> + /** * Interleave planar PCM samples from #src to #dest. */ @@ -31,4 +33,22 @@ void PcmInterleave(void *gcc_restrict dest, ConstBuffer<const void *> src, size_t n_frames, size_t sample_size); +/** + * A variant of PcmInterleave() that assumes 32 bit samples (4 bytes + * per sample). + */ +void +PcmInterleave32(int32_t *gcc_restrict dest, ConstBuffer<const int32_t *> src, + size_t n_frames); + +static inline void +PcmInterleaveFloat(float *gcc_restrict dest, ConstBuffer<const float *> src, + size_t n_frames) +{ + PcmInterleave32((int32_t *)dest, + ConstBuffer<const int32_t *>((const int32_t *const*)src.data, + src.size), + n_frames); +} + #endif |