forked from Minki/linux
media: doc: pixfmt-yuv: Move all semi-planar YUV formats to common file
Semi-planar pixel formats are documented in separate files. This duplicates information, as those formats share comon traits. Consolidate them in a single file and summarize their descriptions in a single table. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
af4f450576
commit
da785536e0
@ -1,76 +0,0 @@
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _V4L2-PIX-FMT-NV12:
|
||||
.. _V4L2-PIX-FMT-NV21:
|
||||
|
||||
******************************************************
|
||||
V4L2_PIX_FMT_NV12 ('NV12'), V4L2_PIX_FMT_NV21 ('NV21')
|
||||
******************************************************
|
||||
|
||||
|
||||
V4L2_PIX_FMT_NV21
|
||||
Formats with ½ horizontal and vertical chroma resolution, also known as
|
||||
YUV 4:2:0. One luminance and one chrominance plane with alternating
|
||||
chroma samples as opposed to ``V4L2_PIX_FMT_YVU420``
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
These are two-plane versions of the YUV 4:2:0 format. The three
|
||||
components are separated into two sub-images or planes. The Y plane is
|
||||
first. The Y plane has one byte per pixel. For ``V4L2_PIX_FMT_NV12``, a
|
||||
combined CbCr plane immediately follows the Y plane in memory. The CbCr
|
||||
plane is the same width, in bytes, as the Y plane (and of the image),
|
||||
but is half as tall in pixels. Each CbCr pair belongs to four pixels.
|
||||
For example, Cb\ :sub:`0`/Cr\ :sub:`0` belongs to Y'\ :sub:`00`,
|
||||
Y'\ :sub:`01`, Y'\ :sub:`10`, Y'\ :sub:`11`. ``V4L2_PIX_FMT_NV21`` is
|
||||
the same except the Cb and Cr bytes are swapped, the CrCb plane starts
|
||||
with a Cr byte.
|
||||
|
||||
If the Y plane has pad bytes after each row, then the CbCr plane has as
|
||||
many pad bytes after its rows.
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte.
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* - start + 16:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`01`
|
||||
- Cr\ :sub:`01`
|
||||
* - start + 20:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`11`
|
||||
- Cr\ :sub:`11`
|
||||
|
||||
|
||||
**Color Sample Location:**
|
||||
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
|
||||
horizontally and vertically.
|
@ -1,88 +0,0 @@
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _V4L2-PIX-FMT-NV12M:
|
||||
.. _v4l2-pix-fmt-nv12mt-16x16:
|
||||
.. _V4L2-PIX-FMT-NV21M:
|
||||
|
||||
***********************************************************************************
|
||||
V4L2_PIX_FMT_NV12M ('NM12'), V4L2_PIX_FMT_NV21M ('NM21'), V4L2_PIX_FMT_NV12MT_16X16
|
||||
***********************************************************************************
|
||||
|
||||
|
||||
V4L2_PIX_FMT_NV21M
|
||||
V4L2_PIX_FMT_NV12MT_16X16
|
||||
Variation of ``V4L2_PIX_FMT_NV12`` and ``V4L2_PIX_FMT_NV21`` with planes
|
||||
non contiguous in memory.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This is a multi-planar, two-plane version of the YUV 4:2:0 format. The
|
||||
three components are separated into two sub-images or planes.
|
||||
``V4L2_PIX_FMT_NV12M`` differs from ``V4L2_PIX_FMT_NV12`` in that the
|
||||
two planes are non-contiguous in memory, i.e. the chroma plane do not
|
||||
necessarily immediately follows the luma plane. The luminance data
|
||||
occupies the first plane. The Y plane has one byte per pixel. In the
|
||||
second plane there is a chrominance data with alternating chroma
|
||||
samples. The CbCr plane is the same width, in bytes, as the Y plane (and
|
||||
of the image), but is half as tall in pixels. Each CbCr pair belongs to
|
||||
four pixels. For example, Cb\ :sub:`0`/Cr\ :sub:`0` belongs to
|
||||
Y'\ :sub:`00`, Y'\ :sub:`01`, Y'\ :sub:`10`, Y'\ :sub:`11`.
|
||||
``V4L2_PIX_FMT_NV12MT_16X16`` is the tiled version of
|
||||
``V4L2_PIX_FMT_NV12M`` with 16x16 macroblock tiles. Here pixels are
|
||||
arranged in 16x16 2D tiles and tiles are arranged in linear order in
|
||||
memory. ``V4L2_PIX_FMT_NV21M`` is the same as ``V4L2_PIX_FMT_NV12M``
|
||||
except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr
|
||||
byte.
|
||||
|
||||
``V4L2_PIX_FMT_NV12M`` is intended to be used only in drivers and
|
||||
applications that support the multi-planar API, described in
|
||||
:ref:`planar-apis`.
|
||||
|
||||
If the Y plane has pad bytes after each row, then the CbCr plane has as
|
||||
many pad bytes after its rows.
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte.
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start0 + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start0 + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start0 + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start0 + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* -
|
||||
* - start1 + 0:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`01`
|
||||
- Cr\ :sub:`01`
|
||||
* - start1 + 4:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`11`
|
||||
- Cr\ :sub:`11`
|
||||
|
||||
|
||||
**Color Sample Location:**
|
||||
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
|
||||
horizontally and vertically.
|
@ -1,60 +0,0 @@
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _V4L2-PIX-FMT-NV12MT:
|
||||
|
||||
****************************
|
||||
V4L2_PIX_FMT_NV12MT ('TM12')
|
||||
****************************
|
||||
|
||||
Formats with ½ horizontal and vertical chroma resolution. This format
|
||||
has two planes - one for luminance and one for chrominance. Chroma
|
||||
samples are interleaved. The difference to ``V4L2_PIX_FMT_NV12`` is the
|
||||
memory layout. Pixels are grouped in macroblocks of 64x32 size. The
|
||||
order of macroblocks in memory is also not standard.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This is the two-plane versions of the YUV 4:2:0 format where data is
|
||||
grouped into 64x32 macroblocks. The three components are separated into
|
||||
two sub-images or planes. The Y plane has one byte per pixel and pixels
|
||||
are grouped into 64x32 macroblocks. The CbCr plane has the same width,
|
||||
in bytes, as the Y plane (and the image), but is half as tall in pixels.
|
||||
The chroma plane is also grouped into 64x32 macroblocks.
|
||||
|
||||
Width of the buffer has to be aligned to the multiple of 128, and height
|
||||
alignment is 32. Every four adjacent buffers - two horizontally and two
|
||||
vertically are grouped together and are located in memory in Z or
|
||||
flipped Z order.
|
||||
|
||||
Layout of macroblocks in memory is presented in the following figure.
|
||||
|
||||
|
||||
.. _nv12mt:
|
||||
|
||||
.. kernel-figure:: nv12mt.svg
|
||||
:alt: nv12mt.svg
|
||||
:align: center
|
||||
|
||||
V4L2_PIX_FMT_NV12MT macroblock Z shape memory layout
|
||||
|
||||
The requirement that width is multiple of 128 is implemented because,
|
||||
the Z shape cannot be cut in half horizontally. In case the vertical
|
||||
resolution of macroblocks is odd then the last row of macroblocks is
|
||||
arranged in a linear order.
|
||||
|
||||
In case of chroma the layout is identical. Cb and Cr samples are
|
||||
interleaved. Height of the buffer is aligned to 32.
|
||||
|
||||
|
||||
.. _nv12mt_ex:
|
||||
|
||||
.. kernel-figure:: nv12mt_example.svg
|
||||
:alt: nv12mt_example.svg
|
||||
:align: center
|
||||
|
||||
Example V4L2_PIX_FMT_NV12MT memory layout of macroblocks
|
||||
|
||||
Memory layout of macroblocks of ``V4L2_PIX_FMT_NV12MT`` format in most
|
||||
extreme case.
|
@ -1,84 +0,0 @@
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _V4L2-PIX-FMT-NV16:
|
||||
.. _V4L2-PIX-FMT-NV61:
|
||||
|
||||
******************************************************
|
||||
V4L2_PIX_FMT_NV16 ('NV16'), V4L2_PIX_FMT_NV61 ('NV61')
|
||||
******************************************************
|
||||
|
||||
V4L2_PIX_FMT_NV61
|
||||
Formats with ½ horizontal chroma resolution, also known as YUV 4:2:2.
|
||||
One luminance and one chrominance plane with alternating chroma samples
|
||||
as opposed to ``V4L2_PIX_FMT_YVU420``
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
These are two-plane versions of the YUV 4:2:2 format. The three
|
||||
components are separated into two sub-images or planes. The Y plane is
|
||||
first. The Y plane has one byte per pixel. For ``V4L2_PIX_FMT_NV16``, a
|
||||
combined CbCr plane immediately follows the Y plane in memory. The CbCr
|
||||
plane is the same width and height, in bytes, as the Y plane (and of the
|
||||
image). Each CbCr pair belongs to two pixels. For example,
|
||||
Cb\ :sub:`0`/Cr\ :sub:`0` belongs to Y'\ :sub:`00`, Y'\ :sub:`01`.
|
||||
``V4L2_PIX_FMT_NV61`` is the same except the Cb and Cr bytes are
|
||||
swapped, the CrCb plane starts with a Cr byte.
|
||||
|
||||
If the Y plane has pad bytes after each row, then the CbCr plane has as
|
||||
many pad bytes after its rows.
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte.
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* - start + 16:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`01`
|
||||
- Cr\ :sub:`01`
|
||||
* - start + 20:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`11`
|
||||
- Cr\ :sub:`11`
|
||||
* - start + 24:
|
||||
- Cb\ :sub:`20`
|
||||
- Cr\ :sub:`20`
|
||||
- Cb\ :sub:`21`
|
||||
- Cr\ :sub:`21`
|
||||
* - start + 28:
|
||||
- Cb\ :sub:`30`
|
||||
- Cr\ :sub:`30`
|
||||
- Cb\ :sub:`31`
|
||||
- Cr\ :sub:`31`
|
||||
|
||||
|
||||
**Color Sample Location:**
|
||||
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
|
||||
horizontally.
|
@ -1,88 +0,0 @@
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _V4L2-PIX-FMT-NV16M:
|
||||
.. _v4l2-pix-fmt-nv61m:
|
||||
|
||||
********************************************************
|
||||
V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M ('NM61')
|
||||
********************************************************
|
||||
|
||||
V4L2_PIX_FMT_NV61M
|
||||
Variation of ``V4L2_PIX_FMT_NV16`` and ``V4L2_PIX_FMT_NV61`` with planes
|
||||
non contiguous in memory.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This is a multi-planar, two-plane version of the YUV 4:2:2 format. The
|
||||
three components are separated into two sub-images or planes.
|
||||
``V4L2_PIX_FMT_NV16M`` differs from ``V4L2_PIX_FMT_NV16`` in that the
|
||||
two planes are non-contiguous in memory, i.e. the chroma plane does not
|
||||
necessarily immediately follow the luma plane. The luminance data
|
||||
occupies the first plane. The Y plane has one byte per pixel. In the
|
||||
second plane there is chrominance data with alternating chroma samples.
|
||||
The CbCr plane is the same width and height, in bytes, as the Y plane.
|
||||
Each CbCr pair belongs to two pixels. For example,
|
||||
Cb\ :sub:`0`/Cr\ :sub:`0` belongs to Y'\ :sub:`00`, Y'\ :sub:`01`.
|
||||
``V4L2_PIX_FMT_NV61M`` is the same as ``V4L2_PIX_FMT_NV16M`` except the
|
||||
Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte.
|
||||
|
||||
``V4L2_PIX_FMT_NV16M`` and ``V4L2_PIX_FMT_NV61M`` are intended to be
|
||||
used only in drivers and applications that support the multi-planar API,
|
||||
described in :ref:`planar-apis`.
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte.
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start0 + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start0 + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start0 + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start0 + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* -
|
||||
* - start1 + 0:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`02`
|
||||
- Cr\ :sub:`02`
|
||||
* - start1 + 4:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`12`
|
||||
- Cr\ :sub:`12`
|
||||
* - start1 + 8:
|
||||
- Cb\ :sub:`20`
|
||||
- Cr\ :sub:`20`
|
||||
- Cb\ :sub:`22`
|
||||
- Cr\ :sub:`22`
|
||||
* - start1 + 12:
|
||||
- Cb\ :sub:`30`
|
||||
- Cr\ :sub:`30`
|
||||
- Cb\ :sub:`32`
|
||||
- Cr\ :sub:`32`
|
||||
|
||||
|
||||
**Color Sample Location:**
|
||||
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
|
||||
horizontally.
|
@ -1,95 +0,0 @@
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. _V4L2-PIX-FMT-NV24:
|
||||
.. _V4L2-PIX-FMT-NV42:
|
||||
|
||||
******************************************************
|
||||
V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42 ('NV42')
|
||||
******************************************************
|
||||
|
||||
V4L2_PIX_FMT_NV42
|
||||
Formats with full horizontal and vertical chroma resolutions, also known
|
||||
as YUV 4:4:4. One luminance and one chrominance plane with alternating
|
||||
chroma samples as opposed to ``V4L2_PIX_FMT_YVU420``
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
These are two-plane versions of the YUV 4:4:4 format. The three
|
||||
components are separated into two sub-images or planes. The Y plane is
|
||||
first, with each Y sample stored in one byte per pixel. For
|
||||
``V4L2_PIX_FMT_NV24``, a combined CbCr plane immediately follows the Y
|
||||
plane in memory. The CbCr plane has the same width and height, in
|
||||
pixels, as the Y plane (and the image). Each line contains one CbCr pair
|
||||
per pixel, with each Cb and Cr sample stored in one byte.
|
||||
``V4L2_PIX_FMT_NV42`` is the same except that the Cb and Cr samples are
|
||||
swapped, the CrCb plane starts with a Cr sample.
|
||||
|
||||
If the Y plane has pad bytes after each row, then the CbCr plane has
|
||||
twice as many pad bytes after its rows.
|
||||
|
||||
**Byte Order.**
|
||||
Each cell is one byte.
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* - start + 16:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`01`
|
||||
- Cr\ :sub:`01`
|
||||
- Cb\ :sub:`02`
|
||||
- Cr\ :sub:`02`
|
||||
- Cb\ :sub:`03`
|
||||
- Cr\ :sub:`03`
|
||||
* - start + 24:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`11`
|
||||
- Cr\ :sub:`11`
|
||||
- Cb\ :sub:`12`
|
||||
- Cr\ :sub:`12`
|
||||
- Cb\ :sub:`13`
|
||||
- Cr\ :sub:`13`
|
||||
* - start + 32:
|
||||
- Cb\ :sub:`20`
|
||||
- Cr\ :sub:`20`
|
||||
- Cb\ :sub:`21`
|
||||
- Cr\ :sub:`21`
|
||||
- Cb\ :sub:`22`
|
||||
- Cr\ :sub:`22`
|
||||
- Cb\ :sub:`23`
|
||||
- Cr\ :sub:`23`
|
||||
* - start + 40:
|
||||
- Cb\ :sub:`30`
|
||||
- Cr\ :sub:`30`
|
||||
- Cb\ :sub:`31`
|
||||
- Cr\ :sub:`31`
|
||||
- Cb\ :sub:`32`
|
||||
- Cr\ :sub:`32`
|
||||
- Cb\ :sub:`33`
|
||||
- Cr\ :sub:`33`
|
463
Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
Normal file
463
Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
Normal file
@ -0,0 +1,463 @@
|
||||
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||||
|
||||
.. planar-yuv:
|
||||
|
||||
******************
|
||||
Planar YUV formats
|
||||
******************
|
||||
|
||||
Planar formats split luma and chroma data in separate memory regions. They
|
||||
exist in two variants:
|
||||
|
||||
- Semi-planar formats use two planes. The first plane is the luma plane and
|
||||
stores the Y components. The second plane is the chroma plane and stores the
|
||||
Cb and Cr components interleaved.
|
||||
|
||||
- Fully planar formats use three planes to store the Y, Cb and Cr components
|
||||
separately.
|
||||
|
||||
Within a plane, components are stored in pixel order, which may be linear or
|
||||
tiled. Padding may be supported at the end of the lines, and the line stride of
|
||||
the chroma planes may be constrained by the line stride of the luma plane.
|
||||
|
||||
Some planar formats allow planes to be placed in independent memory locations.
|
||||
They are identified by an 'M' suffix in their name (such as in
|
||||
``V4L2_PIX_FMT_NV12M``). Those formats are intended to be used only in drivers
|
||||
and applications that support the multi-planar API, described in
|
||||
:ref:`planar-apis`. Unless explicitly documented as supporting non-contiguous
|
||||
planes, formats require the planes to follow each other immediately in memory.
|
||||
|
||||
|
||||
Semi-Planar YUV Formats
|
||||
=======================
|
||||
|
||||
These formats are commonly referred to as NV formats (NV12, NV16, ...). They
|
||||
use two planes, and store the luma components in the first plane and the chroma
|
||||
components in the second plane. The Cb and Cr components are interleaved in the
|
||||
chroma plane, with Cb and Cr always stored in pairs. The chroma order is
|
||||
exposed as different formats.
|
||||
|
||||
For memory contiguous formats, the number of padding pixels at the end of the
|
||||
chroma lines is identical to the padding of the luma lines. Without horizontal
|
||||
subsampling, the chroma line stride (in bytes) is thus equal to twice the luma
|
||||
line stride. With horizontal subsampling by 2, the chroma line stride is equal
|
||||
to the luma line stride. Vertical subsampling doesn't affect the line stride.
|
||||
|
||||
For non-contiguous formats, no constraints are enforced by the format on the
|
||||
relationship between the luma and chroma line padding and stride.
|
||||
|
||||
All components are stored with the same number of bits per component.
|
||||
|
||||
.. flat-table:: Overview of Semi-Planar YUV Formats
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
* - Identifier
|
||||
- Code
|
||||
- Bits per component
|
||||
- Subsampling
|
||||
- Chroma order [1]_
|
||||
- Contiguous [2]_
|
||||
- Tiling [3]_
|
||||
* - V4L2_PIX_FMT_NV12
|
||||
- 'NV12'
|
||||
- 8
|
||||
- 4:2:0
|
||||
- Cb, Cr
|
||||
- Yes
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV21
|
||||
- 'NV21'
|
||||
- 8
|
||||
- 4:2:0
|
||||
- Cr, Cr
|
||||
- Yes
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV12M
|
||||
- 'NM12'
|
||||
- 8
|
||||
- 4:2:0
|
||||
- Cb, Cr
|
||||
- No
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV21M
|
||||
- 'NM21'
|
||||
- 8
|
||||
- 4:2:0
|
||||
- Cr, Cr
|
||||
- No
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV12MT
|
||||
- 'TM12'
|
||||
- 8
|
||||
- 4:2:0
|
||||
- Cb, Cr
|
||||
- No
|
||||
- 64x32 macroblocks
|
||||
|
||||
Horizontal Z order
|
||||
* - V4L2_PIX_FMT_NV12MT_16X16
|
||||
- 'VM12'
|
||||
- 8
|
||||
- 4:2:2
|
||||
- Cb, Cr
|
||||
- No
|
||||
- 16x16 macroblocks
|
||||
* - V4L2_PIX_FMT_NV16
|
||||
- 'NV16'
|
||||
- 8
|
||||
- 4:2:2
|
||||
- Cb, Cr
|
||||
- Yes
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV61
|
||||
- 'NV61'
|
||||
- 8
|
||||
- 4:2:2
|
||||
- Cr, Cr
|
||||
- Yes
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV16M
|
||||
- 'NM16'
|
||||
- 8
|
||||
- 4:2:2
|
||||
- Cb, Cr
|
||||
- No
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV61M
|
||||
- 'NM61'
|
||||
- 8
|
||||
- 4:2:2
|
||||
- Cr, Cr
|
||||
- No
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV24
|
||||
- 'NV24'
|
||||
- 8
|
||||
- 4:4:4
|
||||
- Cb, Cr
|
||||
- Yes
|
||||
- Linear
|
||||
* - V4L2_PIX_FMT_NV42
|
||||
- 'NV42'
|
||||
- 8
|
||||
- 4:4:4
|
||||
- Cr, Cr
|
||||
- Yes
|
||||
- Linear
|
||||
|
||||
.. note::
|
||||
|
||||
.. [1] Order of chroma samples in the second plane
|
||||
.. [2] Indicates if planes have to be contiguous in memory or can be
|
||||
disjoint
|
||||
.. [3] Macroblock size in pixels
|
||||
|
||||
|
||||
**Color Sample Location:**
|
||||
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
|
||||
horizontally.
|
||||
|
||||
|
||||
.. _V4L2-PIX-FMT-NV12:
|
||||
.. _V4L2-PIX-FMT-NV21:
|
||||
.. _V4L2-PIX-FMT-NV12M:
|
||||
.. _V4L2-PIX-FMT-NV21M:
|
||||
|
||||
NV12, NV21, NV12M and NV21M
|
||||
---------------------------
|
||||
|
||||
Semi-planar YUV 4:2:0 formats. The chroma plane is subsampled by 2 in each
|
||||
direction. Chroma lines contain half the number of pixels and the same number
|
||||
of bytes as luma lines, and the chroma plane contains half the number of lines
|
||||
of the luma plane.
|
||||
|
||||
.. flat-table:: Sample 4x4 NV12 Image
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* - start + 16:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`01`
|
||||
- Cr\ :sub:`01`
|
||||
* - start + 20:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`11`
|
||||
- Cr\ :sub:`11`
|
||||
|
||||
.. flat-table:: Sample 4x4 NV12M Image
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start0 + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start0 + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start0 + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start0 + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* -
|
||||
* - start1 + 0:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`01`
|
||||
- Cr\ :sub:`01`
|
||||
* - start1 + 4:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`11`
|
||||
- Cr\ :sub:`11`
|
||||
|
||||
|
||||
.. _V4L2-PIX-FMT-NV12MT:
|
||||
.. _V4L2-PIX-FMT-NV12MT-16X16:
|
||||
|
||||
NV12MT and MV12MT_16X16
|
||||
-----------------------
|
||||
|
||||
Semi-planar YUV 4:2:0 formats, using macroblock tiling. The chroma plane is
|
||||
subsampled by 2 in each direction. Chroma lines contain half the number of
|
||||
pixels and the same number of bytes as luma lines, and the chroma plane
|
||||
contains half the number of lines of the luma plane.
|
||||
|
||||
``V4L2_PIX_FMT_NV12MT_16X16`` stores pixel in 2D 16x16 macroblocks, and stores
|
||||
macroblocks linearly in memory. The line stride and image height must be
|
||||
aligned to a multiple of 16. The layouts of the luma and chroma planes are
|
||||
identical.
|
||||
|
||||
``V4L2_PIX_FMT_NV12MT`` stores pixels in 2D 64x32 macroblocks, and stores 2x2
|
||||
groups of macroblocks in Z-order in memory, alternating Z and mirrored Z shapes
|
||||
horizontally. The line stride must be a multiple of 128 pixels to ensure an
|
||||
integer number of Z shapes. The image height must be a multiple of 32 pixels.
|
||||
If the vertical resolution is an odd number of macroblocks, the last row of
|
||||
macroblocks is stored in linear order. The layouts of the luma and chroma
|
||||
planes are identical.
|
||||
|
||||
.. _nv12mt:
|
||||
|
||||
.. kernel-figure:: nv12mt.svg
|
||||
:alt: nv12mt.svg
|
||||
:align: center
|
||||
|
||||
V4L2_PIX_FMT_NV12MT macroblock Z shape memory layout
|
||||
|
||||
.. _nv12mt_ex:
|
||||
|
||||
.. kernel-figure:: nv12mt_example.svg
|
||||
:alt: nv12mt_example.svg
|
||||
:align: center
|
||||
|
||||
Example V4L2_PIX_FMT_NV12MT memory layout of macroblocks
|
||||
|
||||
|
||||
.. _V4L2-PIX-FMT-NV16:
|
||||
.. _V4L2-PIX-FMT-NV61:
|
||||
.. _V4L2-PIX-FMT-NV16M:
|
||||
.. _V4L2-PIX-FMT-NV61M:
|
||||
|
||||
NV16, NV61, NV16M and NV61M
|
||||
---------------------------
|
||||
|
||||
Semi-planar YUV 4:2:2 formats. The chroma plane is subsampled by 2 in the
|
||||
horizontal direction. Chroma lines contain half the number of pixels and the
|
||||
same number of bytes as luma lines, and the chroma plane contains the same
|
||||
number of lines as the luma plane.
|
||||
|
||||
.. flat-table:: Sample 4x4 NV16 Image
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* - start + 16:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`01`
|
||||
- Cr\ :sub:`01`
|
||||
* - start + 20:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`11`
|
||||
- Cr\ :sub:`11`
|
||||
* - start + 24:
|
||||
- Cb\ :sub:`20`
|
||||
- Cr\ :sub:`20`
|
||||
- Cb\ :sub:`21`
|
||||
- Cr\ :sub:`21`
|
||||
* - start + 28:
|
||||
- Cb\ :sub:`30`
|
||||
- Cr\ :sub:`30`
|
||||
- Cb\ :sub:`31`
|
||||
- Cr\ :sub:`31`
|
||||
|
||||
.. flat-table:: Sample 4x4 NV16M Image
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start0 + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start0 + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start0 + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start0 + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* -
|
||||
* - start1 + 0:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`02`
|
||||
- Cr\ :sub:`02`
|
||||
* - start1 + 4:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`12`
|
||||
- Cr\ :sub:`12`
|
||||
* - start1 + 8:
|
||||
- Cb\ :sub:`20`
|
||||
- Cr\ :sub:`20`
|
||||
- Cb\ :sub:`22`
|
||||
- Cr\ :sub:`22`
|
||||
* - start1 + 12:
|
||||
- Cb\ :sub:`30`
|
||||
- Cr\ :sub:`30`
|
||||
- Cb\ :sub:`32`
|
||||
- Cr\ :sub:`32`
|
||||
|
||||
|
||||
.. _V4L2-PIX-FMT-NV24:
|
||||
.. _V4L2-PIX-FMT-NV42:
|
||||
|
||||
NV24 and NV42
|
||||
-------------
|
||||
|
||||
Semi-planar YUV 4:4:4 formats. The chroma plane is subsampled by 2 in the
|
||||
horizontal direction. Chroma lines contain half the number of pixels and the
|
||||
same number of bytes as luma lines, and the chroma plane contains the same
|
||||
number of lines as the luma plane.
|
||||
|
||||
.. flat-table:: Sample 4x4 NV24 Image
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
* - start + 0:
|
||||
- Y'\ :sub:`00`
|
||||
- Y'\ :sub:`01`
|
||||
- Y'\ :sub:`02`
|
||||
- Y'\ :sub:`03`
|
||||
* - start + 4:
|
||||
- Y'\ :sub:`10`
|
||||
- Y'\ :sub:`11`
|
||||
- Y'\ :sub:`12`
|
||||
- Y'\ :sub:`13`
|
||||
* - start + 8:
|
||||
- Y'\ :sub:`20`
|
||||
- Y'\ :sub:`21`
|
||||
- Y'\ :sub:`22`
|
||||
- Y'\ :sub:`23`
|
||||
* - start + 12:
|
||||
- Y'\ :sub:`30`
|
||||
- Y'\ :sub:`31`
|
||||
- Y'\ :sub:`32`
|
||||
- Y'\ :sub:`33`
|
||||
* - start + 16:
|
||||
- Cb\ :sub:`00`
|
||||
- Cr\ :sub:`00`
|
||||
- Cb\ :sub:`01`
|
||||
- Cr\ :sub:`01`
|
||||
- Cb\ :sub:`02`
|
||||
- Cr\ :sub:`02`
|
||||
- Cb\ :sub:`03`
|
||||
- Cr\ :sub:`03`
|
||||
* - start + 24:
|
||||
- Cb\ :sub:`10`
|
||||
- Cr\ :sub:`10`
|
||||
- Cb\ :sub:`11`
|
||||
- Cr\ :sub:`11`
|
||||
- Cb\ :sub:`12`
|
||||
- Cr\ :sub:`12`
|
||||
- Cb\ :sub:`13`
|
||||
- Cr\ :sub:`13`
|
||||
* - start + 32:
|
||||
- Cb\ :sub:`20`
|
||||
- Cr\ :sub:`20`
|
||||
- Cb\ :sub:`21`
|
||||
- Cr\ :sub:`21`
|
||||
- Cb\ :sub:`22`
|
||||
- Cr\ :sub:`22`
|
||||
- Cb\ :sub:`23`
|
||||
- Cr\ :sub:`23`
|
||||
* - start + 40:
|
||||
- Cb\ :sub:`30`
|
||||
- Cr\ :sub:`30`
|
||||
- Cb\ :sub:`31`
|
||||
- Cr\ :sub:`31`
|
||||
- Cb\ :sub:`32`
|
||||
- Cr\ :sub:`32`
|
||||
- Cb\ :sub:`33`
|
||||
- Cr\ :sub:`33`
|
@ -265,6 +265,7 @@ image.
|
||||
:maxdepth: 1
|
||||
|
||||
pixfmt-packed-yuv
|
||||
pixfmt-yuv-planar
|
||||
pixfmt-yuv-luma
|
||||
pixfmt-y8i
|
||||
pixfmt-y12i
|
||||
@ -276,10 +277,4 @@ image.
|
||||
pixfmt-yuv410
|
||||
pixfmt-yuv422p
|
||||
pixfmt-yuv411p
|
||||
pixfmt-nv12
|
||||
pixfmt-nv12m
|
||||
pixfmt-nv12mt
|
||||
pixfmt-nv16
|
||||
pixfmt-nv16m
|
||||
pixfmt-nv24
|
||||
pixfmt-m420
|
||||
|
Loading…
Reference in New Issue
Block a user