← 返回信息流
AI 资讯Hacker News·4 天前

Dav2d

AI 深度解读

dav2d:为 AV2 时代打造的下一代高性能开源解码器

背景

视频编码技术的演进从未停歇。作为 AV1 的继任者,AV2(正式规范名为 AVM)是由开放媒体联盟(Alliance for Open Media, AOM)推出的最新免版税视频编码标准。AV1 自 2018 年定型以来,已成为部署最成功的视频编码格式之一,广泛存在于浏览器、移动设备、操作系统、电视及流媒体服务中。AV2 在此基础上引入了预测、变换、熵编码、滤波和色度处理等方面的新编码工具,旨在进一步提升压缩效率。据报告,与 AV1 相比,AV2 通常可实现约 25% 的压缩率提升,部分评估甚至显示更大的增益。

然而,效率的提升伴随着复杂度的激增。AV2 的解码复杂度约为 AV1 的五倍。这意味着,若要在当前硬件上实现实时解码,软件必须经过极其精细的架构特定优化,否则将面临巨大的性能瓶颈。

正是在这一背景下,VideoLAN 社区成员启动了 dav2d 项目。这是其著名开源解码器 dav1d 的延续。早在 AV1 开发后期,VideoLAN 团队就预见到硬件解码普及需要时间,因此致力于开发快速、轻量且可移植的软件解码器,最终促成了 dav1d 的成功。如今,dav1d 已成为 VLC、FFmpeg、Firefox、Chrome、Safari 以及 Android、Windows、Linux 等主流平台中最广泛部署的 AV1 软件解码器。

面对 AV2 带来的挑战,VideoLAN 团队决定不再等待规范完全稳定,而是提前启动 dav2d 的开发工作,旨在为 AV2 生态提供一个生产级的参考实现。

核心内容

dav2d 的核心目标是提供一个小型、快速、可移植且正确的解码器,适用于实际应用、媒体播放器、浏览器、测试工具及操作系统。该项目并非从零开始,而是建立在 dav1d 多年积累的技术基础之上。

技术架构与实现状态

目前,dav2d 代码库已包含一个功能完整的 AVM v15 解码器,支持 8-bit 和 10-bit 解码。尽管项目仍处于早期阶段,但大部分核心编码工具已实现并正在进行优化,具体包括:

  • 基础解析:比特流解析、帧和序列头处理。
  • 熵编码:熵解码及 CDF(累积分布函数)处理。
  • 预测模块:帧内预测、帧间预测及参考运动矢量处理。
  • 变换与滤波:变换处理、CCTX(Color Transform for Chroma)、CfL(Chroma from Luma)、去块效应滤波(Deblocking)、CDEF(Constrained Directional Enhancement Filter)以及 Wiener 滤波。
  • 其他处理:胶片颗粒合成。

性能优化策略

dav2d 的性能优化工作已全面展开,遵循“先 C 语言实现,后验证基础设施,最后针对关键路径进行架构特定优化”的路径:

  • x86 架构:已包含针对多种逆变换大小的 AVX2 代码,并正在优化 CCTX、去块效应、帧内预测及 CfL 相关路径。
  • ARM 架构:AArch64 NEON 指令集已用于熵解码、SAD(绝对差值和)、帧内预测、调色板预测、DC 预测器、平滑预测器及运动相关函数。arm32 的工作也已启动。
  • RISC-V 架构:早期工作主要集中在重新启用和调整现有的帧内预测和运动补偿汇编代码。

工具链与开发流程

与 dav1d 早期开发相比,dav2d 的一大优势在于工具链的成熟。VideoLAN 团队在 dav1d 开发期间创建了 checkasm 框架,用于验证和优化后的实现与 C 语言等效实现的一致性,并进行基准测试。

dav2d 从第一天起就受益于这一基础设施。目前的代码库已包含对逆变换、运动补偿、胶片颗粒、CfL 及参考运动矢量代码的 checkasm 覆盖。这不仅加快了未来的优化工作,也确保了优化的安全性。

开源承诺

与 dav1d 一样,dav2d 是一个完全开源的项目,采用与 dav1d 相同的 BSD 风格许可证。这使得它易于集成到开源和专有应用程序中。开发工作从一开始就在公开环境下进行:

  • 代码仓库:https://code.videolan.org/videolan/dav2d
  • 问题追踪:https://code.videolan.org/videolan/dav2d/-/issues
  • 合并请求:https://code.videolan.org/videolan/dav2d/-/merge_requests

关键要点

  • AV2 解码难度大:AV2 解码复杂度是 AV1 的五倍,软件解码必须经过深度优化才能实时运行。
  • 经验复用:dav2d 并非从零开始,它复用了 dav1d 在多线程、SIMD 组织、测试、可移植性和 API 设计方面的架构经验。
  • 早期介入:团队选择在 AV2 规范尚未完全稳定时提前启动开发,以确保在规范最终确定时,解码器已具备生产就绪状态。
  • 工具链优势:利用 dav1d 时期开发的 checkasm 框架,dav2d 在验证和优化环节起步更高,进度显著快于 dav1d 同期。
  • 跨平台支持:目前已在 x86 (AVX2)、ARM (AArch64 NEON) 和 RISC-V 平台上取得实质性进展。
  • 功能完整性:当前版本已支持 AVM v15 规范,涵盖 8-bit 和 10-bit 解码,核心模块如预测、变换、滤波等均已实现。
  • 开源生态价值:通过公开开发,提供互操作性、独立规范验证及实验基础,促进 AV2 生态的健康发展。

意义与影响

dav2d 的发布标志着 AV2 生态建设进入实质性阶段。正如 dav1d 在 AV1 硬件支持普及之前使其变得切实可行一样,dav2d 旨在为 AV2 扮演同样的角色。

对于开发者而言,dav2d 提供了一个高质量的参考实现,可用于构建、测试、基准测试和集成 AV2 解码功能。对于整个行业,一个快速、开源且经过验证的软件解码器是确保新编码标准广泛部署的关键。它消除了对专有硬件的过度依赖,促进了跨平台的互操作性,并为浏览器、操作系统和媒体播放器提供了稳定的底层支持。

未来,项目团队将继续跟踪 AV2 规范变化,改进合规性,扩展测试覆盖,进一步优化 x86 和 ARM 性能,改进 RISC-V 支持,提升高比特深度性能,优化多线程机制,减少内存占用,并为未来的版本发布做准备。dav2d 的愿景很明确:让 AV2 的解码变得快速、高效且无处不在。

查看原文 →jbkempf.com