diff options
author | Max Kellermann <max@duempel.org> | 2009-01-07 18:19:09 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-07 18:19:09 +0100 |
commit | df30a29391b8a869667139f62955cf794c7d27c2 (patch) | |
tree | 0006211697009555b8039f2a55ed7df0930ae635 /src/pcm_utils.c | |
parent | 6768581c41fd7646d057ff1594f770ce3075065a (diff) | |
download | mpd-df30a29391b8a869667139f62955cf794c7d27c2.tar.gz mpd-df30a29391b8a869667139f62955cf794c7d27c2.tar.xz mpd-df30a29391b8a869667139f62955cf794c7d27c2.zip |
pcm_utils: moved code to pcm_format.c
Moved all code which converts the sample format to a separate library.
Diffstat (limited to 'src/pcm_utils.c')
-rw-r--r-- | src/pcm_utils.c | 127 |
1 files changed, 1 insertions, 126 deletions
diff --git a/src/pcm_utils.c b/src/pcm_utils.c index fd2786e3a..3e66edef2 100644 --- a/src/pcm_utils.c +++ b/src/pcm_utils.c @@ -18,6 +18,7 @@ #include "pcm_utils.h" #include "pcm_channels.h" +#include "pcm_format.h" #include "conf.h" #include "audio_format.h" @@ -37,132 +38,6 @@ void pcm_convert_init(struct pcm_convert_state *state) pcm_dither_24_init(&state->dither); } -static void -pcm_convert_8_to_16(int16_t *out, const int8_t *in, - unsigned num_samples) -{ - while (num_samples > 0) { - *out++ = *in++ << 8; - --num_samples; - } -} - -static void -pcm_convert_24_to_16(struct pcm_dither_24 *dither, - int16_t *out, const int32_t *in, - unsigned num_samples) -{ - pcm_dither_24_to_16(dither, out, in, num_samples); -} - -static const int16_t * -pcm_convert_to_16(struct pcm_convert_state *convert, - uint8_t bits, const void *src, - size_t src_size, size_t *dest_size_r) -{ - static int16_t *buf; - static size_t len; - unsigned num_samples; - - switch (bits) { - case 8: - num_samples = src_size; - *dest_size_r = src_size << 1; - if (*dest_size_r > len) { - len = *dest_size_r; - buf = g_realloc(buf, len); - } - - pcm_convert_8_to_16((int16_t *)buf, - (const int8_t *)src, - num_samples); - return buf; - - case 16: - *dest_size_r = src_size; - return src; - - case 24: - num_samples = src_size / 4; - *dest_size_r = num_samples * 2; - if (*dest_size_r > len) { - len = *dest_size_r; - buf = g_realloc(buf, len); - } - - pcm_convert_24_to_16(&convert->dither, - (int16_t *)buf, - (const int32_t *)src, - num_samples); - return buf; - } - - g_warning("only 8 or 16 bits are supported for conversion!\n"); - return NULL; -} - -static void -pcm_convert_8_to_24(int32_t *out, const int8_t *in, - unsigned num_samples) -{ - while (num_samples > 0) { - *out++ = *in++ << 16; - --num_samples; - } -} - -static void -pcm_convert_16_to_24(int32_t *out, const int16_t *in, - unsigned num_samples) -{ - while (num_samples > 0) { - *out++ = *in++ << 8; - --num_samples; - } -} - -static const int32_t * -pcm_convert_to_24(uint8_t bits, const void *src, - size_t src_size, size_t *dest_size_r) -{ - static int32_t *buf; - static size_t len; - unsigned num_samples; - - switch (bits) { - case 8: - num_samples = src_size; - *dest_size_r = src_size * 4; - if (*dest_size_r > len) { - len = *dest_size_r; - buf = g_realloc(buf, len); - } - - pcm_convert_8_to_24(buf, (const int8_t *)src, - num_samples); - return buf; - - case 16: - num_samples = src_size / 2; - *dest_size_r = num_samples * 4; - if (*dest_size_r > len) { - len = *dest_size_r; - buf = g_realloc(buf, len); - } - - pcm_convert_16_to_24(buf, (const int16_t *)src, - num_samples); - return buf; - - case 24: - *dest_size_r = src_size; - return src; - } - - g_warning("only 8 or 24 bits are supported for conversion!\n"); - return NULL; -} - static size_t pcm_convert_16(const struct audio_format *src_format, const void *src_buffer, size_t src_size, |