| .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later |
| .. c:namespace:: V4L |
| |
| .. _sliced: |
| |
| ************************* |
| Sliced VBI Data Interface |
| ************************* |
| |
| VBI stands for Vertical Blanking Interval, a gap in the sequence of |
| lines of an analog video signal. During VBI no picture information is |
| transmitted, allowing some time while the electron beam of a cathode ray |
| tube TV returns to the top of the screen. |
| |
| Sliced VBI devices use hardware to demodulate data transmitted in the |
| VBI. V4L2 drivers shall *not* do this by software, see also the |
| :ref:`raw VBI interface <raw-vbi>`. The data is passed as short |
| packets of fixed size, covering one scan line each. The number of |
| packets per video frame is variable. |
| |
| Sliced VBI capture and output devices are accessed through the same |
| character special files as raw VBI devices. When a driver supports both |
| interfaces, the default function of a ``/dev/vbi`` device is *raw* VBI |
| capturing or output, and the sliced VBI function is only available after |
| calling the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl as defined |
| below. Likewise a ``/dev/video`` device may support the sliced VBI API, |
| however the default function here is video capturing or output. |
| Different file descriptors must be used to pass raw and sliced VBI data |
| simultaneously, if this is supported by the driver. |
| |
| Querying Capabilities |
| ===================== |
| |
| Devices supporting the sliced VBI capturing or output API set the |
| ``V4L2_CAP_SLICED_VBI_CAPTURE`` or ``V4L2_CAP_SLICED_VBI_OUTPUT`` flag |
| respectively, in the ``capabilities`` field of struct |
| :c:type:`v4l2_capability` returned by the |
| :ref:`VIDIOC_QUERYCAP` ioctl. At least one of the |
| read/write or streaming :ref:`I/O methods <io>` must be |
| supported. Sliced VBI devices may have a tuner or modulator. |
| |
| Supplemental Functions |
| ====================== |
| |
| Sliced VBI devices shall support :ref:`video input or output <video>` |
| and :ref:`tuner or modulator <tuner>` ioctls if they have these |
| capabilities, and they may support :ref:`control` ioctls. |
| The :ref:`video standard <standard>` ioctls provide information vital |
| to program a sliced VBI device, therefore must be supported. |
| |
| .. _sliced-vbi-format-negotitation: |
| |
| Sliced VBI Format Negotiation |
| ============================= |
| |
| To find out which data services are supported by the hardware |
| applications can call the |
| :ref:`VIDIOC_G_SLICED_VBI_CAP <VIDIOC_G_SLICED_VBI_CAP>` ioctl. |
| All drivers implementing the sliced VBI interface must support this |
| ioctl. The results may differ from those of the |
| :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl when 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 are 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. |
| |
| To determine the currently selected services applications set the |
| ``type`` field of struct :c:type:`v4l2_format` to |
| ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE`` or |
| ``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT``, and the |
| :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` ioctl fills the ``fmt.sliced`` |
| member, a struct |
| :c:type:`v4l2_sliced_vbi_format`. |
| |
| Applications can request different parameters by initializing or |
| modifying the ``fmt.sliced`` member and calling the |
| :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl with a pointer to the |
| struct :c:type:`v4l2_format` structure. |
| |
| The sliced VBI API is more complicated than the raw VBI API because the |
| hardware must be told which VBI service to expect on each scan line. Not |
| all services may be supported by the hardware on all lines (this is |
| especially true for VBI output where Teletext is often unsupported and |
| other services can only be inserted in one specific line). In many |
| cases, however, it is sufficient to just set the ``service_set`` field |
| to the required services and let the driver fill the ``service_lines`` |
| array according to hardware capabilities. Only if more precise control |
| is needed should the programmer set the ``service_lines`` array |
| explicitly. |
| |
| The :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl modifies the parameters |
| according to hardware capabilities. When the driver allocates resources |
| at this point, it may return an ``EBUSY`` error code if the required |
| resources are temporarily unavailable. Other resource allocation points |
| which may return ``EBUSY`` can be the |
| :ref:`VIDIOC_STREAMON` ioctl and the first |
| :c:func:`read()`, :c:func:`write()` and |
| :c:func:`select()` call. |
| |
| .. c:type:: v4l2_sliced_vbi_format |
| |
| struct v4l2_sliced_vbi_format |
| ----------------------------- |
| |
| .. raw:: latex |
| |
| \begingroup |
| \scriptsize |
| \setlength{\tabcolsep}{2pt} |
| |
| .. tabularcolumns:: |p{.85cm}|p{3.3cm}|p{4.45cm}|p{4.45cm}|p{4.45cm}| |
| |
| .. cssclass:: longtable |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 3 3 2 2 2 |
| |
| * - __u16 |
| - ``service_set`` |
| - :cspan:`2` |
| |
| If ``service_set`` is non-zero when passed with |
| :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` or |
| :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>`, the ``service_lines`` |
| array will be filled by the driver according to the services |
| specified in this field. For example, if ``service_set`` is |
| initialized with ``V4L2_SLICED_TELETEXT_B | V4L2_SLICED_WSS_625``, |
| a driver for the cx25840 video decoder sets lines 7-22 of both |
| fields [#f1]_ to ``V4L2_SLICED_TELETEXT_B`` and line 23 of the first |
| field to ``V4L2_SLICED_WSS_625``. If ``service_set`` is set to |
| zero, then the values of ``service_lines`` will be used instead. |
| |
| On return the driver sets this field to the union of all elements |
| of the returned ``service_lines`` array. It may contain less |
| services than requested, perhaps just one, if the hardware cannot |
| handle more services simultaneously. It may be empty (zero) if |
| none of the requested services are supported by the hardware. |
| * - __u16 |
| - ``service_lines``\ [2][24] |
| - :cspan:`2` |
| |
| Applications initialize this array with sets of data services the |
| driver shall look for or insert on the respective scan line. |
| Subject to hardware capabilities drivers return the requested set, |
| a subset, which may be just a single service, or an empty set. |
| When the hardware cannot handle multiple services on the same line |
| the driver shall choose one. No assumptions can be made on which |
| service the driver chooses. |
| |
| Data services are defined in :ref:`vbi-services2`. Array indices |
| map to ITU-R line numbers\ [#f2]_ as follows: |
| * - |
| - |
| - Element |
| - 525 line systems |
| - 625 line systems |
| * - |
| - |
| - ``service_lines``\ [0][1] |
| - 1 |
| - 1 |
| * - |
| - |
| - ``service_lines``\ [0][23] |
| - 23 |
| - 23 |
| * - |
| - |
| - ``service_lines``\ [1][1] |
| - 264 |
| - 314 |
| * - |
| - |
| - ``service_lines``\ [1][23] |
| - 286 |
| - 336 |
| * - |
| - |
| - :cspan:`2` Drivers must set ``service_lines`` [0][0] and |
| ``service_lines``\ [1][0] to zero. The |
| ``V4L2_VBI_ITU_525_F1_START``, ``V4L2_VBI_ITU_525_F2_START``, |
| ``V4L2_VBI_ITU_625_F1_START`` and ``V4L2_VBI_ITU_625_F2_START`` |
| defines give the start line numbers for each field for each 525 or |
| 625 line format as a convenience. Don't forget that ITU line |
| numbering starts at 1, not 0. |
| * - __u32 |
| - ``io_size`` |
| - :cspan:`2` Maximum number of bytes passed by one |
| :c:func:`read()` or :c:func:`write()` call, |
| and the buffer size in bytes for the |
| :ref:`VIDIOC_QBUF` and |
| :ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl. Drivers set this field |
| to the size of struct |
| :c:type:`v4l2_sliced_vbi_data` times the |
| number of non-zero elements in the returned ``service_lines`` |
| array (that is the number of lines potentially carrying data). |
| * - __u32 |
| - ``reserved``\ [2] |
| - :cspan:`2` This array is reserved for future extensions. |
| |
| Applications and drivers must set it to zero. |
| |
| .. raw:: latex |
| |
| \endgroup |
| |
| .. _vbi-services2: |
| |
| Sliced VBI services |
| ------------------- |
| |
| .. raw:: latex |
| |
| \footnotesize |
| |
| .. tabularcolumns:: |p{4.2cm}|p{1.1cm}|p{2.1cm}|p{2.0cm}|p{6.5cm}| |
| |
| .. flat-table:: |
| :header-rows: 1 |
| :stub-columns: 0 |
| :widths: 2 1 1 2 2 |
| |
| * - Symbol |
| - Value |
| - Reference |
| - Lines, usually |
| - Payload |
| * - ``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. |
| * - ``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. |
| * - ``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. |
| * - ``V4L2_SLICED_WSS_625`` |
| - 0x4000 |
| - :ref:`itu1119`, |
| |
| :ref:`en300294` |
| - PAL/SECAM line 23 |
| - See :ref:`v4l2-sliced-wss-625-payload` below. |
| * - ``V4L2_SLICED_VBI_525`` |
| - 0x1000 |
| - :cspan:`2` Set of services applicable to 525 line systems. |
| * - ``V4L2_SLICED_VBI_625`` |
| - 0x4401 |
| - :cspan:`2` Set of services applicable to 625 line systems. |
| |
| .. raw:: latex |
| |
| \normalsize |
| |
| Drivers may return an ``EINVAL`` error code when applications attempt to |
| read or write data without prior format negotiation, after switching the |
| video standard (which may invalidate the negotiated VBI parameters) and |
| after switching the video input (which may change the video standard as |
| a side effect). The :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl may |
| return an ``EBUSY`` error code when applications attempt to change the |
| format while i/o is in progress (between a |
| :ref:`VIDIOC_STREAMON` and |
| :ref:`VIDIOC_STREAMOFF <VIDIOC_STREAMON>` call, and after the first |
| :c:func:`read()` or :c:func:`write()` call). |
| |
| .. _v4l2-sliced-wss-625-payload: |
| |
| V4L2_SLICED_WSS_625 payload |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The payload for ``V4L2_SLICED_WSS_625`` is: |
| |
| +-----+------------------+-----------------------+ |
| |Byte | 0 | 1 | |
| +-----+--------+---------+-----------+-----------+ |
| | | msb | lsb | msb | lsb | |
| | +-+-+-+--+--+-+-+--+--+-+--+---+---+--+-+--+ |
| | Bit |7|6|5|4 | 3|2|1|0 | x|x|13|12 | 11|10|9|8 | |
| +-----+-+-+-+--+--+-+-+--+--+-+--+---+---+--+-+--+ |
| |
| Reading and writing sliced VBI data |
| =================================== |
| |
| A single :c:func:`read()` or :c:func:`write()` |
| call must pass all data belonging to one video frame. That is an array |
| of struct :c:type:`v4l2_sliced_vbi_data` structures with one or |
| more elements and a total size not exceeding ``io_size`` bytes. Likewise |
| in streaming I/O mode one buffer of ``io_size`` bytes must contain data |
| of one video frame. The ``id`` of unused |
| struct :c:type:`v4l2_sliced_vbi_data` elements must be zero. |
| |
| .. c:type:: v4l2_sliced_vbi_data |
| |
| struct v4l2_sliced_vbi_data |
| --------------------------- |
| |
| .. tabularcolumns:: |p{1.2cm}|p{2.2cm}|p{13.9cm}| |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 3 1 4 |
| |
| * - __u32 |
| - ``id`` |
| - A flag from :ref:`vbi-services` identifying the type of data in |
| this packet. Only a single bit must be set. When the ``id`` of a |
| captured packet is zero, the packet is empty and the contents of |
| other fields are undefined. Applications shall ignore empty |
| packets. When the ``id`` of a packet for output is zero the |
| contents of the ``data`` field are undefined and the driver must |
| no longer insert data on the requested ``field`` and ``line``. |
| * - __u32 |
| - ``field`` |
| - The video field number this data has been captured from, or shall |
| be inserted at. ``0`` for the first field, ``1`` for the second |
| field. |
| * - __u32 |
| - ``line`` |
| - The field (as opposed to frame) line number this data has been |
| captured from, or shall be inserted at. See :ref:`vbi-525` and |
| :ref:`vbi-625` for valid values. Sliced VBI capture devices can |
| set the line number of all packets to ``0`` if the hardware cannot |
| reliably identify scan lines. The field number must always be |
| valid. |
| * - __u32 |
| - ``reserved`` |
| - This field is reserved for future extensions. Applications and |
| drivers must set it to zero. |
| * - __u8 |
| - ``data``\ [48] |
| - The packet payload. See :ref:`vbi-services` for the contents and |
| number of bytes passed for each data type. The contents of padding |
| bytes at the end of this array are undefined, drivers and |
| applications shall ignore them. |
| |
| Packets are always passed in ascending line number order, without |
| duplicate line numbers. The :c:func:`write()` function and |
| the :ref:`VIDIOC_QBUF` ioctl must return an ``EINVAL`` |
| error code when applications violate this rule. They must also return an |
| EINVAL error code when applications pass an incorrect field or line |
| number, or a combination of ``field``, ``line`` and ``id`` which has not |
| been negotiated with the :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` or |
| :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl. When the line numbers are |
| unknown the driver must pass the packets in transmitted order. The |
| driver can insert empty packets with ``id`` set to zero anywhere in the |
| packet array. |
| |
| To assure synchronization and to distinguish from frame dropping, when a |
| captured frame does not carry any of the requested data services drivers |
| must pass one or more empty packets. When an application fails to pass |
| VBI data in time for output, the driver must output the last VPS and WSS |
| packet again, and disable the output of Closed Caption and Teletext |
| data, or output data which is ignored by Closed Caption and Teletext |
| decoders. |
| |
| A sliced VBI device may support :ref:`read/write <rw>` and/or |
| streaming (:ref:`memory mapping <mmap>` and/or |
| :ref:`user pointer <userp>`) I/O. The latter bears the possibility of |
| synchronizing video and VBI data by using buffer timestamps. |
| |
| Sliced VBI Data in MPEG Streams |
| =============================== |
| |
| If a device can produce an MPEG output stream, it may be capable of |
| providing |
| :ref:`negotiated sliced VBI services <sliced-vbi-format-negotitation>` |
| as data embedded in the MPEG stream. Users or applications control this |
| sliced VBI data insertion with the |
| :ref:`V4L2_CID_MPEG_STREAM_VBI_FMT <v4l2-mpeg-stream-vbi-fmt>` |
| control. |
| |
| If the driver does not provide the |
| :ref:`V4L2_CID_MPEG_STREAM_VBI_FMT <v4l2-mpeg-stream-vbi-fmt>` |
| control, or only allows that control to be set to |
| :ref:`V4L2_MPEG_STREAM_VBI_FMT_NONE <v4l2-mpeg-stream-vbi-fmt>`, |
| then the device cannot embed sliced VBI data in the MPEG stream. |
| |
| The |
| :ref:`V4L2_CID_MPEG_STREAM_VBI_FMT <v4l2-mpeg-stream-vbi-fmt>` |
| control does not implicitly set the device driver to capture nor cease |
| capturing sliced VBI data. The control only indicates to embed sliced |
| VBI data in the MPEG stream, if an application has negotiated sliced VBI |
| service be captured. |
| |
| It may also be the case that a device can embed sliced VBI data in only |
| certain types of MPEG streams: for example in an MPEG-2 PS but not an |
| MPEG-2 TS. In this situation, if sliced VBI data insertion is requested, |
| the sliced VBI data will be embedded in MPEG stream types when |
| supported, and silently omitted from MPEG stream types where sliced VBI |
| data insertion is not supported by the device. |
| |
| The following subsections specify the format of the embedded sliced VBI |
| data. |
| |
| MPEG Stream Embedded, Sliced VBI Data Format: NONE |
| -------------------------------------------------- |
| |
| The |
| :ref:`V4L2_MPEG_STREAM_VBI_FMT_NONE <v4l2-mpeg-stream-vbi-fmt>` |
| embedded sliced VBI format shall be interpreted by drivers as a control |
| to cease embedding sliced VBI data in MPEG streams. Neither the device |
| nor driver shall insert "empty" embedded sliced VBI data packets in the |
| MPEG stream when this format is set. No MPEG stream data structures are |
| specified for this format. |
| |
| MPEG Stream Embedded, Sliced VBI Data Format: IVTV |
| -------------------------------------------------- |
| |
| The |
| :ref:`V4L2_MPEG_STREAM_VBI_FMT_IVTV <v4l2-mpeg-stream-vbi-fmt>` |
| embedded sliced VBI format, when supported, indicates to the driver to |
| embed up to 36 lines of sliced VBI data per frame in an MPEG-2 *Private |
| Stream 1 PES* packet encapsulated in an MPEG-2 *Program Pack* in the |
| MPEG stream. |
| |
| *Historical context*: This format specification originates from a |
| custom, embedded, sliced VBI data format used by the ``ivtv`` driver. |
| This format has already been informally specified in the kernel sources |
| in the file ``Documentation/userspace-api/media/drivers/cx2341x-uapi.rst`` . The |
| maximum size of the payload and other aspects of this format are driven |
| by the CX23415 MPEG decoder's capabilities and limitations with respect |
| to extracting, decoding, and displaying sliced VBI data embedded within |
| an MPEG stream. |
| |
| This format's use is *not* exclusive to the ``ivtv`` driver *nor* |
| exclusive to CX2341x devices, as the sliced VBI data packet insertion |
| into the MPEG stream is implemented in driver software. At least the |
| ``cx18`` driver provides sliced VBI data insertion into an MPEG-2 PS in |
| this format as well. |
| |
| The following definitions specify the payload of the MPEG-2 *Private |
| Stream 1 PES* packets that contain sliced VBI data when |
| :ref:`V4L2_MPEG_STREAM_VBI_FMT_IVTV <v4l2-mpeg-stream-vbi-fmt>` |
| is set. (The MPEG-2 *Private Stream 1 PES* packet header and |
| encapsulating MPEG-2 *Program Pack* header are not detailed here. Please |
| refer to the MPEG-2 specifications for details on those packet headers.) |
| |
| The payload of the MPEG-2 *Private Stream 1 PES* packets that contain |
| sliced VBI data is specified by struct |
| :c:type:`v4l2_mpeg_vbi_fmt_ivtv`. The |
| payload is variable length, depending on the actual number of lines of |
| sliced VBI data present in a video frame. The payload may be padded at |
| the end with unspecified fill bytes to align the end of the payload to a |
| 4-byte boundary. The payload shall never exceed 1552 bytes (2 fields |
| with 18 lines/field with 43 bytes of data/line and a 4 byte magic |
| number). |
| |
| .. c:type:: v4l2_mpeg_vbi_fmt_ivtv |
| |
| struct v4l2_mpeg_vbi_fmt_ivtv |
| ----------------------------- |
| |
| .. tabularcolumns:: |p{4.2cm}|p{2.0cm}|p{11.1cm}| |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 1 1 2 |
| |
| * - __u8 |
| - ``magic``\ [4] |
| - A "magic" constant from :ref:`v4l2-mpeg-vbi-fmt-ivtv-magic` that |
| indicates this is a valid sliced VBI data payload and also |
| indicates which member of the anonymous union, ``itv0`` or |
| ``ITV0``, to use for the payload data. |
| * - union { |
| - (anonymous) |
| * - struct :c:type:`v4l2_mpeg_vbi_itv0` |
| - ``itv0`` |
| - The primary form of the sliced VBI data payload that contains |
| anywhere from 1 to 35 lines of sliced VBI data. Line masks are |
| provided in this form of the payload indicating which VBI lines |
| are provided. |
| * - struct :ref:`v4l2_mpeg_vbi_ITV0 <v4l2-mpeg-vbi-itv0-1>` |
| - ``ITV0`` |
| - An alternate form of the sliced VBI data payload used when 36 |
| lines of sliced VBI data are present. No line masks are provided |
| in this form of the payload; all valid line mask bits are |
| implicitly set. |
| * - } |
| - |
| |
| .. _v4l2-mpeg-vbi-fmt-ivtv-magic: |
| |
| Magic Constants for struct v4l2_mpeg_vbi_fmt_ivtv magic field |
| ------------------------------------------------------------- |
| |
| .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}| |
| |
| .. flat-table:: |
| :header-rows: 1 |
| :stub-columns: 0 |
| :widths: 3 1 4 |
| |
| * - Defined Symbol |
| - Value |
| - Description |
| * - ``V4L2_MPEG_VBI_IVTV_MAGIC0`` |
| - "itv0" |
| - Indicates the ``itv0`` member of the union in struct |
| :c:type:`v4l2_mpeg_vbi_fmt_ivtv` is |
| valid. |
| * - ``V4L2_MPEG_VBI_IVTV_MAGIC1`` |
| - "ITV0" |
| - Indicates the ``ITV0`` member of the union in struct |
| :c:type:`v4l2_mpeg_vbi_fmt_ivtv` is |
| valid and that 36 lines of sliced VBI data are present. |
| |
| |
| .. c:type:: v4l2_mpeg_vbi_itv0 |
| |
| .. c:type:: v4l2_mpeg_vbi_ITV0 |
| |
| structs v4l2_mpeg_vbi_itv0 and v4l2_mpeg_vbi_ITV0 |
| ------------------------------------------------- |
| |
| .. raw:: latex |
| |
| \footnotesize |
| |
| .. tabularcolumns:: |p{4.6cm}|p{2.0cm}|p{10.7cm}| |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 1 1 2 |
| |
| * - __le32 |
| - ``linemask``\ [2] |
| - Bitmasks indicating the VBI service lines present. These |
| ``linemask`` values are stored in little endian byte order in the |
| MPEG stream. Some reference ``linemask`` bit positions with their |
| corresponding VBI line number and video field are given below. |
| b\ :sub:`0` indicates the least significant bit of a ``linemask`` |
| value: |
| |
| |
| :: |
| |
| linemask[0] b0: line 6 first field |
| linemask[0] b17: line 23 first field |
| linemask[0] b18: line 6 second field |
| linemask[0] b31: line 19 second field |
| linemask[1] b0: line 20 second field |
| linemask[1] b3: line 23 second field |
| linemask[1] b4-b31: unused and set to 0 |
| * - struct |
| :c:type:`v4l2_mpeg_vbi_itv0_line` |
| - ``line``\ [35] |
| - This is a variable length array that holds from 1 to 35 lines of |
| sliced VBI data. The sliced VBI data lines present correspond to |
| the bits set in the ``linemask`` array, starting from b\ :sub:`0` |
| of ``linemask``\ [0] up through b\ :sub:`31` of ``linemask``\ [0], |
| and from b\ :sub:`0` of ``linemask``\ [1] up through b\ :sub:`3` of |
| ``linemask``\ [1]. ``line``\ [0] corresponds to the first bit |
| found set in the ``linemask`` array, ``line``\ [1] corresponds to |
| the second bit found set in the ``linemask`` array, etc. If no |
| ``linemask`` array bits are set, then ``line``\ [0] may contain |
| one line of unspecified data that should be ignored by |
| applications. |
| |
| .. raw:: latex |
| |
| \normalsize |
| |
| .. _v4l2-mpeg-vbi-itv0-1: |
| |
| struct v4l2_mpeg_vbi_ITV0 |
| ------------------------- |
| |
| .. tabularcolumns:: |p{5.2cm}|p{2.4cm}|p{9.7cm}| |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 1 1 2 |
| |
| * - struct |
| :c:type:`v4l2_mpeg_vbi_itv0_line` |
| - ``line``\ [36] |
| - A fixed length array of 36 lines of sliced VBI data. ``line``\ [0] |
| through ``line``\ [17] correspond to lines 6 through 23 of the |
| first field. ``line``\ [18] through ``line``\ [35] corresponds to |
| lines 6 through 23 of the second field. |
| |
| |
| .. c:type:: v4l2_mpeg_vbi_itv0_line |
| |
| struct v4l2_mpeg_vbi_itv0_line |
| ------------------------------ |
| |
| .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}| |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 1 1 2 |
| |
| * - __u8 |
| - ``id`` |
| - A line identifier value from |
| :ref:`ITV0-Line-Identifier-Constants` that indicates the type of |
| sliced VBI data stored on this line. |
| * - __u8 |
| - ``data``\ [42] |
| - The sliced VBI data for the line. |
| |
| |
| .. _ITV0-Line-Identifier-Constants: |
| |
| Line Identifiers for struct v4l2_mpeg_vbi_itv0_line id field |
| ------------------------------------------------------------ |
| |
| .. tabularcolumns:: |p{7.0cm}|p{1.8cm}|p{8.5cm}| |
| |
| .. flat-table:: |
| :header-rows: 1 |
| :stub-columns: 0 |
| :widths: 3 1 4 |
| |
| * - Defined Symbol |
| - Value |
| - Description |
| * - ``V4L2_MPEG_VBI_IVTV_TELETEXT_B`` |
| - 1 |
| - Refer to :ref:`Sliced VBI services <vbi-services2>` for a |
| description of the line payload. |
| * - ``V4L2_MPEG_VBI_IVTV_CAPTION_525`` |
| - 4 |
| - Refer to :ref:`Sliced VBI services <vbi-services2>` for a |
| description of the line payload. |
| * - ``V4L2_MPEG_VBI_IVTV_WSS_625`` |
| - 5 |
| - Refer to :ref:`Sliced VBI services <vbi-services2>` for a |
| description of the line payload. |
| * - ``V4L2_MPEG_VBI_IVTV_VPS`` |
| - 7 |
| - Refer to :ref:`Sliced VBI services <vbi-services2>` for a |
| description of the line payload. |
| |
| |
| .. [#f1] |
| According to :ref:`ETS 300 706 <ets300706>` lines 6-22 of the first |
| field and lines 5-22 of the second field may carry Teletext data. |
| |
| .. [#f2] |
| See also :ref:`vbi-525` and :ref:`vbi-625`. |