aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-03-02 16:37:11 +0100
committerMax Kellermann <max@duempel.org>2009-03-02 16:37:11 +0100
commitd24f2ba5ee91657b834daf9592a2b9c29d6e5847 (patch)
treeb6946b3251217237c7facc335c847eaee63ce609 /src
parent78e08f655ac88bda3225cb41d85f0b1c38770be4 (diff)
downloadmpd-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.
Diffstat (limited to '')
-rw-r--r--src/pcm_dither.c15
-rw-r--r--src/pcm_dither.h5
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