From d24f2ba5ee91657b834daf9592a2b9c29d6e5847 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
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(+)

(limited to 'src')

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