summaryrefslogtreecommitdiff
path: root/premix.c
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-03-26 18:55:44 +0100
committerGravatar waker <wakeroid@gmail.com>2011-03-26 18:55:44 +0100
commit2280a8f6f0482efa3a308716f4361634f656a721 (patch)
tree1696b124e2f850dda89a66b327746bea0caaf35b /premix.c
parent5b0f06ac3bff40b5f9bf5394b317a38858c745e6 (diff)
added conversion float -> int32
Diffstat (limited to 'premix.c')
-rw-r--r--premix.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/premix.c b/premix.c
index da93576e..c7a3324b 100644
--- a/premix.c
+++ b/premix.c
@@ -304,6 +304,19 @@ pcm_write_samples_float_to_24 (const ddb_waveformat_t * restrict inputfmt, const
fpu_restore (ctl);
}
+
+static inline void
+pcm_write_samples_float_to_32 (const ddb_waveformat_t * restrict inputfmt, const char * restrict input, const ddb_waveformat_t * restrict outputfmt, char * restrict output, int nsamples, int * restrict channelmap, int outputsamplesize) {
+ for (int s = 0; s < nsamples; s++) {
+ for (int c = 0; c < inputfmt->channels; c++) {
+ int sample = (*((float*)input)) * (float)0x7fffffff;
+ *((int32_t *)(output + 4 * channelmap[c])) = sample;
+ input += 4;
+ }
+ output += outputsamplesize;
+ }
+}
+
typedef void (*remap_fn_t) (const ddb_waveformat_t * restrict inputfmt, const char * restrict input, const ddb_waveformat_t * restrict outputfmt, char * restrict output, int nsamples, int * restrict channelmap, int outputsamplesize);
@@ -358,7 +371,7 @@ remap_fn_t remappers[8][8] = {
pcm_write_samples_float_to_8,
pcm_write_samples_float_to_16,
pcm_write_samples_float_to_24,
- NULL, // FIXME: add float_to_32
+ pcm_write_samples_float_to_32,
NULL,
NULL,
NULL,