xref: /OK3568_Linux_fs/kernel/Documentation/userspace-api/media/v4l/pixfmt-nv12m.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun.. _V4L2-PIX-FMT-NV12M:
4*4882a593Smuzhiyun.. _v4l2-pix-fmt-nv12mt-16x16:
5*4882a593Smuzhiyun.. _V4L2-PIX-FMT-NV21M:
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun***********************************************************************************
8*4882a593SmuzhiyunV4L2_PIX_FMT_NV12M ('NM12'), V4L2_PIX_FMT_NV21M ('NM21'), V4L2_PIX_FMT_NV12MT_16X16
9*4882a593Smuzhiyun***********************************************************************************
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunV4L2_PIX_FMT_NV21M
13*4882a593SmuzhiyunV4L2_PIX_FMT_NV12MT_16X16
14*4882a593SmuzhiyunVariation of ``V4L2_PIX_FMT_NV12`` and ``V4L2_PIX_FMT_NV21`` with planes
15*4882a593Smuzhiyunnon contiguous in memory.
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunDescription
19*4882a593Smuzhiyun===========
20*4882a593Smuzhiyun
21*4882a593SmuzhiyunThis is a multi-planar, two-plane version of the YUV 4:2:0 format. The
22*4882a593Smuzhiyunthree components are separated into two sub-images or planes.
23*4882a593Smuzhiyun``V4L2_PIX_FMT_NV12M`` differs from ``V4L2_PIX_FMT_NV12`` in that the
24*4882a593Smuzhiyuntwo planes are non-contiguous in memory, i.e. the chroma plane do not
25*4882a593Smuzhiyunnecessarily immediately follows the luma plane. The luminance data
26*4882a593Smuzhiyunoccupies the first plane. The Y plane has one byte per pixel. In the
27*4882a593Smuzhiyunsecond plane there is a chrominance data with alternating chroma
28*4882a593Smuzhiyunsamples. The CbCr plane is the same width, in bytes, as the Y plane (and
29*4882a593Smuzhiyunof the image), but is half as tall in pixels. Each CbCr pair belongs to
30*4882a593Smuzhiyunfour pixels. For example, Cb\ :sub:`0`/Cr\ :sub:`0` belongs to
31*4882a593SmuzhiyunY'\ :sub:`00`, Y'\ :sub:`01`, Y'\ :sub:`10`, Y'\ :sub:`11`.
32*4882a593Smuzhiyun``V4L2_PIX_FMT_NV12MT_16X16`` is the tiled version of
33*4882a593Smuzhiyun``V4L2_PIX_FMT_NV12M`` with 16x16 macroblock tiles. Here pixels are
34*4882a593Smuzhiyunarranged in 16x16 2D tiles and tiles are arranged in linear order in
35*4882a593Smuzhiyunmemory. ``V4L2_PIX_FMT_NV21M`` is the same as ``V4L2_PIX_FMT_NV12M``
36*4882a593Smuzhiyunexcept the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr
37*4882a593Smuzhiyunbyte.
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun``V4L2_PIX_FMT_NV12M`` is intended to be used only in drivers and
40*4882a593Smuzhiyunapplications that support the multi-planar API, described in
41*4882a593Smuzhiyun:ref:`planar-apis`.
42*4882a593Smuzhiyun
43*4882a593SmuzhiyunIf the Y plane has pad bytes after each row, then the CbCr plane has as
44*4882a593Smuzhiyunmany pad bytes after its rows.
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun**Byte Order.**
47*4882a593SmuzhiyunEach cell is one byte.
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun.. flat-table::
50*4882a593Smuzhiyun    :header-rows:  0
51*4882a593Smuzhiyun    :stub-columns: 0
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun    * - start0 + 0:
54*4882a593Smuzhiyun      - Y'\ :sub:`00`
55*4882a593Smuzhiyun      - Y'\ :sub:`01`
56*4882a593Smuzhiyun      - Y'\ :sub:`02`
57*4882a593Smuzhiyun      - Y'\ :sub:`03`
58*4882a593Smuzhiyun    * - start0 + 4:
59*4882a593Smuzhiyun      - Y'\ :sub:`10`
60*4882a593Smuzhiyun      - Y'\ :sub:`11`
61*4882a593Smuzhiyun      - Y'\ :sub:`12`
62*4882a593Smuzhiyun      - Y'\ :sub:`13`
63*4882a593Smuzhiyun    * - start0 + 8:
64*4882a593Smuzhiyun      - Y'\ :sub:`20`
65*4882a593Smuzhiyun      - Y'\ :sub:`21`
66*4882a593Smuzhiyun      - Y'\ :sub:`22`
67*4882a593Smuzhiyun      - Y'\ :sub:`23`
68*4882a593Smuzhiyun    * - start0 + 12:
69*4882a593Smuzhiyun      - Y'\ :sub:`30`
70*4882a593Smuzhiyun      - Y'\ :sub:`31`
71*4882a593Smuzhiyun      - Y'\ :sub:`32`
72*4882a593Smuzhiyun      - Y'\ :sub:`33`
73*4882a593Smuzhiyun    * -
74*4882a593Smuzhiyun    * - start1 + 0:
75*4882a593Smuzhiyun      - Cb\ :sub:`00`
76*4882a593Smuzhiyun      - Cr\ :sub:`00`
77*4882a593Smuzhiyun      - Cb\ :sub:`01`
78*4882a593Smuzhiyun      - Cr\ :sub:`01`
79*4882a593Smuzhiyun    * - start1 + 4:
80*4882a593Smuzhiyun      - Cb\ :sub:`10`
81*4882a593Smuzhiyun      - Cr\ :sub:`10`
82*4882a593Smuzhiyun      - Cb\ :sub:`11`
83*4882a593Smuzhiyun      - Cr\ :sub:`11`
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun**Color Sample Location:**
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun.. flat-table::
91*4882a593Smuzhiyun    :header-rows:  0
92*4882a593Smuzhiyun    :stub-columns: 0
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun    * -
95*4882a593Smuzhiyun      - 0
96*4882a593Smuzhiyun      -
97*4882a593Smuzhiyun      - 1
98*4882a593Smuzhiyun      - 2
99*4882a593Smuzhiyun      -
100*4882a593Smuzhiyun      - 3
101*4882a593Smuzhiyun    * - 0
102*4882a593Smuzhiyun      - Y
103*4882a593Smuzhiyun      -
104*4882a593Smuzhiyun      - Y
105*4882a593Smuzhiyun      - Y
106*4882a593Smuzhiyun      -
107*4882a593Smuzhiyun      - Y
108*4882a593Smuzhiyun    * -
109*4882a593Smuzhiyun      -
110*4882a593Smuzhiyun      - C
111*4882a593Smuzhiyun      -
112*4882a593Smuzhiyun      -
113*4882a593Smuzhiyun      - C
114*4882a593Smuzhiyun      -
115*4882a593Smuzhiyun    * - 1
116*4882a593Smuzhiyun      - Y
117*4882a593Smuzhiyun      -
118*4882a593Smuzhiyun      - Y
119*4882a593Smuzhiyun      - Y
120*4882a593Smuzhiyun      -
121*4882a593Smuzhiyun      - Y
122*4882a593Smuzhiyun    * -
123*4882a593Smuzhiyun    * - 2
124*4882a593Smuzhiyun      - Y
125*4882a593Smuzhiyun      -
126*4882a593Smuzhiyun      - Y
127*4882a593Smuzhiyun      - Y
128*4882a593Smuzhiyun      -
129*4882a593Smuzhiyun      - Y
130*4882a593Smuzhiyun    * -
131*4882a593Smuzhiyun      -
132*4882a593Smuzhiyun      - C
133*4882a593Smuzhiyun      -
134*4882a593Smuzhiyun      -
135*4882a593Smuzhiyun      -
136*4882a593Smuzhiyun      - C
137*4882a593Smuzhiyun      -
138*4882a593Smuzhiyun    * - 3
139*4882a593Smuzhiyun      - Y
140*4882a593Smuzhiyun      -
141*4882a593Smuzhiyun      - Y
142*4882a593Smuzhiyun      - Y
143*4882a593Smuzhiyun      -
144*4882a593Smuzhiyun      - Y
145