news 2026/5/27 10:18:06

libaom 源码分析: 预测编码过程梳理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
libaom 源码分析: 预测编码过程梳理

AV1 预测编码中核心技术

AV1(AOMedia Video 1)作为一种开源的视频编码格式,其预测编码核心技术主要包括以下几个方面:

  1. 分区树分割模块
    AV1利用多类型分割模式,递归地对图像/视频序列进行分区,以捕捉更丰富的空间信息,从而提升编码效率。这包括新的方向预测分割模式及非参数方向分割线,显著增强了分割灵活性,并可为整体码率节省带来高达20%的编码增益。

  2. 动态时空运动矢量参考
    AV1结合了复杂的运动矢量(MV)参考选择方案,通过搜索空间和时间候选对象来获得给定块的良好MV参考。这个过程包括运动矢量缓冲、运动轨迹创建和运动矢量投影三个阶段,以提高运动矢量编码的准确性和效率。

  3. 重叠块运动补偿(OBMC)
    AV1使用OBMC技术,通过融合相邻块的运动矢量预测,减少方块效应,提高预测的准确性。

  4. 仿射运动补偿
    AV1支持仿射运动补偿,可以处理更复杂的运动模式,如旋转和缩放,适用于快速移动的对象。

  5. 楔形预测
    AV1引入了基于楔形的预测模式,通过预定义的二维权重数组来进行预测,以适应块内部的运动矢量场。

  6. 复合预测
    AV1支持使用两个参考帧进行复合预测,其中包括常规复合预测和基于楔形的复合预测模式。

  7. 变形运动补偿
    AV1利用变形运动模型,允许每个像素根据其在块中的位置有不同的运动补偿权重,以适应复杂的运动场景。

  8. 帧内预测技术
    AV1在帧内预测方面进行了显著的增强和扩展,支持更多细化的角度模式,从VP9的10种模式扩展到了56种模式,并且还新增了多种非角度模式,如Smooth模式、DC模式、Paeth模式、CFL模式、调色板模式以及基于递归滤波的预测模式。

libaom 相关源码分析

函数关系及相关文件

预测编码核心点介绍

  1. 备注:libaom 预测编码过程还是比较复杂,算法模块比较多,简单备注下过程梳理;
  2. 编码的接口函数是encoder_encode,完成从 YUV 到流的整体过程。
  3. 2pass 编码中第一遍编码:在av1_encode函数通过变量控制进入第一遍编码流程,核心函数是av1_first_pass/av1_noop_first_pass_frame
  4. 带有超分编码:在encode_frame_to_data_rate函数中通过调用encode_with_and_without_superres函数来进行带有超分类型的编码逻辑。
  5. 多次编码实现目标码率:根据是否需要目标码率控制,分别调用encode_with_recode_loop、encode_without_recode函数进行不同类型编码,内部核心都是调用av1_encode_frame 函数。
  6. 线程编码控制:根据编码是否开启多线程控制,在encode_frame_internal函数中根据线程控制类型,分别调用av1_encode_tiles_row_mt、av1_encode_tiles_mt、encode_tiles。
  7. 是否开启 RD 编码:在实际编码一行超块encode_sb_row函数中,根据是否开启 RD 功能,分别调用encode_nonrd_sb、encode_rd_sb进行不同类型的编码。
  8. 搜索分区方式控制编码:在 encode_rd_sb 函数中根据搜索分区方式 SEARCH_PARTITION、VAR_BASED_PARTITION、FIXED_PARTITION 分别调用av1_rd_use_partition、av1_rd_pick_partition 函数进行分区搜索。
  9. 分区类型不同编码:根据不同分区类型调用不同的实现函数,按照分区类型分别调用 none_partition_search、split_partition_search、rectangular_partition_search、ab_partitions_search、rd_pick_4partition 函数来实现不同分区情况下的预测编码。
  10. 帧内预测编码:在每个分区内,都会调用pick_sb_modes 函数,其中调用 av1_rd_pick_intra_mode_sb函数完整帧内预测编码过程。
  11. 帧间编码:在每个分区内,都会调用pick_sb_modes 函数,其中调用av1_rd_pick_inter_mode 函数完成帧间预测编码。
  12. 帧间 skip 模式编码:skip_inter_mode 函数完成帧间 skip 模式预测编码过程。
  13. 帧间非 skip 模式编码:handle_inter_mode 函数完成帧间非 skip 模式预测编码过程。
  14. 运动模式不同编码:根据运动模式不同,进行不同方式的帧间运动搜索方式,运动模式主要有 、SIMPLE_TRANSLATION、OBMC_CAUSAL、WARPED_CAUSAL。
  15. 像素搜索方式:在av1_full_pixel_search函数中完成像素搜索方式,其中有不同的搜索模版函数,搜索模板有 dia、hex、square 等。

部分关键数据体介绍

  1. 块尺寸

  2. 分区类型

  3. 运动模式

  4. 帧间帧内模式

  5. 滤波帧内模式

  6. 亮度预测模式

  7. 色度预测模式

  8. CfL 相关类型控制

  9. 复合类型

  10. 分区搜索类型

  11. 分像素搜索方法

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 10:15:15

信也科技季报图解:营收32.1亿,净利4.2亿 海外收入占比30%

雷递网 雷建平 5月26日金融科技集团信也科技(NYSE: FINV)公布2026年第一季度未经审计财务业绩。财报显示,信也科技2026年第一季度营收为32.1亿元,净利润4.21亿元;当季促成交易额426亿元,在贷余额677亿元。信…

作者头像 李华
网站建设 2026/5/27 10:15:13

顶点着色器(Vertex Shader):揭秘那个让 3D 世界“动起来“的魔法操控者

一、一个让我"开窍"的木偶戏大师故事 我有个朋友是传统木偶戏的传承人,他给我讲过一个让我至今难忘的故事。他说他刚学木偶戏时跟着师父练习——整整三年只让他练一件事——操控木偶的关节——他一开始觉得太简单了——不就是拉线吗?——结果三…

作者头像 李华
网站建设 2026/5/27 10:15:00

Speechless:5分钟轻松备份微博到PDF的终极解决方案

Speechless:5分钟轻松备份微博到PDF的终极解决方案 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 还在担心珍贵的微博回忆会突然消失吗&…

作者头像 李华
网站建设 2026/5/27 10:13:14

应届生求职避坑指南:从Offer到劳动合同的完整解析与风险防范

1. 应届生求职签约全流程解析 刚走出校园的应届生面对第一份工作时,往往既兴奋又忐忑。我见过太多同学因为不了解签约流程,在offer、三方协议和劳动合同的迷宫里踩坑。今天我们就用最直白的语言,把这套流程掰开揉碎讲清楚。 先看时间线&#…

作者头像 李华
网站建设 2026/5/27 10:11:14

从2020蓝桥杯C/C++ B组省赛真题,解析算法竞赛核心考点与解题策略

1. 蓝桥杯省赛真题的算法价值解析 2020年蓝桥杯C/C B组省赛真题堪称算法竞赛的经典题库,其中蕴含的解题思路对参赛者具有极高的训练价值。以"蛇形填数"为例,这道题表面考察矩阵填充,实则训练选手的坐标映射能力和数学归纳思维。我在…

作者头像 李华