lkml.org 
[lkml]   [2023]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [RFC PATCH v6 07/11] media: v4l2: Add audio capture and output support
    From
    On 13/10/2023 10:31, Shengjiu Wang wrote:
    > Audio signal processing has the requirement for memory to
    > memory similar as Video.
    >
    > This patch is to add this support in v4l2 framework, defined
    > new buffer type V4L2_BUF_TYPE_AUDIO_CAPTURE and
    > V4L2_BUF_TYPE_AUDIO_OUTPUT, defined new format v4l2_audio_format
    > for audio case usage.
    >
    > The created audio device is named "/dev/v4l-audioX".
    >
    > Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    > ---
    > .../userspace-api/media/v4l/buffer.rst | 6 ++
    > .../media/v4l/dev-audio-mem2mem.rst | 71 +++++++++++++++++++
    > .../userspace-api/media/v4l/devices.rst | 1 +
    > .../media/v4l/vidioc-enum-fmt.rst | 2 +
    > .../userspace-api/media/v4l/vidioc-g-fmt.rst | 4 ++
    > .../media/videodev2.h.rst.exceptions | 2 +
    > .../media/common/videobuf2/videobuf2-v4l2.c | 4 ++
    > drivers/media/v4l2-core/v4l2-dev.c | 17 +++++
    > drivers/media/v4l2-core/v4l2-ioctl.c | 53 ++++++++++++++
    > include/media/v4l2-dev.h | 2 +
    > include/media/v4l2-ioctl.h | 34 +++++++++
    > include/uapi/linux/videodev2.h | 17 +++++
    > 12 files changed, 213 insertions(+)
    > create mode 100644 Documentation/userspace-api/media/v4l/dev-audio-mem2mem.rst
    >
    > diff --git a/Documentation/userspace-api/media/v4l/buffer.rst b/Documentation/userspace-api/media/v4l/buffer.rst
    > index 04dec3e570ed..80cf2cb20dfe 100644
    > --- a/Documentation/userspace-api/media/v4l/buffer.rst
    > +++ b/Documentation/userspace-api/media/v4l/buffer.rst
    > @@ -438,6 +438,12 @@ enum v4l2_buf_type
    > * - ``V4L2_BUF_TYPE_META_OUTPUT``
    > - 14
    > - Buffer for metadata output, see :ref:`metadata`.
    > + * - ``V4L2_BUF_TYPE_AUDIO_CAPTURE``
    > + - 15
    > + - Buffer for audio capture, see :ref:`audio`.
    > + * - ``V4L2_BUF_TYPE_AUDIO_OUTPUT``
    > + - 16
    > + - Buffer for audio output, see :ref:`audio`.
    >
    >
    > .. _buffer-flags:
    > diff --git a/Documentation/userspace-api/media/v4l/dev-audio-mem2mem.rst b/Documentation/userspace-api/media/v4l/dev-audio-mem2mem.rst
    > new file mode 100644
    > index 000000000000..2ea493d0a73b
    > --- /dev/null
    > +++ b/Documentation/userspace-api/media/v4l/dev-audio-mem2mem.rst
    > @@ -0,0 +1,71 @@
    > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
    > +
    > +.. _audiomem2mem:
    > +
    > +********************************
    > +Audio Memory-To-Memory Interface
    > +********************************
    > +
    > +A audio memory-to-memory device can compress, decompress, transform, or

    A -> An

    > +otherwise convert audio data from one format into another format, in memory.
    > +Such memory-to-memory devices set the ``V4L2_CAP_AUDIO_M2M`` capability.
    > +Examples of memory-to-memory devices are codecs, audio preprocessing,

    codecs -> audio codecs

    Reason: within V4L2 'codec' refers to a video codec by default, so for audio
    codecs it is better to be explicit and mention 'audio'.

    > +audio postprocessing.
    > +
    > +A memory-to-memory audio node supports both output (sending frames from

    I think it is better to write 'audio frames' instead of just 'frames', for
    the same reason as why I prefer 'audio codec'. It makes it explicit that we
    are dealing with audio.

    > +memory to the hardware) and capture (receiving the processed frames

    audio frames

    > +from the hardware into memory) stream I/O. An application will have to
    > +setup the stream I/O for both sides and finally call
    > +:ref:`VIDIOC_STREAMON <VIDIOC_STREAMON>` for both capture and output to
    > +start the hardware.
    > +
    > +Memory-to-memory devices function as a shared resource: you can
    > +open the audio node multiple times, each application setting up their
    > +own properties that are local to the file handle, and each can use
    > +it independently from the others. The driver will arbitrate access to
    > +the hardware and reprogram it whenever another file handler gets access.
    > +
    > +Audio memory-to-memory devices are accessed through character device
    > +special files named ``/dev/v4l-audio``
    > +
    > +Querying Capabilities
    > +=====================
    > +
    > +Device nodes supporting the audio memory-to-memory interface set the
    > +``V4L2_CAP_AUDIO_M2M`` flag in the ``device_caps`` field of the
    > +:c:type:`v4l2_capability` structure returned by the :c:func:`VIDIOC_QUERYCAP`
    > +ioctl.
    > +
    > +Data Format Negotiation
    > +=======================
    > +
    > +The audio device uses the :ref:`format` ioctls to select the capture format.
    > +The audio buffer content format is bound to that selected format. In addition
    > +to the basic :ref:`format` ioctls, the :c:func:`VIDIOC_ENUM_FMT` ioctl must be
    > +supported as well.
    > +
    > +To use the :ref:`format` ioctls applications set the ``type`` field of the
    > +:c:type:`v4l2_format` structure to ``V4L2_BUF_TYPE_AUDIO_CAPTURE`` or to
    > +``V4L2_BUF_TYPE_AUDIO_OUTPUT``. Both drivers and applications must set the
    > +remainder of the :c:type:`v4l2_format` structure to 0.
    > +
    > +.. c:type:: v4l2_audio_format
    > +
    > +.. tabularcolumns:: |p{1.4cm}|p{2.4cm}|p{13.5cm}|
    > +
    > +.. flat-table:: struct v4l2_audio_format
    > + :header-rows: 0
    > + :stub-columns: 0
    > + :widths: 1 1 2
    > +
    > + * - __u32
    > + - ``pixelformat``
    > + - The sample format, set by the application. see :ref:`pixfmt-audio`
    > + * - __u32
    > + - ``channels``
    > + - The channel number, set by the application. channel number range is
    > + [1, 32].
    > + * - __u32
    > + - ``buffersize``
    > + - Maximum buffer size in bytes required for data. The value is set by the
    > + driver.

    <snip>

    Regards,

    Hans

    \
     
     \ /
      Last update: 2023-10-16 14:25    [W:7.815 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site