Re: git: e1bbaa71d62c - main - sound: Implement AFMT_FLOAT support

From: Bjoern A. Zeeb <bz_at_FreeBSD.org>
Date: Mon, 09 Jun 2025 19:32:50 UTC
On Sun, 30 Mar 2025, Christos Margiolis wrote:

> The branch main has been updated by christos:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=e1bbaa71d62c8681a576f9f5bedf475c7541bd35
>
> commit e1bbaa71d62c8681a576f9f5bedf475c7541bd35
> Author:     Christos Margiolis <christos@FreeBSD.org>
> AuthorDate: 2025-03-30 17:45:38 +0000
> Commit:     Christos Margiolis <christos@FreeBSD.org>
> CommitDate: 2025-03-30 17:45:38 +0000
>
>    sound: Implement AFMT_FLOAT support
>
>    Even though the OSS manual [1] advises against using AFMT_FLOAT, there
>    are applications that expect the sound driver to support it, and might
>    not work properly without it.
>
>    This patch adds AFMT_F32_LE|BE (as well as AFMT_FLOAT for OSS
>    compatibility) in sys/soundcard.h and implements AFMT_F32_LE|BE <->
>    AFMT_S32_LE|BE conversion functions. As a result, applications can
>    write/read floats to/from sound(4), but internally, because sound(4)
>    works with integers, we convert floating point samples to integer ones,
>    before doing any processing.
>
>    The reason for encoding/decoding IEEE754s manually, instead of using
>    fpu_kern(9), is that fpu_kern(9) is not supported by all architectures,
>    and also introduces significant overhead.
>
>    The IEEE754 encoding/decoding implementation has been written by Ariff
>    Abdullah [2].
>
>    [1] http://manuals.opensound.com/developer/AFMT_FLOAT.html
>    [2] https://people.freebsd.org/~ariff/utils/ieee754.c
>
>    PR:             157050, 184380, 264973, 280612, 281390
>    Sponsored by:   The FreeBSD Foundation
>    MFC after:      1 week
>    Reviewed by:    emaste
>    Differential Revision:  https://reviews.freebsd.org/D47638
> ---
> sys/dev/sound/pcm/channel.c       |  4 +++
> sys/dev/sound/pcm/feeder_chain.c  |  2 ++
> sys/dev/sound/pcm/feeder_rate.c   |  4 +++
> sys/dev/sound/pcm/feeder_volume.c |  2 ++
> sys/dev/sound/pcm/pcm.h           | 67 +++++++++++++++++++++++++++++++++++++--
> sys/dev/sound/pcm/sound.h         | 13 +++++---
> sys/sys/soundcard.h               |  8 +++++
> tests/sys/sound/pcm_read_write.c  |  6 ++++
> 8 files changed, 98 insertions(+), 8 deletions(-)
>
> diff --git a/sys/dev/sound/pcm/feeder_volume.c b/sys/dev/sound/pcm/feeder_volume.c
> index f72c6aa7ef4f..2d35bb56ef8f 100644
> --- a/sys/dev/sound/pcm/feeder_volume.c
> +++ b/sys/dev/sound/pcm/feeder_volume.c
> @@ -93,6 +93,8 @@ FEEDVOLUME_DECLARE(U, 32, LE)
> FEEDVOLUME_DECLARE(U, 16, BE)
> FEEDVOLUME_DECLARE(U, 24, BE)
> FEEDVOLUME_DECLARE(U, 32, BE)
> +FEEDVOLUME_DECLARE(F, 32, LE)
> +FEEDVOLUME_DECLARE(F, 32, BE)
> #endif
>
> struct feed_volume_info {

Could it be that they also need to be added to feed_volume_info_tab
below?  Kernel LINT builds complain that they are unused.

/bz

-- 
Bjoern A. Zeeb                                                     r15:7