Lines Matching +full:24 +full:- +full:bit
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2006-2009 Ariff Abdullah <ariff@FreeBSD.org>
6 * Copyright (c) 2024-2025 The FreeBSD Foundation
45 * Automatically turn on 64bit arithmetic on suitable archs
46 * (amd64 64bit, etc..) for wider 32bit samples / integer processing.
76 /* 32bit fixed point shift */
80 #define PCM_S8_MIN -0x80
82 #define PCM_S16_MIN -0x8000
84 #define PCM_S24_MIN -0x800000
88 #define PCM_S32_MIN -0x80000000L
91 #define PCM_S32_MIN -0x80000000LL
95 #define PCM_S32_MIN (-0x7fffffff - 1)
98 /* Bytes-per-sample definition */
180 (int8_t)src[3] << 24); in pcm_sample_read()
184 (int8_t)src[0] << 24); in pcm_sample_read()
188 (int8_t)(src[3] ^ 0x80) << 24); in pcm_sample_read()
192 (int8_t)(src[0] ^ 0x80) << 24); in pcm_sample_read()
198 (int8_t)src[3] << 24); in pcm_sample_read()
201 (int8_t)src[0] << 24); in pcm_sample_read()
204 /* NaN, +/- Inf or too small */ in pcm_sample_read()
215 e += 8 - 127; in pcm_sample_read()
217 m >>= -e; in pcm_sample_read()
220 v = INTPCM_T((s == 0) ? m : -m); in pcm_sample_read()
232 * Read sample and normalize to 32-bit magnitude.
237 return (pcm_sample_read(src, fmt) << (32 - AFMT_BIT(fmt))); in pcm_sample_read_norm()
241 * Read sample and restrict magnitude to 24 bits.
254 * 16bit = 96db (close enough) in pcm_sample_read_calc()
255 * 24bit = 144db (perfect) in pcm_sample_read_calc()
256 * 32bit = 196db (way too much) in pcm_sample_read_calc()
258 * 24bit is pretty much sufficient for our signed integer processing. in pcm_sample_read_calc()
259 * Also, to avoid overflow, we truncate 32bit (and only 32bit) samples in pcm_sample_read_calc()
260 * down to 24bit (see below for the reason), unless SND_PCM_64 is in pcm_sample_read_calc()
288 v = -v; in pcm_sample_write()
290 e = 127 - 8; in pcm_sample_write()
297 e--; in pcm_sample_write()
362 dst[3] = v >> 24; in pcm_sample_write()
369 dst[0] = v >> 24; in pcm_sample_write()
375 dst[3] = (v >> 24) ^ 0x80; in pcm_sample_write()
381 dst[0] = (v >> 24) ^ 0x80; in pcm_sample_write()
395 pcm_sample_write(dst, v >> (32 - AFMT_BIT(fmt)), fmt); in pcm_sample_write_norm()
405 /* Shift back to 32-bit magnitude. */ in pcm_sample_write_calc()
424 case 24: in pcm_clamp()