AV1代码学习6:tpl_model之一

本文探讨了AV1编码器中的Temporal Dependency Model,该模型源于VP9和x264的MBTree,旨在通过计算帧间失真影响预测编码性能。在av1_encode_strategy函数中,当特定条件满足时,会触发tpl_model。主要过程包括更新参考帧类型、设置帧尺寸、初始化TPL统计信息以及执行关键计算函数mc_flow_dispenser。
摘要由CSDN通过智能技术生成

        AV1的tpl_model是AV1的一个c文件,包含了一系列函数,其主要目的是为了利用lookahead design记录每个块的一些数据,包括失真等,在实际编码时利用这些数据建立模型,调整QP或者lambda以取得更好的编码性能。相关方面的论文是:

A Temporal Dependency Model for Rate-Distortion Optimization in Video Coding

这篇论文虽然是在VP9上实现的,但AV1里也有相应的代码,其模型的主要来源是x264上的MBTree:

A novel macroblock-tree algorithm for high-performance optimization of dependent video coding in H.264/AVC

       其主要目的就是通过计算原始帧块之间的失真,来估计失真对后续块的影响,并以此为依据,对块的QP或者lambda进行重新调整。

        对于具体的函数,函数的入口在 av1_encode_strategy中,当 oxcf->pass == 2 以及cpi->twopass.gf_group.index == 1 && cpi->oxcf.enable_tpl_model时,会进入tpl_model。cpi->twopass.gf_group.index为1意味着函数当前正编码rPOC为16的帧,以第一个GOP为例子的话,就是第16帧。

首先是,av1_configure_buffer_updates 对帧的参考帧类型进行更新。

其次是,av1_set_frame_size对buffer和帧的大小进行初始化。

然后从av1_tpl_setup_stats开始重要的计算

init_gop_frames_for_tpl 主要就是把GOP内的buffer初始化,如果需要的话。这个版本会扩展到下个GOP的起始两帧

 init_tpl_stats主要是初始化存储tpl_model数据的结构体指针

mc_flow_dispenser(cpi, gf_picture, frame_idx)为主要函数,可以说是帧级的入口

void av1_tpl_setup_stats(AV1_COMP *cpi,
                         const EncodeFrameInput *const frame_input) {
  YV12_BUFFER_CONFIG *gf_pic
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值