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

.. _vidioc-g-input:

************************************
ioctl VIDIOC_G_INPUT, VIDIOC_S_INPUT
************************************

*man VIDIOC_G_INPUT(2)*

VIDIOC_S_INPUT
Query or select the current video input


Synopsis
========

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

Arguments
=========

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

``request``
    VIDIOC_G_INPUT, VIDIOC_S_INPUT

``argp``


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

To query the current video input applications call the
``VIDIOC_G_INPUT`` ioctl with a pointer to an integer where the driver
stores the number of the input, as in the struct
:ref:`v4l2_input <v4l2-input>` ``index`` field. This ioctl will fail
only when there are no video inputs, returning EINVAL.

To select a video input applications store the number of the desired
input in an integer and call the ``VIDIOC_S_INPUT`` ioctl with a pointer
to this integer. Side effects are possible. For example inputs may
support different video standards, so the driver may implicitly switch
the current standard. Because of these possible side effects
applications must select an input before querying or negotiating any
other parameters.

Information about video inputs is available using the
:ref:`VIDIOC_ENUMINPUT <vidioc-enuminput>` ioctl.


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
    The number of the video input is out of bounds.


.. ------------------------------------------------------------------------------
.. 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
.. ------------------------------------------------------------------------------
