Module Name: src
Committed By: mlelstv
Date: Mon Apr 10 15:04:49 UTC 2023
Modified Files:
src/sys/dev/pad: pad.c
Log Message:
Write slinear_le 16bit samples, independent from platform and
AUDIO_INTERNAL_BITS.
To generate a diff of this commit:
cvs rdiff -u -r1.79 -r1.80 src/sys/dev/pad/pad.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pad/pad.c
diff -u src/sys/dev/pad/pad.c:1.79 src/sys/dev/pad/pad.c:1.80
--- src/sys/dev/pad/pad.c:1.79 Tue Jan 24 08:17:11 2023
+++ src/sys/dev/pad/pad.c Mon Apr 10 15:04:49 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: pad.c,v 1.79 2023/01/24 08:17:11 mlelstv Exp $ */
+/* $NetBSD: pad.c,v 1.80 2023/04/10 15:04:49 mlelstv Exp $ */
/*-
* Copyright (c) 2007 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pad.c,v 1.79 2023/01/24 08:17:11 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pad.c,v 1.80 2023/04/10 15:04:49 mlelstv Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -745,7 +745,7 @@ pad_swvol_codec(audio_filter_arg_t *arg)
{
struct pad_softc *sc = arg->context;
const aint_t *src;
- aint_t *dst;
+ uint8_t *dst;
u_int sample_count;
u_int i;
@@ -755,7 +755,30 @@ pad_swvol_codec(audio_filter_arg_t *arg)
for (i = 0; i < sample_count; i++) {
aint2_t v = (aint2_t)(*src++);
v = v * sc->sc_swvol / 255;
- *dst++ = (aint_t)v;
+
+ CTASSERT(PADPREC <= AUDIO_INTERNAL_BITS * 2);
+#if PADPREC > AUDIO_INTERNAL_BITS
+ v = v << (PADPREC - AUDIO_INTERNAL_BITS);
+#elif PADPREC < AUDIO_INTERNAL_BITS
+ v = v >> (AUDIO_INTERNAL_BITS - PADPREC);
+#endif
+
+ /* AUDIO_ENCODING_SLINEAR_LE */
+#if PADPREC > 0
+ *dst++ = v;
+#endif
+#if PADPREC > 8
+ v >>= 8;
+ *dst++ = v;
+#endif
+#if PADPREC > 16
+ v >>= 8;
+ *dst++ = v;
+#endif
+#if PADPREC > 24
+ v >>= 8;
+ *dst++ = v;
+#endif
}
}