Arm 帧缓冲压缩 (AFBC)¶
AFBC 是一种专有的无损图像压缩协议和格式。它提供细粒度的随机访问,并最大限度地减少 IP 块之间传输的数据量。
可以通过使用 drm_fourcc.h 中定义的 AFBC 格式修饰符,在支持它的驱动程序上启用 AFBC。请参阅 DRM_FORMAT_MOD_ARM_AFBC(*)。
所有 AFBC 修饰符的用户都必须遵循本文档中列出的使用指南,以确保不同 AFBC 生产者和消费者之间的兼容性。
组件和顺序¶
AFBC 流可以包含多个组件,其中组件对应于颜色通道(即 R、G、B、X、A、Y、Cb、Cr)。输入/输出颜色通道的分配在编码器和解码器之间必须一致才能正确操作,否则消费者会错误地解释解码后的数据。
此外,当使用无损色彩空间转换(AFBC_FORMAT_MOD_YTR,对于 RGB 缓冲区,应启用它以获得最大的压缩效率)时,组件顺序必须是
组件 0:R
组件 1:G
组件 2:B
组件顺序通过 fourcc:modifier 对中的 fourcc 代码进行通信。一般来说,组件“0”被认为位于相应线性格式的最低有效位。例如,COMP(bits)
DRM_FORMAT_ABGR8888
组件 0:R(8)
组件 1:G(8)
组件 2:B(8)
组件 3:A(8)
DRM_FORMAT_BGR888
组件 0:R(8)
组件 1:G(8)
组件 2:B(8)
DRM_FORMAT_YUYV
组件 0:Y(8)
组件 1:Cb(8, 2x1 子采样)
组件 2:Cr(8, 2x1 子采样)
在 AFBC 中,“X”组件的处理方式与任何其他组件没有任何不同。因此,具有 fourcc DRM_FORMAT_XBGR8888 的 AFBC 缓冲区以 4 个组件进行编码,如下所示
DRM_FORMAT_XBGR8888
组件 0:R(8)
组件 1:G(8)
组件 2:B(8)
组件 3:X(8)
但是请注意,包含“浪费”的“X”通道不利于压缩效率,因此建议避免使用包含“X”位的格式。如果编码器/解码器需要/期望第四个组件,则建议改为使用具有 alpha 的等效格式,将所有 alpha 位设置为“1”。如果没有对第四个组件的要求,则可以使用不包含 alpha 的格式,例如 DRM_FORMAT_BGR888。
平面数量¶
通常在线性布局中为多平面的格式(例如 YUV 420)可以编码为单个或多个 AFBC 平面。与组件顺序一样,编码器和解码器必须就平面数量达成一致,才能正确解码缓冲区。fourcc 代码用于确定 AFBC 缓冲区中的编码平面数量,使其与线性(未修改)格式的平面数量相匹配。在每个平面内,组件顺序也遵循 fourcc 代码
例如
DRM_FORMAT_YUYV:nplanes = 1
平面 0
组件 0:Y(8)
组件 1:Cb(8, 2x1 子采样)
组件 2:Cr(8, 2x1 子采样)
DRM_FORMAT_NV12:nplanes = 2
平面 0
组件 0:Y(8)
平面 1
组件 0:Cb(8, 2x1 子采样)
组件 1:Cr(8, 2x1 子采样)
跨设备互操作性¶
为了在设备之间获得最大的兼容性,下表定义了 AFBC 使能设备之间使用的规范格式。使用 AFBC 修饰符时,此处列出的格式必须完全按照指定使用。应避免使用未列出的格式。
Fourcc 代码 |
描述 |
平面/组件 |
DRM_FORMAT_ABGR2101010 |
每个组件 10 位 RGB,带 2 位 alpha |
|
DRM_FORMAT_ABGR8888 |
每个组件 8 位 RGB,带 8 位 alpha |
|
DRM_FORMAT_BGR888 |
每个组件 8 位 RGB |
|
DRM_FORMAT_BGR565 |
每个组件 5/6 位 RGB |
|
DRM_FORMAT_ABGR1555 |
每个组件 5 位 RGB,带 1 位 alpha |
|
DRM_FORMAT_VUY888 |
每个组件 8 位 YCbCr 444,单平面 |
|
DRM_FORMAT_VUY101010 |
每个组件 10 位 YCbCr 444,单平面 |
|
DRM_FORMAT_YUYV |
每个组件 8 位 YCbCr 422,单平面 |
|
DRM_FORMAT_NV16 |
每个组件 8 位 YCbCr 422,双平面 |
|
DRM_FORMAT_Y210 |
每个组件 10 位 YCbCr 422,单平面 |
|
DRM_FORMAT_P210 |
每个组件 10 位 YCbCr 422,双平面 |
|
DRM_FORMAT_YUV420_8BIT |
每个组件 8 位 YCbCr 420,单平面 |
|
DRM_FORMAT_YUV420_10BIT |
每个组件 10 位 YCbCr 420,单平面 |
|
DRM_FORMAT_NV12 |
每个组件 8 位 YCbCr 420,双平面 |
|
DRM_FORMAT_P010 |
每个组件 10 位 YCbCr 420,双平面 |
|