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 格式。(对象可能支持此处未列出的其他格式。)

目录
相关文章
|
C++ Windows
使用 windbg gflags dumpbin 排查应用程序启动错误
使用 windbg gflags dumpbin 排查应用程序启动错误
|
存储 图形学
手机广告常见的10bit是什么?YUV444、YUV422、YUV420、YUV411是什么?
10bit色深相较于8bit,能提供更多的灰阶和显色数,使色彩过渡更加平滑,减少色带现象。YUV444、YUV422、YUV420、YUV411是不同的采样方式,通过减少UV分量来节省空间。YUV420和YUV411虽都是每4个Y分量用1组UV分量,但YUV420在垂直方向上交替存储U和V,而YUV411仅在水平方向上进行4:1抽样。
|
7月前
|
前端开发 安全 Java
Spring Boot 便利店销售系统项目分包设计解析
本文深入解析了基于Spring Boot的便利店销售系统分包设计,通过清晰的分层架构(表现层、业务逻辑层、数据访问层等)和模块化设计,提升了代码的可维护性、复用性和扩展性。具体分包结构包括`controller`、`service`、`repository`、`entity`、`dto`、`config`和`util`等模块,职责分明,便于团队协作与功能迭代。该设计为复杂企业级应用开发提供了实践参考。
281 0
|
7月前
|
人工智能 运维 搜索推荐
华为云生态大会2025前瞻:为伙伴们打通行业智能跃迁通路
DeepSeek的连锁反应持续深化,云和AI融合正推动行业新范式。基础模型创新加速,应用从“模型强”转向业务流程优化,AI普及至千行万业。华为云生态大会2025将汇聚4.5万家伙伴,发布600+联合方案,覆盖50+行业场景。大会聚焦新技术、新政策,如“百模千态”和CloudDevice,助力伙伴抓住AI机遇,共创智能生态新纪元。
382 7
|
8月前
|
算法 关系型数据库 测试技术
WHQL微软驱动签名方案,让驱动程序在Windows系统流畅运行
WHQL认证(Windows徽标认证)是微软设立的严格测试标准,旨在确保驱动程序的兼容性、稳定性和互通性。本文介绍了三种WHQL微软驱动签名方案:单系统签名、多系统签名和硬件兼容性测试方案,分别满足不同开发商的需求。通过WHQL认证,不仅能消除Windows安装警告,提升用户体验,还能获得“Designed for Windows”徽标授权,入列全球Windows Catalog及HCL产品表,提升品牌权威性和采购优先权。此外,访问微软OCA可获取错误反馈,助力产品质量改进。选择合适的签名方案,让驱动在Windows系统中流畅运行!
|
监控 数据可视化 项目管理
WBS元素是什么?在项目管理中的作用与类型定义
工作分解结构(WBS)是项目管理中的重要工具,用于将复杂项目分解为更小、更易管理的任务或工作包。本文介绍了WBS的概念、特点、核心目标及其在项目管理中的作用,包括项目范围定义、任务分配、进度管理、预算控制和风险管理等方面。同时,文章还探讨了几种常见的WBS类型,如交付物导向型、阶段导向型、功能导向型和混合型WBS,并提供了创建有效WBS的步骤建议。最后,推荐了几款实用的项目管理工具,帮助团队更高效地管理和执行项目。
1128 7
利用 GitHub Actions 自动化你的软件开发流程
GitHub Actions 是 GitHub 提供的自动化工具,可在仓库中触发和执行工作流程,包括自动运行测试、部署应用等。其核心概念包括工作流程(Workflow)、作业(Job)和步骤(Step),均定义在 YAML 文件中。本文将指导你如何设置和使用 GitHub Actions,并提供自动运行测试、部署应用及合并 Pull Requests 的示例,帮助提高开发效率和代码质量。
|
XML 存储 编解码
浅浅地优化下视频流播放体验
浅浅地优化下视频流播放体验
1101 0
|
SQL 物联网 数据处理
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
|
存储 编解码 Shell
【Shell 命令集合 系统设置 】⭐Linux 设置和调整帧缓冲设备 fbset命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 设置和调整帧缓冲设备 fbset命令 使用指南
441 0