Commit e3ae4c20 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

media: doc: pixfmt-yuv: Document subsampling in more details

Document YUV subsampling, including chroma spatial siting, and replace
the siting examples in individual formats by references to the common
documentation.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent a1bcf9b9
......@@ -67,60 +67,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 1
- Y
-
- Y
- Y
-
- Y
* -
* - 2
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 3
- Y
-
- Y
- Y
-
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally and vertically.
......@@ -72,58 +72,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 1
- Y
-
- Y
- Y
-
- Y
* -
* - 2
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 3
- Y
-
- Y
- Y
-
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally and vertically.
......@@ -84,61 +84,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 1
- Y
-
- Y
- Y
-
- Y
* -
* - 2
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
-
- C
-
* - 3
- Y
-
- Y
- Y
-
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally and vertically.
......@@ -80,74 +80,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 1
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* -
* - 2
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 3
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -84,74 +84,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 1
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* -
* - 2
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
* - 3
- Y
-
- Y
- Y
-
- Y
* -
-
- C
-
-
- C
-
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -66,45 +66,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
- C
- Y
- Y
- C
- Y
* - 1
- Y
- C
- Y
- Y
- C
- Y
* - 2
- Y
- C
- Y
- Y
- C
- Y
* - 3
- Y
- C
- Y
- Y
- C
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -66,43 +66,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
-
- 2
- 3
* - 0
- Y
- C
- Y
- Y
- C
- Y
* - 1
- Y
- C
- Y
- Y
- C
- Y
* - 2
- Y
- C
- Y
- Y
- C
- Y
* - 3
- Y
- C
- Y
- Y
- C
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -89,63 +89,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
- 1
-
- 2
- 3
- 4
- 5
-
- 6
- 7
* - 0
- Y
- Y
- C
- Y
- Y
- Y
- Y
- C
- Y
- Y
* - 1
- Y
- Y
- C
- Y
- Y
- Y
- Y
- C
- Y
- Y
* - 2
- Y
- Y
- C
- Y
- Y
- Y
- Y
- C
- Y
- Y
* - 3
- Y
- Y
- C
- Y
- Y
- Y
- Y
- C
- Y
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -68,60 +68,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
-
- 2
-
- 3
* - 0
- Y
-
- Y
-
- Y
-
- Y
* -
* - 1
- Y
-
- Y
-
- Y
-
- Y
* -
-
-
-
- C
-
-
-
* - 2
- Y
-
- Y
-
- Y
-
- Y
* -
* - 3
- Y
-
- Y
-
- Y
-
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally and vertically.
......@@ -76,40 +76,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
- 1
-
- 2
- 3
* - 0
- Y
- Y
- C
- Y
- Y
* - 1
- Y
- Y
- C
- Y
- Y
* - 2
- Y
- Y
- C
- Y
- Y
* - 3
- Y
- Y
- C
- Y
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -77,67 +77,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
-
- 2
-
- 3
* - 0
- Y
-
- Y
-
- Y
-
- Y
* -
-
- C
-
-
-
- C
-
* - 1
- Y
-
- Y
-
- Y
-
- Y
* -
* - 2
- Y
-
- Y
-
- Y
-
- Y
* -
-
- C
-
-
-
- C
-
* - 3
- Y
-
- Y
-
- Y
-
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally and vertically.
......@@ -86,67 +86,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
-
- 2
-
- 3
* - 0
- Y
-
- Y
-
- Y
-
- Y
* -
-
- C
-
-
-
- C
-
* - 1
- Y
-
- Y
-
- Y
-
- Y
* -
* - 2
- Y
-
- Y
-
- Y
-
- Y
* -
-
- C
-
-
-
- C
-
* - 3
- Y
-
- Y
-
- Y
-
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally and vertically.
......@@ -97,45 +97,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
- C
- Y
- Y
- C
- Y
* - 1
- Y
- C
- Y
- Y
- C
- Y
* - 2
- Y
- C
- Y
- Y
- C
- Y
* - 3
- Y
- C
- Y
- Y
- C
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -85,45 +85,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
- C
- Y
- Y
- C
- Y
* - 1
- Y
- C
- Y
- Y
- C
- Y
* - 2
- Y
- C
- Y
- Y
- C
- Y
* - 3
- Y
- C
- Y
- Y
- C
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -107,35 +107,4 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
- 1
- 2
- 3
* - 0
- YC
- YC
- YC
- YC
* - 1
- YC
- YC
- YC
- YC
* - 2
- YC
- YC
- YC
- YC
* - 3
- YC
- YC
- YC
- YC
Chroma samples are :ref:`co-sited<yuv-chroma-cosited>`.
......@@ -69,50 +69,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
-
- 2
-
- 3
* - 0
- Y
- C
- Y
-
- Y
- C
- Y
* - 1
- Y
- C
- Y
-
- Y
- C
- Y
* - 2
- Y
- C
- Y
-
- Y
- C
- Y
* - 3
- Y
- C
- Y
-
- Y
- C
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -66,43 +66,5 @@ Each cell is one byte.
**Color Sample Location:**
.. flat-table::
:header-rows: 0
:stub-columns: 0
* -
- 0
-
- 1
- 2
-
- 3
* - 0
- Y
- C
- Y
- Y
- C
- Y
* - 1
- Y
- C
- Y
- Y
- C
- Y
* - 2
- Y
- C
- Y
- Y
- C
- Y
* - 3
- Y
- C
- Y
- Y
- C
- Y
Chroma samples are :ref:`interstitially sited<yuv-chroma-centered>`
horizontally.
......@@ -14,11 +14,251 @@ reconstructed by subtracting from the brightness component. See
:ref:`colorspaces` for conversion examples. YUV was chosen because
early television would only transmit brightness information. To add
color in a way compatible with existing receivers a new signal carrier
was added to transmit the color difference signals. Secondary in the YUV
format the U and V components usually have lower resolution than the Y
component. This is an analog video compression technique taking
advantage of a property of the human visual system, being more sensitive
to brightness information.
was added to transmit the color difference signals.
Subsampling
===========
YUV formats commonly encode images with a lower resolution for the chroma
components than for the luma component. This compression technique, taking
advantage of the human eye being more sensitive to luminance than color
differences, is called chroma subsampling.
While many combinations of subsampling factors in the horizontal and vertical
direction are possible, common factors are 1 (no subsampling), 2 and 4, with
horizontal subsampling always larger than or equal to vertical subsampling.
Common combinations are named as follows.
- `4:4:4`: No subsampling
- `4:2:2`: Horizontal subsampling by 2, no vertical subsampling
- `4:2:0`: Horizontal subsampling by 2, vertical subsampling by 2
- `4:1:1`: Horizontal subsampling by 4, no vertical subsampling
- `4:1:0`: Horizontal subsampling by 4, vertical subsampling by 4
Subsampling the chroma component effectively creates chroma values that can be
located in different spatial locations:
- .. _yuv-chroma-centered:
The subsampled chroma value may be calculated by simply averaging the chroma
value of two consecutive pixels. It effectively models the chroma of a pixel
sited between the two original pixels. This is referred to as centered or
interstitially sited chroma.
- .. _yuv-chroma-cosited:
The other option is to subsample chroma values in a way that place them in
the same spatial sites as the pixels. This may be performed by skipping every
other chroma sample (creating aliasing artifacts), or with filters using an
odd number of taps. This is referred to as co-sited chroma.
The following examples show different combination of chroma siting in a 4x4
image.
.. flat-table:: 4:2:2 subsampling, interstitially sited
:header-rows: 1
:stub-columns: 1
* -
- 0
-
- 1
-
- 2
-
- 3
* - 0
- Y
- C
- Y
-
- Y
- C
- Y
* - 1
- Y
- C
- Y
-
- Y
- C
- Y
* - 2
- Y
- C
- Y
-
- Y
- C
- Y
* - 3
- Y
- C
- Y
-
- Y
- C
- Y
.. flat-table:: 4:2:2 subsampling, co-sited
:header-rows: 1
:stub-columns: 1
* -
- 0
-
- 1
-
- 2
-
- 3
* - 0
- Y/C
-
- Y
-
- Y/C
-
- Y
* - 1
- Y/C
-
- Y
-
- Y/C
-
- Y
* - 2
- Y/C
-
- Y
-
- Y/C
-
- Y
* - 3
- Y/C
-
- Y
-
- Y/C
-
- Y
.. flat-table:: 4:2:0 subsampling, horizontally interstitially sited, vertically co-sited
:header-rows: 1
:stub-columns: 1
* -
- 0
-
- 1
-
- 2
-
- 3
* - 0
- Y
- C
- Y
-
- Y
- C
- Y
* - 1
- Y
-
- Y
-
- Y
-
- Y
* - 2
- Y
- C
- Y
-
- Y
- C
- Y
* - 3
- Y
-
- Y
-
- Y
-
- Y
.. flat-table:: 4:1:0 subsampling, horizontally and vertically interstitially sited
:header-rows: 1
:stub-columns: 1
* -
- 0
-
- 1
-
- 2
-
- 3
* - 0
- Y
-
- Y
-
- Y
-
- Y
* -
-
-
-
-
-
-
-
* - 1
- Y
-
- Y
-
- Y
-
- Y
* -
-
-
-
- C
-
-
-
* - 2
- Y
-
- Y
-
- Y
-
- Y
* -
-
-
-
-
-
-
-
* - 3
- Y
-
- Y
-
- Y
-
- Y
.. toctree::
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment