UPSTREAM: media: v4l: Add a UVC Metadata format

Add a pixel format, used by the UVC driver to stream metadata.

Conflicts:
        Documentation/media/uapi/v4l/meta-formats.rst
        drivers/media/v4l2-core/v4l2-ioctl.c
        include/uapi/linux/videodev2.h

Change-Id: I979fd6b4d5d24510e47a1cfe525e8ae0a1a573ee
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@intel.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 563a01e101)
This commit is contained in:
Guennadi Liakhovetski 2017-11-08 11:00:12 -05:00 committed by Tao Huang
parent 31a4fbf741
commit 8df73b298c
4 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,15 @@
.. -*- coding: utf-8; mode: rst -*-
.. _meta-formats:
****************
Metadata Formats
****************
These formats are used for the :ref:`metadata` interface only.
.. toctree::
:maxdepth: 1
pixfmt-meta-uvc

View File

@ -0,0 +1,51 @@
.. -*- coding: utf-8; mode: rst -*-
.. _v4l2-meta-fmt-uvc:
*******************************
V4L2_META_FMT_UVC ('UVCH')
*******************************
UVC Payload Header Data
Description
===========
This format describes standard UVC metadata, extracted from UVC packet headers
and provided by the UVC driver through metadata video nodes. That data includes
exact copies of the standard part of UVC Payload Header contents and auxiliary
timing information, required for precise interpretation of timestamps, contained
in those headers. See section "2.4.3.3 Video and Still Image Payload Headers" of
the "UVC 1.5 Class specification" for details.
Each UVC payload header can be between 2 and 12 bytes large. Buffers can
contain multiple headers, if multiple such headers have been transmitted by the
camera for the respective frame. However, the driver may drop headers when the
buffer is full, when they contain no useful information (e.g. those without the
SCR field or with that field identical to the previous header), or generally to
perform rate limiting when the device sends a large number of headers.
Each individual block contains the following fields:
.. flat-table:: UVC Metadata Block
:widths: 1 4
:header-rows: 1
:stub-columns: 0
* - Field
- Description
* - __u64 ts;
- system timestamp in host byte order, measured by the driver upon
reception of the payload
* - __u16 sof;
- USB Frame Number in host byte order, also obtained by the driver as
close as possible to the above timestamp to enable correlation between
them
* - :cspan:`1` *The rest is an exact copy of the UVC payload header:*
* - __u8 length;
- length of the rest of the block, including this field
* - __u8 flags;
- Flags, indicating presence of other standard UVC fields
* - __u8 buf[];
- The rest of the header, possibly including UVC PTS and SCR fields

View File

@ -1259,6 +1259,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
case V4L2_SDR_FMT_RU12LE: descr = "Real U12LE"; break;
case V4L2_META_FMT_RK_ISP1_PARAMS: descr = "Rockchip ISP1 3A params"; break;
case V4L2_META_FMT_RK_ISP1_STAT_3A: descr = "Rockchip ISP1 3A statistics"; break;
case V4L2_META_FMT_UVC: descr = "UVC payload header metadata"; break;
default:
/* Compressed formats */

View File

@ -646,6 +646,9 @@ struct v4l2_pix_format {
#define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 params */
#define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A statistics */
/* Meta-data formats */
#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
/* priv field value to indicates that subsequent fields are valid. */
#define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe