当前位置: 首页 > news >正文

SVTAV1源码-set_all_ref_frame_type

set_all_ref_frame_type函数的主要作用当前图像设置所有可能用到参考帧类型这些参考帧类型存储一个数组中同时记录总共有多少个参考帧类型以下函数各部分解释

初始化准备

MvReferenceFrame rf[2];

*tot_ref_frames = 0;

定一个大小2MvReferenceFrame类型数组rf用于暂时存储参考帧类型

tot_ref_frames变量初始化0用于记录总共有多少个参考帧类型

处理参考列表0单向参考帧

for (uint8_t ref_idx0 = 0; ref_idx0 < ppcs->ref_list0_count_try; ++ref_idx0) {

rf[0] = svt_get_ref_frame_type(REF_LIST_0, ref_idx0);

ref_frame_arr(*tot_ref_frames ++) = rf[0];

}

遍历参考列表0所有参考帧索引

对于每个参考帧索引ref_idx0, 使用svt_get_ref_frame_type 函数获取对应参考帧类型并存储rf[0]

将获取参考帧类型添加ref_frame_arr数组中增加tot_ref_frames计数

处理参考列表1单向参考帧

for (uint8_t ref_idx1 = 0; ref_idx1 < ppcs->ref_list1_count_try; ++ref_idx1)

{

rf[1] = svt_get_ref_frame_type(REF_LIST_1, ref_idx1);

ref_frame_arr[(*tot_ref_frames)++] = rf[1];

}

遍历参考列表1所有参考帧索引

对于每个参考帧索引ref_idx1, 使用svt_get_ref_frame_type函数获取对应参考帧类型存储rf[1]

将获取参考帧类型添加到ref_frame_arr数组并增加tot_ref_frames 计数

处理双向符合参考帧

for (uint8_t ref_idx0 = 0; ref_idx0 < ppcs->ref_list0_count_try; ++ref_idx0)

for (uint8_t ref_idx1 = 0; ref_idx1 < ppcs->ref_list1_count_try; ++ref_idx1)

{

rf[0] = svt_get_ref_frame_type(REF_LIST_0, ref_idx0);

rf[1] = svt_get_ref_frame_type(REF_LIST_1, ref_idx1);

ref_frame_arr[(*tot_ref_frames)++] = av1_ref_frame_type(rf);

}

嵌套循环遍历参考列表0参考1所有参考帧索引组合

对于每个组合获取参考列表0参考列表1中的参考帧类型分别存储rf[0]rf[1]

这两个参考帧类型组合成一个复合参考帧类型使用av1_ref_frame_type函数转换添加ref_frame_arr数组增加tot_ref_frames 计数

处理B复合单向参考帧

if (ppcs->slice_type == B_SLICE) {

//处理复合单向参考帧 参考列表0

if (ppcs->ref_list0_count_try > 1) {

rf[0] = LAST_FRAME;

rf[1] = LAST2_FRAME;

ref_frame_arr[(*tot_ref_frames)++] = av1_ref_frame_type(rf);

if (ppcs->ref_list0_count_try > 2) {

rf[1] = LAST3_FRAME;

ref_frame_arr[(*tot_ref_frames)++] = av1_ref_frame_type(rf);

if (ppcs->ref_list0_count_try > 3) {

rf[1] = GOLDEN_FRAME;

ref_frame_arr[(*tot_ref_frames)++] = av1_ref_frame_type(rf);

}

}

}

//处理复合单向参考帧 参考列表1

if (ppcs->ref_list1_count_try > 2) {

rf[0] = BWDREF_FRAME;

rf[1] = ALTREF_FRAME;

ref_frame_arr[(*tot_ref_frames)++] = av1_ref_frame_type(rf);

}

}

如果当前图像切片类型B B_SLICE 额外处理一些复合单向参考

参考列表0复合单向参考帧

如果参考列表0参考帧计数1LAST_FRAMELAST2_FRAME组合成一个复合参考帧类型添加ref_frame_arr数组

如果参考列表0参考帧计数大于2则将LAST_FRAMELAST3_FRAME组合成一个复合参考帧类型添加数组中

如果参考列表0参考帧计数3LAST_FRAMEGOLDEN_FRAME组合成一个复合参考帧类型添加数组中

这个函数核心目的根据当前图像参考列表list0list1 以及切片类型B收集所有可能参考组合类型并将它们存储一个数组中这些参考类型将在后续编码过程用于运动估计补偿操作提高编码效率视频质量

相关文章:

  • Mysql之数据库基础
  • 用TCP实现服务器与客户端的交互
  • python爬虫基础:requests库详解与案例
  • Microsoft Entra ID 免费版管理云资源详解
  • Vue:el-table-tree懒加载数据
  • Kaggle比赛入门攻略(以 Titanic 为例)
  • 【KWDB 创作者计划】_深度解析KWDB存储引擎
  • C++负载均衡远程调用学习之基础TCP服务
  • 如何做表征对齐?
  • 艺术与科技的双向奔赴——高一鑫荣获加州联合表彰
  • C# 类的基本概念(从类的内部访问成员和从类的外部访问成员)
  • PXI总线开关卡80个交叉点组成的中密度 PXI矩阵开关模块
  • WPF框架中常用算法
  • BT137-ASEMI机器人功率器件专用BT137
  • 【论文阅读】APMSA: Adversarial Perturbation Against Model Stealing Attacks
  • LeetCode209_长度最小的子数组
  • MCP 自定义python实现server服务,支持离线调用和远程接口访问形式
  • Flink之DataStream
  • ActiveMQ 可靠性保障:消息确认与重发机制(一)
  • ActiveMQ 可靠性保障:消息确认与重发机制(二)
  • 人民日报社论:坚定信心、奋发有为、创新创造——写在“五一”国际劳动节
  • 美航母撞船后又遇战机坠海,专家:长时间作战部署疲于奔命是主因
  • 百年传承,再启新程,参天中国迎来2.0时代
  • 癌症来临前,可能伪装成这几种常见病,千万别大意
  • 怒江州委常委、泸水市委书记余剑锋调任云南省委省直机关工委副书记
  • 君亭酒店:2024年营业收入约6.76亿元, “酒店行业传统增长模式面临巨大挑战”