.. -*- coding: utf-8; mode: rst -*-

.. _vidioc-g-audio:

************************************
ioctl VIDIOC_G_AUDIO, VIDIOC_S_AUDIO
************************************

*man VIDIOC_G_AUDIO(2)*

VIDIOC_S_AUDIO
Query or select the current audio input and its attributes


Synopsis
========

.. c:function:: int ioctl( int fd, int request, struct v4l2_audio *argp )

.. c:function:: int ioctl( int fd, int request, const struct v4l2_audio *argp )

Arguments
=========

``fd``
    File descriptor returned by :ref:`open() <func-open>`.

``request``
    VIDIOC_G_AUDIO, VIDIOC_S_AUDIO

``argp``


Description
===========

To query the current audio input applications zero out the ``reserved``
array of a struct :ref:`v4l2_audio <v4l2-audio>` and call the
``VIDIOC_G_AUDIO`` ioctl with a pointer to this structure. Drivers fill
the rest of the structure or return an EINVAL error code when the device
has no audio inputs, or none which combine with the current video input.

Audio inputs have one writable property, the audio mode. To select the
current audio input *and* change the audio mode, applications initialize
the ``index`` and ``mode`` fields, and the ``reserved`` array of a
:c:type:`struct v4l2_audio` structure and call the ``VIDIOC_S_AUDIO``
ioctl. Drivers may switch to a different audio mode if the request
cannot be satisfied. However, this is a write-only ioctl, it does not
return the actual new audio mode.


.. _v4l2-audio:

.. flat-table:: struct v4l2_audio
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2


    -  .. row 1

       -  __u32

       -  ``index``

       -  Identifies the audio input, set by the driver or application.

    -  .. row 2

       -  __u8

       -  ``name``\ [32]

       -  Name of the audio input, a NUL-terminated ASCII string, for
          example: "Line In". This information is intended for the user,
          preferably the connector label on the device itself.

    -  .. row 3

       -  __u32

       -  ``capability``

       -  Audio capability flags, see :ref:`audio-capability`.

    -  .. row 4

       -  __u32

       -  ``mode``

       -  Audio mode flags set by drivers and applications (on
          ``VIDIOC_S_AUDIO`` ioctl), see :ref:`audio-mode`.

    -  .. row 5

       -  __u32

       -  ``reserved``\ [2]

       -  Reserved for future extensions. Drivers and applications must set
          the array to zero.



.. _audio-capability:

.. flat-table:: Audio Capability Flags
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4


    -  .. row 1

       -  ``V4L2_AUDCAP_STEREO``

       -  0x00001

       -  This is a stereo input. The flag is intended to automatically
          disable stereo recording etc. when the signal is always monaural.
          The API provides no means to detect if stereo is *received*,
          unless the audio input belongs to a tuner.

    -  .. row 2

       -  ``V4L2_AUDCAP_AVL``

       -  0x00002

       -  Automatic Volume Level mode is supported.



.. _audio-mode:

.. flat-table:: Audio Mode Flags
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4


    -  .. row 1

       -  ``V4L2_AUDMODE_AVL``

       -  0x00001

       -  AVL mode is on.



Return Value
============

On success 0 is returned, on error -1 and the ``errno`` variable is set
appropriately. The generic error codes are described at the
:ref:`Generic Error Codes <gen-errors>` chapter.

EINVAL
    No audio inputs combine with the current video input, or the number
    of the selected audio input is out of bounds or it does not combine.


.. ------------------------------------------------------------------------------
.. This file was automatically converted from DocBook-XML with the dbxml
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
.. from the linux kernel, refer to:
..
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
.. ------------------------------------------------------------------------------
