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

.. _VIDIOC_G_SLICED_VBI_CAP:

*****************************
ioctl VIDIOC_G_SLICED_VBI_CAP
*****************************

Name
====

VIDIOC_G_SLICED_VBI_CAP - Query sliced VBI capabilities


Synopsis
========

.. cpp:function:: int ioctl( int fd, int request, struct v4l2_sliced_vbi_cap *argp )


Arguments
=========

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

``request``
    VIDIOC_G_SLICED_VBI_CAP

``argp``


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

To find out which data services are supported by a sliced VBI capture or
output device, applications initialize the ``type`` field of a struct
:ref:`v4l2_sliced_vbi_cap <v4l2-sliced-vbi-cap>`, clear the
``reserved`` array and call the :ref:`VIDIOC_G_SLICED_VBI_CAP <VIDIOC_G_SLICED_VBI_CAP>` ioctl. The
driver fills in the remaining fields or returns an ``EINVAL`` error code if
the sliced VBI API is unsupported or ``type`` is invalid.

.. note:: The ``type`` field was added, and the ioctl changed from read-only
   to write-read, in Linux 2.6.19.


.. _v4l2-sliced-vbi-cap:

.. flat-table:: struct v4l2_sliced_vbi_cap
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 3 2 2 2


    -  .. row 1

       -  __u16

       -  ``service_set``

       -  :cspan:`2` A set of all data services supported by the driver.
	  Equal to the union of all elements of the ``service_lines`` array.

    -  .. row 2

       -  __u16

       -  ``service_lines``\ [2][24]

       -  :cspan:`2` Each element of this array contains a set of data
	  services the hardware can look for or insert into a particular
	  scan line. Data services are defined in :ref:`vbi-services`.
	  Array indices map to ITU-R line numbers (see also :ref:`vbi-525`
	  and :ref:`vbi-625`) as follows:

    -  .. row 3

       -
       -
       -  Element

       -  525 line systems

       -  625 line systems

    -  .. row 4

       -
       -
       -  ``service_lines``\ [0][1]

       -  1

       -  1

    -  .. row 5

       -
       -
       -  ``service_lines``\ [0][23]

       -  23

       -  23

    -  .. row 6

       -
       -
       -  ``service_lines``\ [1][1]

       -  264

       -  314

    -  .. row 7

       -
       -
       -  ``service_lines``\ [1][23]

       -  286

       -  336

    -  .. row 8

       -

    -  .. row 9

       -
       -
       -  :cspan:`2` The number of VBI lines the hardware can capture or
	  output per frame, or the number of services it can identify on a
	  given line may be limited. For example on PAL line 16 the hardware
	  may be able to look for a VPS or Teletext signal, but not both at
	  the same time. Applications can learn about these limits using the
	  :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl as described in
	  :ref:`sliced`.

    -  .. row 10

       -

    -  .. row 11

       -
       -
       -  :cspan:`2` Drivers must set ``service_lines`` [0][0] and
	  ``service_lines``\ [1][0] to zero.

    -  .. row 12

       -  __u32

       -  ``type``

       -  Type of the data stream, see :ref:`v4l2-buf-type`. Should be
	  ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE`` or
	  ``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT``.

    -  .. row 13

       -  __u32

       -  ``reserved``\ [3]

       -  :cspan:`2` This array is reserved for future extensions.
	  Applications and drivers must set it to zero.



.. _vbi-services:

.. flat-table:: Sliced VBI services
    :header-rows:  1
    :stub-columns: 0
    :widths:       2 1 1 2 2


    -  .. row 1

       -  Symbol

       -  Value

       -  Reference

       -  Lines, usually

       -  Payload

    -  .. row 2

       -  ``V4L2_SLICED_TELETEXT_B`` (Teletext System B)

       -  0x0001

       -  :ref:`ets300706`, :ref:`itu653`

       -  PAL/SECAM line 7-22, 320-335 (second field 7-22)

       -  Last 42 of the 45 byte Teletext packet, that is without clock
	  run-in and framing code, lsb first transmitted.

    -  .. row 3

       -  ``V4L2_SLICED_VPS``

       -  0x0400

       -  :ref:`ets300231`

       -  PAL line 16

       -  Byte number 3 to 15 according to Figure 9 of ETS 300 231, lsb
	  first transmitted.

    -  .. row 4

       -  ``V4L2_SLICED_CAPTION_525``

       -  0x1000

       -  :ref:`cea608`

       -  NTSC line 21, 284 (second field 21)

       -  Two bytes in transmission order, including parity bit, lsb first
	  transmitted.

    -  .. row 5

       -  ``V4L2_SLICED_WSS_625``

       -  0x4000

       -  :ref:`en300294`, :ref:`itu1119`

       -  PAL/SECAM line 23

       -

	  ::

	      Byte        0                 1
		   msb         lsb  msb           lsb
	      Bit  7 6 5 4 3 2 1 0  x x 13 12 11 10 9

    -  .. row 6

       -  ``V4L2_SLICED_VBI_525``

       -  0x1000

       -  :cspan:`2` Set of services applicable to 525 line systems.

    -  .. row 7

       -  ``V4L2_SLICED_VBI_625``

       -  0x4401

       -  :cspan:`2` Set of services applicable to 625 line systems.


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 value in the ``type`` field is wrong.
