From d24f2ba5ee91657b834daf9592a2b9c29d6e5847 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 2 Mar 2009 16:37:11 +0100 Subject: 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. --- src/pcm_dither.c | 15 +++++++++++++++ src/pcm_dither.h | 5 +++++ 2 files changed, 20 insertions(+) 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 -- cgit v1.2.3