From: Mauro Carvalho Chehab <mchehab@kernel.org>
To: Shengjiu Wang <shengjiu.wang@gmail.com>
Cc: Shengjiu Wang <shengjiu.wang@nxp.com>,
hverkuil@xs4all.nl, sakari.ailus@iki.fi, tfiga@chromium.org,
m.szyprowski@samsung.com, linux-media@vger.kernel.org,
linux-kernel@vger.kernel.org, Xiubo.Lee@gmail.com,
festevam@gmail.com, nicoleotsuka@gmail.com, lgirdwood@gmail.com,
broonie@kernel.org, perex@perex.cz, tiwai@suse.com,
alsa-devel@alsa-project.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v12 08/15] media: uapi: Define audio sample format fourcc type
Date: Mon, 19 Feb 2024 13:56:18 +0100 [thread overview]
Message-ID: <20240219135618.5c557e66@coco.lan> (raw)
In-Reply-To: <CAA+D8APD+zL0xYkf6FxPNfM3Y3O8+PhT7WEXO7XCLAmBjoMmUA@mail.gmail.com>
Em Mon, 19 Feb 2024 12:05:02 +0800
Shengjiu Wang <shengjiu.wang@gmail.com> escreveu:
> Hi Mauro
>
> On Sat, Feb 17, 2024 at 5:19 PM Mauro Carvalho Chehab
> <mchehab@kernel.org> wrote:
> >
> > Em Thu, 18 Jan 2024 20:32:01 +0800
> > Shengjiu Wang <shengjiu.wang@nxp.com> escreveu:
> >
> > > The audio sample format definition is from alsa,
> > > the header file is include/uapi/sound/asound.h, but
> > > don't include this header file directly, because in
> > > user space, there is another copy in alsa-lib.
> > > There will be conflict in userspace for include
> > > videodev2.h & asound.h and asoundlib.h
> > >
> > > Here still use the fourcc format.
> > >
> > > Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
> > > ---
> > > .../userspace-api/media/v4l/pixfmt-audio.rst | 87 +++++++++++++++++++
> > > .../userspace-api/media/v4l/pixfmt.rst | 1 +
> > > drivers/media/v4l2-core/v4l2-ioctl.c | 13 +++
> > > include/uapi/linux/videodev2.h | 23 +++++
> > > 4 files changed, 124 insertions(+)
> > > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-audio.rst
> > >
> > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-audio.rst b/Documentation/userspace-api/media/v4l/pixfmt-audio.rst
> > > new file mode 100644
> > > index 000000000000..04b4a7fbd8f4
> > > --- /dev/null
> > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-audio.rst
> > > @@ -0,0 +1,87 @@
> > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> > > +
> > > +.. _pixfmt-audio:
> > > +
> > > +*************
> > > +Audio Formats
> > > +*************
> > > +
> > > +These formats are used for :ref:`audiomem2mem` interface only.
> > > +
> > > +.. tabularcolumns:: |p{5.8cm}|p{1.2cm}|p{10.3cm}|
> > > +
> > > +.. cssclass:: longtable
> > > +
> > > +.. flat-table:: Audio Format
> > > + :header-rows: 1
> > > + :stub-columns: 0
> > > + :widths: 3 1 4
> > > +
> > > + * - Identifier
> > > + - Code
> > > + - Details
> > > + * .. _V4L2-AUDIO-FMT-S8:
> > > +
> > > + - ``V4L2_AUDIO_FMT_S8``
> > > + - 'S8'
> > > + - Corresponds to SNDRV_PCM_FORMAT_S8 in ALSA
> > > + * .. _V4L2-AUDIO-FMT-S16-LE:
> >
> > Hmm... why can't we just use SNDRV_*_FORMAT_*? Those are already part of
> > an uAPI header. No need to add any abstraction here and/or redefine
> > what is there already at include/uapi/sound/asound.h.
> >
> Actually I try to avoid including the include/uapi/sound/asound.h.
> Because in user space, there is another copy in alsa-lib (asoundlib.h).
> There will be conflict in userspace when including videodev2.h and
> asoundlib.h.
Well, alsasoundlib.h seems to be using the same definitions:
https://github.com/michaelwu/alsa-lib/blob/master/include/pcm.h
So, I can't see what would be the actual issue, as both userspace library
and ALSA internal headers use the same magic numbers.
You can still do things like:
#ifdef __KERNEL__
# include <sound/asound.h>
#else
# include <asoundlib.h>
#endif
To avoid such kind of conflicts, if you need to have it included on
some header file. Yet, I can't see why you would need that.
IMO, at uAPI headers, you just need to declare the uAPI audiofmt field
to be either __u32 or __u64, pointing it to where this value comes from
(on both userspace and Kernelspace. E. g.:
/**
* struct v4l2_audio_format - audio data format definition
* @audioformat:
* an integer number matching the fields inside
* enum snd_pcm_format_t (e. g. `SNDRV_PCM_FORMAT_*`), as defined
* in include/uapi/sound/asound.h and
* https://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m.html#gaa14b7f26877a812acbb39811364177f8.
* @channels: channel numbers
* @buffersize: maximum size in bytes required for data
*/
struct v4l2_audio_format {
__u32 audioformat;
__u32 channels;
__u32 buffersize;
} __attribute__ ((packed));
Then, at documentation you just need to point to where the
possible values for SNDRV_PCM_FORMAT_ are defined. No need to
document them one by one.
With such definition, you'll only need to include sound/asound.h
within the kAPI scope.
>
> And in the V4l framework, the fourcc type is commonly used in other
> cases (video, radio, touch, meta....), to avoid changing common code
> a lot, so I think using fourcc definition for audio may be simpler.
Those are real video streams (or a video-related streams, in the case
of metadata) where fourcc is widely used. There, it makes sense.
However, ALSA format definitions are already being used for a long time.
There's no sense on trying to reinvent it - or having an abstract layer
to convert from/to fourcc <==> enum snd_pcm_format_t. Just use what is
there already.
Thanks,
Mauro
WARNING: multiple messages have this Message-ID (diff)
From: Mauro Carvalho Chehab <mchehab@kernel.org>
To: Shengjiu Wang <shengjiu.wang@gmail.com>
Cc: nicoleotsuka@gmail.com, alsa-devel@alsa-project.org,
linuxppc-dev@lists.ozlabs.org, Xiubo.Lee@gmail.com,
lgirdwood@gmail.com, Shengjiu Wang <shengjiu.wang@nxp.com>,
tiwai@suse.com, linux-kernel@vger.kernel.org, tfiga@chromium.org,
hverkuil@xs4all.nl, broonie@kernel.org, sakari.ailus@iki.fi,
perex@perex.cz, linux-media@vger.kernel.org, festevam@gmail.com,
m.szyprowski@samsung.com
Subject: Re: [PATCH v12 08/15] media: uapi: Define audio sample format fourcc type
Date: Mon, 19 Feb 2024 13:56:18 +0100 [thread overview]
Message-ID: <20240219135618.5c557e66@coco.lan> (raw)
In-Reply-To: <CAA+D8APD+zL0xYkf6FxPNfM3Y3O8+PhT7WEXO7XCLAmBjoMmUA@mail.gmail.com>
Em Mon, 19 Feb 2024 12:05:02 +0800
Shengjiu Wang <shengjiu.wang@gmail.com> escreveu:
> Hi Mauro
>
> On Sat, Feb 17, 2024 at 5:19 PM Mauro Carvalho Chehab
> <mchehab@kernel.org> wrote:
> >
> > Em Thu, 18 Jan 2024 20:32:01 +0800
> > Shengjiu Wang <shengjiu.wang@nxp.com> escreveu:
> >
> > > The audio sample format definition is from alsa,
> > > the header file is include/uapi/sound/asound.h, but
> > > don't include this header file directly, because in
> > > user space, there is another copy in alsa-lib.
> > > There will be conflict in userspace for include
> > > videodev2.h & asound.h and asoundlib.h
> > >
> > > Here still use the fourcc format.
> > >
> > > Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
> > > ---
> > > .../userspace-api/media/v4l/pixfmt-audio.rst | 87 +++++++++++++++++++
> > > .../userspace-api/media/v4l/pixfmt.rst | 1 +
> > > drivers/media/v4l2-core/v4l2-ioctl.c | 13 +++
> > > include/uapi/linux/videodev2.h | 23 +++++
> > > 4 files changed, 124 insertions(+)
> > > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-audio.rst
> > >
> > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-audio.rst b/Documentation/userspace-api/media/v4l/pixfmt-audio.rst
> > > new file mode 100644
> > > index 000000000000..04b4a7fbd8f4
> > > --- /dev/null
> > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-audio.rst
> > > @@ -0,0 +1,87 @@
> > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> > > +
> > > +.. _pixfmt-audio:
> > > +
> > > +*************
> > > +Audio Formats
> > > +*************
> > > +
> > > +These formats are used for :ref:`audiomem2mem` interface only.
> > > +
> > > +.. tabularcolumns:: |p{5.8cm}|p{1.2cm}|p{10.3cm}|
> > > +
> > > +.. cssclass:: longtable
> > > +
> > > +.. flat-table:: Audio Format
> > > + :header-rows: 1
> > > + :stub-columns: 0
> > > + :widths: 3 1 4
> > > +
> > > + * - Identifier
> > > + - Code
> > > + - Details
> > > + * .. _V4L2-AUDIO-FMT-S8:
> > > +
> > > + - ``V4L2_AUDIO_FMT_S8``
> > > + - 'S8'
> > > + - Corresponds to SNDRV_PCM_FORMAT_S8 in ALSA
> > > + * .. _V4L2-AUDIO-FMT-S16-LE:
> >
> > Hmm... why can't we just use SNDRV_*_FORMAT_*? Those are already part of
> > an uAPI header. No need to add any abstraction here and/or redefine
> > what is there already at include/uapi/sound/asound.h.
> >
> Actually I try to avoid including the include/uapi/sound/asound.h.
> Because in user space, there is another copy in alsa-lib (asoundlib.h).
> There will be conflict in userspace when including videodev2.h and
> asoundlib.h.
Well, alsasoundlib.h seems to be using the same definitions:
https://github.com/michaelwu/alsa-lib/blob/master/include/pcm.h
So, I can't see what would be the actual issue, as both userspace library
and ALSA internal headers use the same magic numbers.
You can still do things like:
#ifdef __KERNEL__
# include <sound/asound.h>
#else
# include <asoundlib.h>
#endif
To avoid such kind of conflicts, if you need to have it included on
some header file. Yet, I can't see why you would need that.
IMO, at uAPI headers, you just need to declare the uAPI audiofmt field
to be either __u32 or __u64, pointing it to where this value comes from
(on both userspace and Kernelspace. E. g.:
/**
* struct v4l2_audio_format - audio data format definition
* @audioformat:
* an integer number matching the fields inside
* enum snd_pcm_format_t (e. g. `SNDRV_PCM_FORMAT_*`), as defined
* in include/uapi/sound/asound.h and
* https://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m.html#gaa14b7f26877a812acbb39811364177f8.
* @channels: channel numbers
* @buffersize: maximum size in bytes required for data
*/
struct v4l2_audio_format {
__u32 audioformat;
__u32 channels;
__u32 buffersize;
} __attribute__ ((packed));
Then, at documentation you just need to point to where the
possible values for SNDRV_PCM_FORMAT_ are defined. No need to
document them one by one.
With such definition, you'll only need to include sound/asound.h
within the kAPI scope.
>
> And in the V4l framework, the fourcc type is commonly used in other
> cases (video, radio, touch, meta....), to avoid changing common code
> a lot, so I think using fourcc definition for audio may be simpler.
Those are real video streams (or a video-related streams, in the case
of metadata) where fourcc is widely used. There, it makes sense.
However, ALSA format definitions are already being used for a long time.
There's no sense on trying to reinvent it - or having an abstract layer
to convert from/to fourcc <==> enum snd_pcm_format_t. Just use what is
there already.
Thanks,
Mauro
next prev parent reply other threads:[~2024-02-19 12:57 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-18 12:31 [PATCH v12 00/15] Add audio support in v4l2 framework Shengjiu Wang
2024-01-18 12:31 ` [PATCH v12 01/15] ASoC: fsl_asrc: define functions for memory to memory usage Shengjiu Wang
2024-01-18 12:31 ` [PATCH v12 02/15] ASoC: fsl_easrc: " Shengjiu Wang
2024-01-18 12:31 ` [PATCH v12 03/15] ASoC: fsl_asrc: move fsl_asrc_common.h to include/sound Shengjiu Wang
2024-01-18 12:31 ` [PATCH v12 04/15] ASoC: fsl_asrc: register m2m platform device Shengjiu Wang
2024-01-18 12:31 ` [PATCH v12 05/15] ASoC: fsl_easrc: " Shengjiu Wang
2024-01-18 12:31 ` [PATCH v12 06/15] media: uapi: Add V4L2_CAP_AUDIO_M2M capability flag Shengjiu Wang
2024-01-18 12:32 ` [PATCH v12 07/15] media: v4l2: Add audio capture and output support Shengjiu Wang
2024-02-17 9:42 ` Mauro Carvalho Chehab
2024-02-17 9:42 ` Mauro Carvalho Chehab
2024-02-19 6:35 ` Shengjiu Wang
2024-02-19 6:35 ` Shengjiu Wang
2024-02-21 4:30 ` Tomasz Figa
2024-02-21 4:30 ` Tomasz Figa
2024-02-21 10:11 ` Shengjiu Wang
2024-02-21 10:11 ` Shengjiu Wang
2024-02-21 11:16 ` Hans Verkuil
2024-02-21 11:16 ` Hans Verkuil
2024-02-21 11:13 ` Hans Verkuil
2024-02-21 11:13 ` Hans Verkuil
2024-02-21 4:32 ` Tomasz Figa
2024-02-21 4:32 ` Tomasz Figa
2024-01-18 12:32 ` [PATCH v12 08/15] media: uapi: Define audio sample format fourcc type Shengjiu Wang
2024-02-17 9:19 ` Mauro Carvalho Chehab
2024-02-17 9:19 ` Mauro Carvalho Chehab
2024-02-19 4:05 ` Shengjiu Wang
2024-02-19 4:05 ` Shengjiu Wang
2024-02-19 12:56 ` Mauro Carvalho Chehab [this message]
2024-02-19 12:56 ` Mauro Carvalho Chehab
2024-02-21 11:10 ` Hans Verkuil
2024-02-21 11:10 ` Hans Verkuil
2024-02-22 3:50 ` Shengjiu Wang
2024-02-22 3:50 ` Shengjiu Wang
2024-02-23 14:50 ` Hans Verkuil
2024-02-23 14:50 ` Hans Verkuil
2024-01-18 12:32 ` [PATCH v12 09/15] media: uapi: Add V4L2_CTRL_CLASS_M2M_AUDIO Shengjiu Wang
2024-01-18 12:32 ` [PATCH v12 10/15] media: uapi: Add audio rate controls support Shengjiu Wang
2024-02-17 9:57 ` Mauro Carvalho Chehab
2024-02-17 9:57 ` Mauro Carvalho Chehab
2024-02-19 6:03 ` Shengjiu Wang
2024-02-19 6:03 ` Shengjiu Wang
2024-02-19 12:16 ` Mauro Carvalho Chehab
2024-02-19 12:16 ` Mauro Carvalho Chehab
2024-01-18 12:32 ` [PATCH v12 11/15] media: uapi: Declare interface types for Audio Shengjiu Wang
2024-01-18 12:32 ` [PATCH v12 12/15] media: uapi: Add an entity type for audio resampler Shengjiu Wang
2024-01-18 12:32 ` [PATCH v12 13/15] media: vivid: add fixed point test controls Shengjiu Wang
2024-01-20 4:30 ` kernel test robot
2024-01-20 13:47 ` kernel test robot
2024-01-18 12:32 ` [PATCH v12 14/15] media: imx-asrc: Add memory to memory driver Shengjiu Wang
2024-01-20 18:17 ` kernel test robot
2024-01-18 12:32 ` [PATCH v12 15/15] media: vim2m-audio: add virtual driver for audio memory to memory Shengjiu Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240219135618.5c557e66@coco.lan \
--to=mchehab@kernel.org \
--cc=Xiubo.Lee@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=festevam@gmail.com \
--cc=hverkuil@xs4all.nl \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=m.szyprowski@samsung.com \
--cc=nicoleotsuka@gmail.com \
--cc=perex@perex.cz \
--cc=sakari.ailus@iki.fi \
--cc=shengjiu.wang@gmail.com \
--cc=shengjiu.wang@nxp.com \
--cc=tfiga@chromium.org \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.