10位和16位YUV视频格式

简介: 10位和16位YUV视频格式

Perface

本主题介绍操作系统中捕获、处理和显示视频的 10 位和 16 位 YUV 格式。

概述

这些格式对亮度通道和色度(C’b 和 C’r)通道使用定点表示。样本值是缩放的 8 位值,使用缩放因子 2^(n − 8),其中 n 为 10 或 16,根据 SMPTE 274M 第 7.7-7.8 和 7.11-7.12 节。可以使用简单的位移位来执行精确转换。例如,如果 8 位格式的白点为 235,则相应的 10 位格式的白点为 940 (235 × 4)。

此处描述的 16 位表示对每个通道使用小端字节值。10 位格式还为每个通道使用 16 位,最低 6 位设置为零,如下图所示。

由于相同 YUV 格式的 10 位和 16 位表示具有相同的内存布局,因此可以将 10 位表示转换为 16 位表示,而不会损失精度。还可以将 16 位表示转换为 10 位表示。(但是,Y416 和 Y410 格式是此一般规则的例外,因为它们不共享相同的内存布局。)

当图形硬件读取包含 10 位表示的表面时,它应该忽略每个通道的低位 6 位。然而,如果表面包含有效的 16 位数据,则应将其识别为 16 位表面。

在包含 Alpha 的格式中,完全透明的像素的 Alpha 值为零,完全不透明的像素的 Alpha 值为 (2^n) – 1,其中 n 是 Alpha 位的数量。假设 Alpha 是一个线性值,在将组件转换为其归一化线性形式后,将其应用于每个组件。

对于视频内存中的图像,图形驱动程序选择表面的内存对齐方式。表面必须是DWORD对齐的。也就是说,表面内的各个行保证从 32 位边界开始,尽管对齐可以大于 32 位。原点 (0,0) 始终是曲面的左上角。

就本文而言,术语U相当于Cb,术语V相当于Cr。

10 位和 16 位 YUV 的 FOURCC 代码

此处描述的格式的 FOURCC 代码使用以下约定:

  • 如果格式是平面的,则 FOURCC 代码中的第一个字符是“P”。如果格式是打包的,则第一个字符是“Y”。
  • FOURCC码中的第二个字符由色度采样确定,如下表所示。

  • FOURCC 中的最后两个字符表示每个通道的位数,“16”表示 16 位,“10”表示 10 位。

使用该方案,定义了以下 FOURCC 代码。目前尚未定义 10 位或 16 位 YUV 的 4:2:1 格式。

Surface定义

本节介绍每种格式的内存布局。在下面的描述中,术语WORD指的是小端 16 位值,术语DWORD指的是小端 32 位值。

4:2:0 格式

定义了两种 4:2:0 格式,FOURCC 代码为 P016 和 P010。它们共享相同的内存布局,但 P016 每通道使用 16 位,P010 每通道使用 10 位。

P016 和 P010

在这两种格式中,所有 Y 样本首先作为偶数行的WORD数组出现在内存中。表面步幅可以大于Y平面的宽度。该数组后面紧跟着一个WORD数组,其中包含交错的 U 和 V 样本,如下图所示。

如果组合的 UV 数组作为DWORD数组进行寻址,则最低有效字 (LSW) 包含 U 值,最高有效字 (MSW) 包含 V 值。组合 UV 平面的步幅等于 Y 平面的步幅。UV 平面的线数是 Y 平面的一半。

这两种格式是更高精度 YUV 表示的首选 4:2:0 平面像素格式。它们预计将成为支持 10 位或 16 位 4:2:0 视频的 DirectX 视频加速 (DXVA) 加速器的中期要求。

4:2:2 格式

定义了四种 4:2:2 格式,两种是平面格式,两种是压缩格式。他们有以下 FOURCC 代码:

  • P216
  • P210
  • Y216
  • Y210

P216 和 P210

在这两种平面格式中,所有 Y 样本首先作为偶数行的WORD数组出现在内存中。表面步幅可以大于Y平面的宽度。该数组后面紧跟着一个WORD数组,其中包含交错的 U 和 V 样本,如下图所示。

如果组合的 UV 数组作为DWORD数组进行寻址,则 LSW 包含 U 值,MSW 包含 V 值。组合 UV 平面的步幅等于 Y 平面的步幅。UV 平面与 Y 平面具有相同数量的线。

这两种格式是更高精度 YUV 表示的首选 4:2:2 平面像素格式。它们预计将成为支持 10 位或 16 位 4:2:2 视频的 DirectX 视频加速 (DXVA) 加速器的中期要求。

Y216 和 Y210

在这两种打包格式中,每对像素都存储为四个WORD的数组,如下图所示。

数组中的第一个WORD包含该对中的第一个 Y 样本,第二个WORD包含 U 样本,第三个WORD包含第二个 Y 样本,第四个WORD包含 V 样本。

Y210 与 Y216 相同,只是每个样本仅包含 10 位有效数据。如前所述,最低有效 6 位设置为零。

4:4:4 格式

定义了两种 4:4:4 格式,FOURCC 代码为 Y410 和 Y416。两者都是打包格式。

Y410

此格式是打包的 10 位表示形式,其中包括 2 位 alpha。每个像素都编码为单个DWORD,其内存布局如下图所示。

位 0-9 包含 U 样本,位 10-19 包含 Y 样本,位 20-29 包含 V 样本,位 30-31 包含 alpha 值。要指示像素完全不透明,应用程序必须将两个 alpha 位设置为等于 0x03。

Y416

此格式是打包的 16 位表示形式,其中包括 16 位 alpha。每个像素都编码为一对DWORD,如下图所示。

位 0-15 包含 U 样本,位 16-31 包含 Y 样本,位 32-47 包含 V 样本,位 48-63 包含 alpha 值。

要指示像素完全不透明,应用程序必须将两个 alpha 字节设置为等于 0xFFFF。该格式主要用作图像处理期间的中间格式,以避免错误累积。

首选 YUV 格式

下表列出了首选的 YUV 格式,包括 8 位格式。

建议如果对象支持给定的位深度和色度采样方案,则它应该支持此表中列出的相应 YUV 格式。(对象可能支持此处未列出的其他格式。)

目录
相关文章
|
6月前
|
编解码
音频 AAC和MP3的帧大小
音频 AAC和MP3的帧大小
314 0
|
6月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(三)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
185 0
|
6月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(二)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
199 0
|
21天前
|
编解码
解码AVC(h264)裸流为yuv420P写入文件
本文介绍了如何使用FFmpeg库解码AVC(H.264)裸流为YUV420P格式并写入文件的过程。
16 2
|
6月前
|
存储 缓存 编解码
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(一)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
200 0
|
6月前
|
存储 编解码 自然语言处理
常见的音频与视频格式
常见的音频格式有 WAV、MP3、FLAC、APE、AAC、OGG 等,常见的视频格式有 MP4、AVI、MOV、WMV、MKV、FLV、3GP、MPEG 等,它们在兼容性、文件大小、画质等方面各有特点。
|
6月前
|
存储 编解码 算法
关于YUV视频
关于YUV视频
143 0
|
内存技术
音频格式G711转PCM的代码
音频格式G711转PCM的代码
287 0
|
算法 开发者
MPEG 音频 | 学习笔记
快速学习 MPEG 音频,介绍了 MPEG 音频系统机制, 以及在实际应用过程中如何使用。
184 0
MPEG 音频 | 学习笔记
ffmpeg把YUV转换为H264
ffmpeg把YUV转换为H264
141 0