← Documents Documentation/gpu/afbc.rst GitHub 원문 ↗

Linux 6.18.37 · GPU

Arm Framebuffer Compression (AFBC)

AFBC component order, plane layout와 canonical cross-device format을 설명하는 전문 번역입니다.

Source pathDocumentation/gpu/afbc.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

afbc.rst:1-235

AFBC는 DRM fourcc와 `DRM_FORMAT_MOD_ARM_AFBC(*)` modifier 조합으로 표현하는 lossless framebuffer compression format이다. Producer와 consumer는 component 순서와 plane 수를 동일하게 해석해야 한다.

RGB에서는 component 0부터 R·G·B 순서를 지키며 YTR 사용이 권장된다. 사용하지 않는 X channel은 압축 효율을 낮춘다. YCbCr format은 fourcc가 single/two-plane 배치와 subsampling을 결정한다.

Cross-device 사용에서는 문서가 열거한 canonical format 15개만 정확한 layout으로 사용해야 하며, 목록에 없는 format은 피한다.

AFBC 상호운용성 점검
Canonical fourcc 선택AFBC modifier 선택Component order와 bit depth 확인Plane 수와 subsampling 확인Producer·consumer의 동일 해석 검증

Buffer를 공유하기 전 확인할 핵심 조건이다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0+
2
3 ===================================
4 Arm Framebuffer Compression (AFBC)
5 ===================================
6
7 AFBC is a proprietary lossless image compression protocol and format.
8 It provides fine-grained random access and minimizes the amount of
9 data transferred between IP blocks.
10
11 AFBC can be enabled on drivers which support it via use of the AFBC
12 format modifiers defined in drm_fourcc.h. See DRM_FORMAT_MOD_ARM_AFBC(*).
13
14 All users of the AFBC modifiers must follow the usage guidelines laid
15 out in this document, to ensure compatibility across different AFBC
16 producers and consumers.
17
18 Components and Ordering
19 =======================
20
21 AFBC streams can contain several components - where a component
22 corresponds to a color channel (i.e. R, G, B, X, A, Y, Cb, Cr).
23 The assignment of input/output color channels must be consistent
24 between the encoder and the decoder for correct operation, otherwise
25 the consumer will interpret the decoded data incorrectly.
26
27 Furthermore, when the lossless colorspace transform is used
28 (AFBC_FORMAT_MOD_YTR, which should be enabled for RGB buffers for
29 maximum compression efficiency), the component order must be:
30
31 * Component 0: R
32 * Component 1: G
33 * Component 2: B
34
35 The component ordering is communicated via the fourcc code in the
36 fourcc:modifier pair. In general, component '0' is considered to
37 reside in the least-significant bits of the corresponding linear
38 format. For example, COMP(bits):
39
40 * DRM_FORMAT_ABGR8888
41
42 * Component 0: R(8)
43 * Component 1: G(8)
44 * Component 2: B(8)
45 * Component 3: A(8)
46
47 * DRM_FORMAT_BGR888
48
49 * Component 0: R(8)
50 * Component 1: G(8)
51 * Component 2: B(8)
52
53 * DRM_FORMAT_YUYV
54
55 * Component 0: Y(8)
56 * Component 1: Cb(8, 2x1 subsampled)
57 * Component 2: Cr(8, 2x1 subsampled)
58
59 In AFBC, 'X' components are not treated any differently from any other
60 component. Therefore, an AFBC buffer with fourcc DRM_FORMAT_XBGR8888
61 encodes with 4 components, like so:
62
63 * DRM_FORMAT_XBGR8888
64
65 * Component 0: R(8)
66 * Component 1: G(8)
67 * Component 2: B(8)
68 * Component 3: X(8)
69
70 Please note, however, that the inclusion of a "wasted" 'X' channel is
71 bad for compression efficiency, and so it's recommended to avoid
72 formats containing 'X' bits. If a fourth component is
73 required/expected by the encoder/decoder, then it is recommended to
74 instead use an equivalent format with alpha, setting all alpha bits to
75 '1'. If there is no requirement for a fourth component, then a format
76 which doesn't include alpha can be used, e.g. DRM_FORMAT_BGR888.
77
78 Number of Planes
79 ================
80
81 Formats which are typically multi-planar in linear layouts (e.g. YUV
82 420), can be encoded into one, or multiple, AFBC planes. As with
83 component order, the encoder and decoder must agree about the number
84 of planes in order to correctly decode the buffer. The fourcc code is
85 used to determine the number of encoded planes in an AFBC buffer,
86 matching the number of planes for the linear (unmodified) format.
87 Within each plane, the component ordering also follows the fourcc
88 code:
89
90 For example:
91
92 * DRM_FORMAT_YUYV: nplanes = 1
93
94 * Plane 0:
95
96 * Component 0: Y(8)
97 * Component 1: Cb(8, 2x1 subsampled)
98 * Component 2: Cr(8, 2x1 subsampled)
99
100 * DRM_FORMAT_NV12: nplanes = 2
101
102 * Plane 0:
103
104 * Component 0: Y(8)
105
106 * Plane 1:
107
108 * Component 0: Cb(8, 2x1 subsampled)
109 * Component 1: Cr(8, 2x1 subsampled)
110
111 Cross-device interoperability
112 =============================
113
114 For maximum compatibility across devices, the table below defines
115 canonical formats for use between AFBC-enabled devices. Formats which
116 are listed here must be used exactly as specified when using the AFBC
117 modifiers. Formats which are not listed should be avoided.
118
119 .. flat-table:: AFBC formats
120
121 * - Fourcc code
122 - Description
123 - Planes/Components
124
125 * - DRM_FORMAT_ABGR2101010
126 - 10-bit per component RGB, with 2-bit alpha
127 - Plane 0: 4 components
128 * Component 0: R(10)
129 * Component 1: G(10)
130 * Component 2: B(10)
131 * Component 3: A(2)
132
133 * - DRM_FORMAT_ABGR8888
134 - 8-bit per component RGB, with 8-bit alpha
135 - Plane 0: 4 components
136 * Component 0: R(8)
137 * Component 1: G(8)
138 * Component 2: B(8)
139 * Component 3: A(8)
140
141 * - DRM_FORMAT_BGR888
142 - 8-bit per component RGB
143 - Plane 0: 3 components
144 * Component 0: R(8)
145 * Component 1: G(8)
146 * Component 2: B(8)
147
148 * - DRM_FORMAT_BGR565
149 - 5/6-bit per component RGB
150 - Plane 0: 3 components
151 * Component 0: R(5)
152 * Component 1: G(6)
153 * Component 2: B(5)
154
155 * - DRM_FORMAT_ABGR1555
156 - 5-bit per component RGB, with 1-bit alpha
157 - Plane 0: 4 components
158 * Component 0: R(5)
159 * Component 1: G(5)
160 * Component 2: B(5)
161 * Component 3: A(1)
162
163 * - DRM_FORMAT_VUY888
164 - 8-bit per component YCbCr 444, single plane
165 - Plane 0: 3 components
166 * Component 0: Y(8)
167 * Component 1: Cb(8)
168 * Component 2: Cr(8)
169
170 * - DRM_FORMAT_VUY101010
171 - 10-bit per component YCbCr 444, single plane
172 - Plane 0: 3 components
173 * Component 0: Y(10)
174 * Component 1: Cb(10)
175 * Component 2: Cr(10)
176
177 * - DRM_FORMAT_YUYV
178 - 8-bit per component YCbCr 422, single plane
179 - Plane 0: 3 components
180 * Component 0: Y(8)
181 * Component 1: Cb(8, 2x1 subsampled)
182 * Component 2: Cr(8, 2x1 subsampled)
183
184 * - DRM_FORMAT_NV16
185 - 8-bit per component YCbCr 422, two plane
186 - Plane 0: 1 component
187 * Component 0: Y(8)
188 Plane 1: 2 components
189 * Component 0: Cb(8, 2x1 subsampled)
190 * Component 1: Cr(8, 2x1 subsampled)
191
192 * - DRM_FORMAT_Y210
193 - 10-bit per component YCbCr 422, single plane
194 - Plane 0: 3 components
195 * Component 0: Y(10)
196 * Component 1: Cb(10, 2x1 subsampled)
197 * Component 2: Cr(10, 2x1 subsampled)
198
199 * - DRM_FORMAT_P210
200 - 10-bit per component YCbCr 422, two plane
201 - Plane 0: 1 component
202 * Component 0: Y(10)
203 Plane 1: 2 components
204 * Component 0: Cb(10, 2x1 subsampled)
205 * Component 1: Cr(10, 2x1 subsampled)
206
207 * - DRM_FORMAT_YUV420_8BIT
208 - 8-bit per component YCbCr 420, single plane
209 - Plane 0: 3 components
210 * Component 0: Y(8)
211 * Component 1: Cb(8, 2x2 subsampled)
212 * Component 2: Cr(8, 2x2 subsampled)
213
214 * - DRM_FORMAT_YUV420_10BIT
215 - 10-bit per component YCbCr 420, single plane
216 - Plane 0: 3 components
217 * Component 0: Y(10)
218 * Component 1: Cb(10, 2x2 subsampled)
219 * Component 2: Cr(10, 2x2 subsampled)
220
221 * - DRM_FORMAT_NV12
222 - 8-bit per component YCbCr 420, two plane
223 - Plane 0: 1 component
224 * Component 0: Y(8)
225 Plane 1: 2 components
226 * Component 0: Cb(8, 2x2 subsampled)
227 * Component 1: Cr(8, 2x2 subsampled)
228
229 * - DRM_FORMAT_P010
230 - 10-bit per component YCbCr 420, two plane
231 - Plane 0: 1 component
232 * Component 0: Y(10)
233 Plane 1: 2 components
234 * Component 0: Cb(10, 2x2 subsampled)
235 * Component 1: Cr(10, 2x2 subsampled)
236

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

AFBC의 목적과 modifier 계약

1-17

Arm Framebuffer Compression(AFBC)은 proprietary lossless image compression protocol이자 format이다. 세밀한 random access를 제공하고 IP block 사이에서 전송하는 data 양을 줄인다.

AFBC를 지원하는 driver는 `drm_fourcc.h`에 정의된 AFBC format modifier로 기능을 enable할 수 있다. 관련 symbol은 `DRM_FORMAT_MOD_ARM_AFBC(*)`다. Fourcc와 modifier의 조합이 buffer의 component·plane layout을 함께 표현한다.

서로 다른 AFBC producer와 consumer가 호환되려면 모든 modifier 사용자가 이 문서의 지침을 따라야 한다. 압축이 lossless라는 사실만으로 memory layout의 상호운용성이 보장되는 것은 아니며, 양쪽이 component order와 plane 수를 동일하게 해석해야 한다.

AFBC가 제공하는 특성
항목내용
CompressionProprietary lossless image compression
AccessFine-grained random access
TrafficIP block 사이 data transfer 감소
DRM 표현fourcc + DRM_FORMAT_MOD_ARM_AFBC(*)

Compression 성질과 driver interface를 구분한다.

AFBC buffer 계약
Linear pixel format을 fourcc로 선택AFBC modifier 선택Component order와 plane 수 확정Producer가 해당 layout으로 encodeConsumer가 같은 fourcc:modifier로 decode

Producer와 consumer가 같은 layout을 공유하는 조건이다.

.. SPDX-License-Identifier: GPL-2.0+

===================================
 Arm Framebuffer Compression (AFBC)
===================================

AFBC is a proprietary lossless image compression protocol and format.
It provides fine-grained random access and minimizes the amount of
data transferred between IP blocks.

AFBC can be enabled on drivers which support it via use of the AFBC
format modifiers defined in drm_fourcc.h. See DRM_FORMAT_MOD_ARM_AFBC(*).

All users of the AFBC modifiers must follow the usage guidelines laid
out in this document, to ensure compatibility across different AFBC
producers and consumers.

Component 순서와 YTR

18-77

AFBC stream은 여러 component를 담을 수 있으며 component는 R, G, B, X, A, Y, Cb, Cr 같은 color channel에 대응한다. 정상 동작을 위해 encoder와 decoder의 input/output channel assignment가 일치해야 한다. 순서가 다르면 consumer가 decode된 data를 잘못 해석한다.

Lossless colorspace transform인 `AFBC_FORMAT_MOD_YTR`을 사용할 때 component order는 반드시 Component 0 R, Component 1 G, Component 2 B여야 한다. RGB buffer에서는 최대 compression efficiency를 위해 YTR을 enable하는 것이 권장된다.

Component order는 `fourcc:modifier` pair의 fourcc code로 전달한다. 일반적으로 component 0은 대응하는 linear format의 least-significant bits에 있다. `DRM_FORMAT_ABGR8888`은 R(8), G(8), B(8), A(8), `DRM_FORMAT_BGR888`은 R(8), G(8), B(8), `DRM_FORMAT_YUYV`는 Y(8), Cb(8, 2x1 subsampled), Cr(8, 2x1 subsampled) 순서다.

AFBC는 `X` component를 다른 component와 다르게 취급하지 않는다. 따라서 `DRM_FORMAT_XBGR8888`도 R, G, B, X의 네 component로 encode된다. 사용하지 않는 X channel은 compression efficiency를 낮추므로 피하는 것이 좋다.

Encoder나 decoder가 네 번째 component를 요구한다면 equivalent alpha format을 사용하고 모든 alpha bit를 1로 설정하는 것이 권장된다. 네 번째 component가 필요하지 않다면 alpha가 없는 `DRM_FORMAT_BGR888` 같은 format을 사용할 수 있다.

대표 fourcc component order
FourccComponent 0Component 1Component 2Component 3
DRM_FORMAT_ABGR8888R(8)G(8)B(8)A(8)
DRM_FORMAT_BGR888R(8)G(8)B(8)-
DRM_FORMAT_YUYVY(8)Cb(8, 2x1)Cr(8, 2x1)-
DRM_FORMAT_XBGR8888R(8)G(8)B(8)X(8)

Component 0이 least-significant bits에 놓이는 원칙을 예제로 보인다.

X channel을 피하는 선택
Encoder/decoder가 4번째 component를 요구하는지 확인요구함: alpha가 있는 equivalent format 선택모든 alpha bit를 1로 설정요구하지 않음: DRM_FORMAT_BGR888 등 3-component format 선택사용하지 않는 X channel은 피함

네 번째 component 요구 여부에 따른 권장 format 선택이다.

Components and Ordering
=======================

AFBC streams can contain several components - where a component
corresponds to a color channel (i.e. R, G, B, X, A, Y, Cb, Cr).
The assignment of input/output color channels must be consistent
between the encoder and the decoder for correct operation, otherwise
the consumer will interpret the decoded data incorrectly.

Furthermore, when the lossless colorspace transform is used
(AFBC_FORMAT_MOD_YTR, which should be enabled for RGB buffers for
maximum compression efficiency), the component order must be:

 * Component 0: R
 * Component 1: G
 * Component 2: B

The component ordering is communicated via the fourcc code in the
fourcc:modifier pair. In general, component '0' is considered to
reside in the least-significant bits of the corresponding linear
format. For example, COMP(bits):

 * DRM_FORMAT_ABGR8888

   * Component 0: R(8)
   * Component 1: G(8)
   * Component 2: B(8)
   * Component 3: A(8)

 * DRM_FORMAT_BGR888

   * Component 0: R(8)
   * Component 1: G(8)
   * Component 2: B(8)

 * DRM_FORMAT_YUYV

   * Component 0: Y(8)
   * Component 1: Cb(8, 2x1 subsampled)
   * Component 2: Cr(8, 2x1 subsampled)

In AFBC, 'X' components are not treated any differently from any other
component. Therefore, an AFBC buffer with fourcc DRM_FORMAT_XBGR8888
encodes with 4 components, like so:

 * DRM_FORMAT_XBGR8888

   * Component 0: R(8)
   * Component 1: G(8)
   * Component 2: B(8)
   * Component 3: X(8)

Please note, however, that the inclusion of a "wasted" 'X' channel is
bad for compression efficiency, and so it's recommended to avoid
formats containing 'X' bits. If a fourth component is
required/expected by the encoder/decoder, then it is recommended to
instead use an equivalent format with alpha, setting all alpha bits to
'1'. If there is no requirement for a fourth component, then a format
which doesn't include alpha can be used, e.g. DRM_FORMAT_BGR888.

AFBC plane 수와 component 배치

78-110

Linear layout에서 일반적으로 multi-planar인 YUV 420 같은 format은 AFBC에서도 하나 또는 여러 plane으로 encode할 수 있다. 올바른 decode를 위해 encoder와 decoder는 component order뿐 아니라 plane 수에도 합의해야 한다.

AFBC buffer의 encoded plane 수는 fourcc code로 결정하며 unmodified linear format의 plane 수와 일치한다. 각 plane 내부의 component order 역시 fourcc를 따른다.

`DRM_FORMAT_YUYV`는 `nplanes = 1`이다. Plane 0에 Y(8), Cb(8, 2x1 subsampled), Cr(8, 2x1 subsampled) 세 component가 들어간다. `DRM_FORMAT_NV12`는 `nplanes = 2`이며 Plane 0은 Y(8), Plane 1은 Cb(8, 2x1 subsampled)와 Cr(8, 2x1 subsampled)를 담는다.

YUYV와 NV12 plane layout
FourccPlaneComponents
DRM_FORMAT_YUYV0Y(8), Cb(8, 2x1), Cr(8, 2x1)
DRM_FORMAT_NV120Y(8)
DRM_FORMAT_NV121Cb(8, 2x1), Cr(8, 2x1)

Single-plane packed format과 two-plane format을 비교한다.

AFBC plane 해석
Fourcc의 linear format plane 수 확인AFBC encoded plane 수도 동일하게 설정각 plane의 component order를 fourcc대로 배치Producer와 consumer가 같은 nplanes와 order 사용

Fourcc가 plane과 component layout을 결정하는 과정이다.

Number of Planes
================

Formats which are typically multi-planar in linear layouts (e.g. YUV
420), can be encoded into one, or multiple, AFBC planes. As with
component order, the encoder and decoder must agree about the number
of planes in order to correctly decode the buffer. The fourcc code is
used to determine the number of encoded planes in an AFBC buffer,
matching the number of planes for the linear (unmodified) format.
Within each plane, the component ordering also follows the fourcc
code:

For example:

 * DRM_FORMAT_YUYV: nplanes = 1

   * Plane 0:

     * Component 0: Y(8)
     * Component 1: Cb(8, 2x1 subsampled)
     * Component 2: Cr(8, 2x1 subsampled)

 * DRM_FORMAT_NV12: nplanes = 2

   * Plane 0:

     * Component 0: Y(8)

   * Plane 1:

     * Component 0: Cb(8, 2x1 subsampled)
     * Component 1: Cr(8, 2x1 subsampled)

Cross-device canonical format

111-235

AFBC device 사이의 최대 호환성을 위해 아래 표는 canonical format을 정의한다. 목록에 있는 format은 AFBC modifier와 함께 사용할 때 정확히 지정된 plane·component 구조를 따라야 한다. 목록에 없는 format은 피해야 한다.

RGB 계열은 component bit depth와 alpha 유무를 명시한다. YCbCr 계열은 4:4:4, 4:2:2, 4:2:0 sampling, single-plane 또는 two-plane 배치, 8-bit 또는 10-bit component를 구분한다.

Two-plane format인 NV16, P210, NV12, P010은 Plane 0에 Y 하나를 두고 Plane 1에 Cb와 Cr을 둔다. YUYV, Y210, YUV420_8BIT, YUV420_10BIT은 한 plane 안에 Y·Cb·Cr 세 component를 둔다.

AFBC canonical RGB formats
Fourcc설명Plane 0 components
DRM_FORMAT_ABGR2101010Component당 10-bit RGB, 2-bit alpha 포함R(10), G(10), B(10), A(2)
DRM_FORMAT_ABGR8888Component당 8-bit RGB, 8-bit alpha 포함R(8), G(8), B(8), A(8)
DRM_FORMAT_BGR888Component당 8-bit RGBR(8), G(8), B(8)
DRM_FORMAT_BGR565Component당 5/6-bit RGBR(5), G(6), B(5)
DRM_FORMAT_ABGR1555Component당 5-bit RGB, 1-bit alpha 포함R(5), G(5), B(5), A(1)

Cross-device interoperability에 허용된 RGB layout이다.

AFBC canonical YCbCr formats
Fourcc설명Plane layout
DRM_FORMAT_VUY888Component당 8-bit YCbCr 4:4:4, 단일 planeP0: Y(8), Cb(8), Cr(8)
DRM_FORMAT_VUY101010Component당 10-bit YCbCr 4:4:4, 단일 planeP0: Y(10), Cb(10), Cr(10)
DRM_FORMAT_YUYVComponent당 8-bit YCbCr 4:2:2, 단일 planeP0: Y(8), Cb(8, 2x1), Cr(8, 2x1)
DRM_FORMAT_NV16Component당 8-bit YCbCr 4:2:2, 2개 planeP0: Y(8); P1: Cb(8, 2x1), Cr(8, 2x1)
DRM_FORMAT_Y210Component당 10-bit YCbCr 4:2:2, 단일 planeP0: Y(10), Cb(10, 2x1), Cr(10, 2x1)
DRM_FORMAT_P210Component당 10-bit YCbCr 4:2:2, 2개 planeP0: Y(10); P1: Cb(10, 2x1), Cr(10, 2x1)
DRM_FORMAT_YUV420_8BITComponent당 8-bit YCbCr 4:2:0, 단일 planeP0: Y(8), Cb(8, 2x2), Cr(8, 2x2)
DRM_FORMAT_YUV420_10BITComponent당 10-bit YCbCr 4:2:0, 단일 planeP0: Y(10), Cb(10, 2x2), Cr(10, 2x2)
DRM_FORMAT_NV12Component당 8-bit YCbCr 4:2:0, 2개 planeP0: Y(8); P1: Cb(8, 2x2), Cr(8, 2x2)
DRM_FORMAT_P010Component당 10-bit YCbCr 4:2:0, 2개 planeP0: Y(10); P1: Cb(10, 2x2), Cr(10, 2x2)

Sampling, plane 수, component bit depth를 원문과 동일하게 보존한다.

Cross-device interoperability
=============================

For maximum compatibility across devices, the table below defines
canonical formats for use between AFBC-enabled devices. Formats which
are listed here must be used exactly as specified when using the AFBC
modifiers. Formats which are not listed should be avoided.

.. flat-table:: AFBC formats

   * - Fourcc code
     - Description
     - Planes/Components

   * - DRM_FORMAT_ABGR2101010
     - 10-bit per component RGB, with 2-bit alpha
     - Plane 0: 4 components
              * Component 0: R(10)
              * Component 1: G(10)
              * Component 2: B(10)
              * Component 3: A(2)

   * - DRM_FORMAT_ABGR8888
     - 8-bit per component RGB, with 8-bit alpha
     - Plane 0: 4 components
              * Component 0: R(8)
              * Component 1: G(8)
              * Component 2: B(8)
              * Component 3: A(8)

   * - DRM_FORMAT_BGR888
     - 8-bit per component RGB
     - Plane 0: 3 components
              * Component 0: R(8)
              * Component 1: G(8)
              * Component 2: B(8)

   * - DRM_FORMAT_BGR565
     - 5/6-bit per component RGB
     - Plane 0: 3 components
              * Component 0: R(5)
              * Component 1: G(6)
              * Component 2: B(5)

   * - DRM_FORMAT_ABGR1555
     - 5-bit per component RGB, with 1-bit alpha
     - Plane 0: 4 components
              * Component 0: R(5)
              * Component 1: G(5)
              * Component 2: B(5)
              * Component 3: A(1)

   * - DRM_FORMAT_VUY888
     - 8-bit per component YCbCr 444, single plane
     - Plane 0: 3 components
              * Component 0: Y(8)
              * Component 1: Cb(8)
              * Component 2: Cr(8)

   * - DRM_FORMAT_VUY101010
     - 10-bit per component YCbCr 444, single plane
     - Plane 0: 3 components
              * Component 0: Y(10)
              * Component 1: Cb(10)
              * Component 2: Cr(10)

   * - DRM_FORMAT_YUYV
     - 8-bit per component YCbCr 422, single plane
     - Plane 0: 3 components
              * Component 0: Y(8)
              * Component 1: Cb(8, 2x1 subsampled)
              * Component 2: Cr(8, 2x1 subsampled)

   * - DRM_FORMAT_NV16
     - 8-bit per component YCbCr 422, two plane
     - Plane 0: 1 component
              * Component 0: Y(8)
       Plane 1: 2 components
              * Component 0: Cb(8, 2x1 subsampled)
              * Component 1: Cr(8, 2x1 subsampled)

   * - DRM_FORMAT_Y210
     - 10-bit per component YCbCr 422, single plane
     - Plane 0: 3 components
              * Component 0: Y(10)
              * Component 1: Cb(10, 2x1 subsampled)
              * Component 2: Cr(10, 2x1 subsampled)

   * - DRM_FORMAT_P210
     - 10-bit per component YCbCr 422, two plane
     - Plane 0: 1 component
              * Component 0: Y(10)
       Plane 1: 2 components
              * Component 0: Cb(10, 2x1 subsampled)
              * Component 1: Cr(10, 2x1 subsampled)

   * - DRM_FORMAT_YUV420_8BIT
     - 8-bit per component YCbCr 420, single plane
     - Plane 0: 3 components
              * Component 0: Y(8)
              * Component 1: Cb(8, 2x2 subsampled)
              * Component 2: Cr(8, 2x2 subsampled)

   * - DRM_FORMAT_YUV420_10BIT
     - 10-bit per component YCbCr 420, single plane
     - Plane 0: 3 components
              * Component 0: Y(10)
              * Component 1: Cb(10, 2x2 subsampled)
              * Component 2: Cr(10, 2x2 subsampled)

   * - DRM_FORMAT_NV12
     - 8-bit per component YCbCr 420, two plane
     - Plane 0: 1 component
              * Component 0: Y(8)
       Plane 1: 2 components
              * Component 0: Cb(8, 2x2 subsampled)
              * Component 1: Cr(8, 2x2 subsampled)

   * - DRM_FORMAT_P010
     - 10-bit per component YCbCr 420, two plane
     - Plane 0: 1 component
              * Component 0: Y(10)
       Plane 1: 2 components
              * Component 0: Cb(10, 2x2 subsampled)
              * Component 1: Cr(10, 2x2 subsampled)