diff options
author | Max Kellermann <max@duempel.org> | 2009-03-02 16:37:11 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-03-02 16:37:11 +0100 |
commit | d24f2ba5ee91657b834daf9592a2b9c29d6e5847 (patch) | |
tree | b6946b3251217237c7facc335c847eaee63ce609 | |
parent | 78e08f655ac88bda3225cb41d85f0b1c38770be4 (diff) | |
download | mpd-d24f2ba5ee91657b834daf9592a2b9c29d6e5847.tar.gz mpd-d24f2ba5ee91657b834daf9592a2b9c29d6e5847.tar.xz mpd-d24f2ba5ee91657b834daf9592a2b9c29d6e5847.zip |
pcm_dither: added pcm_dither_32_to_16()
For 32 bit dithering, reuse the 24 bit dithering code, but apply a 8
bit right shift first.
-rw-r--r-- | src/pcm_dither.c | 15 | ||||
-rw-r--r-- | src/pcm_dither.h | 5 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/pcm_dither.c b/src/pcm_dither.c index c6f10dd30..dfd6d287d 100644 --- a/src/pcm_dither.c +++ b/src/pcm_dither.c @@ -76,3 +76,18 @@ pcm_dither_24_to_16(struct pcm_dither *dither, while (num_samples-- > 0) *dest++ = pcm_dither_sample_24_to_16(*src++, dither); } + +static int16_t +pcm_dither_sample_32_to_16(int32_t sample, struct pcm_dither *dither) +{ + return pcm_dither_sample_24_to_16(sample >> 8, dither); +} + +void +pcm_dither_32_to_16(struct pcm_dither *dither, + int16_t *dest, const int32_t *src, + unsigned num_samples) +{ + while (num_samples-- > 0) + *dest++ = pcm_dither_sample_32_to_16(*src++, dither); +} diff --git a/src/pcm_dither.h b/src/pcm_dither.h index b0c0304ee..962122fd8 100644 --- a/src/pcm_dither.h +++ b/src/pcm_dither.h @@ -38,4 +38,9 @@ pcm_dither_24_to_16(struct pcm_dither *dither, int16_t *dest, const int32_t *src, unsigned num_samples); +void +pcm_dither_32_to_16(struct pcm_dither *dither, + int16_t *dest, const int32_t *src, + unsigned num_samples); + #endif |