SVTAV1 编码函数 svt_aom_is_pic_skipped

函数 解释

1.1 svt_aom_is_pic_skipped函数的作用是判断当前图片是否可以跳过编码处理。

具体分析如下

函数逻辑

参数说明:函数接收一个指向图片父控制集的指针PictureParentControlSet *pcs, 通过这个指针可以获取与图片相关的各种信息,用于判断是否跳过对当前图片的编码处理。

判断条件:函数内部通过三个条件来决定是否跳过图片编码

!pcs->is_ref 表示当前图片不是参考帧,参考帧通常需要更严格的编码处理,因为它会被后续的其他帧引用进行预测,而非参考帧相对不那么关键,在某些条件下可以考虑跳过以节省编码时间

pcs->scs->rc_stat_gen_pass_mode 表示速率控制统计生成传递模式是否启用,在启用该模式时,编码器可能更注重收集统计信息而不进行完整的编码处理,此时跳过图片编码时合理的。

!pcs->first_frame_in_minigop 表示当前帧不是minigop中的第一帧。minigop是一种编码结构,其第一帧通常需要进行编码处理,而非第一帧在一定条件下可以跳过。

返回值:如果上述三个条件同时满足,则函数返回TRUE,表示可以跳过对当前图片的编码处理,否则返回,FALSE,表示需要对当前图片进行编码处理。

函数意义

提高编码效率:在某些特定的编码模式或场景下,如非参考帧,开启速率控制统计生成传递模式且非minigop第一帧时,跳过对当前图片的编码处理可以减少编码器的计算量,从而提高整体编码效率,节省编码时间。

优化资源分配:通过跳过部分相对不关键的图片编码,编码器可以将更多的计算资源集中在更重要的图片或编码任务上,从而在保证整体编码质量的前提下,实现资源的更优分配,提升编码性能。

1.2 svt_aom_motion_estimation_b64

在AV1编码中,最大编码块Superblock的大小为128x128对于亮度分量,色度分量的最大尺寸为64x64,但svt_aom_motion_estimation_b64 函数用于对64x64块进行运动估计,主要是有以下原因:

64x64块石常见的编码单元:

虽然AV1支持最大128x128的编码块,但在实际编码过程中,64x64块也是一个常用的编码单元,许多编码器在进行运动估计等操作时,会以64x64块为基本单位。这种块大小在编码效率和计算复杂度之间取得了较好的平衡。

符合编码结构层次:

AV1的编码结构时分层的,128x128的编码块可以进一步划分为更小的块,如64x64,32x32等。svt_aom_motion_etimation_b64函数针对64x64块进行运动估计,是整个编码过程的一部分,后续这些64x64块的运动估计结果可以用于更大块的运动估计,或者为更小块的运动估计提供参考和指导。

运动估计的精度和效率考量:

使用64x64块进行运动估计可以在一定程度上平衡运动估计的精度和效率。64x64块相对较小,能够捕捉到更细致的运动信息,有助于提高运动估计的精度,从而提高编码质量。同时,与更小的块(如32x32,16x16等)相比,64x64块的运动估计计算量相对较小,可以在保证一定精度的同时,减少计算复杂度,提高编码效率。

与参考帧数据的匹配:

在运动估计过程中,需要将当前块鱼参考帧中的相应区域进行比较。64x64块的大小与参考帧中存储的数据结构和块大小相匹配,便于进行块匹配操作,提高运动估计的效率和准确性。

支持多种编码模式:

AV1支持多种编码模式和预测策略,64x64块的运动估计结果可以为不同的编码模式提供支持,例如,在帧间预测中,可以根据64x64块的运动矢量选择合适的预测模式,如单向预测,双向预测等,进一步提高编码效率。

相关推荐
毕竟是shy哥1 小时前
计算YOLO数据集中每个类的目标数
算法·yolo·机器学习
M78佐菲1 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
晊晌_h3 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
我找到地球的支点啦3 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
罗西的思考4 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(3)--- RAG
人工智能·算法·机器学习
浪里镖客4 小时前
位姿转换矩阵写法-个人习惯(计算机理解其实是相反的)
线性代数·算法·矩阵
小白羊丨7 小时前
如何诊断 Prompt 模板导致的效果下降?
人工智能·算法·prompt
OPEN-F9 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
lisin-lee-cooper9 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法
sunburn-9 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法