当前位置: 首页 > 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收集所有可能参考组合类型并将它们存储一个数组中这些参考类型将在后续编码过程用于运动估计补偿操作提高编码效率视频质量

http://www.xdnf.cn/news/228187.html

相关文章:

  • 专家访谈:从文本到视频,GEO多模态优化的实战法则
  • IDEA git配置[通俗易懂]
  • halcon打开图形窗口
  • 模型部署技巧(一)
  • Python爬虫实战:获取彼岸网高清素材图片
  • Windows 10 环境二进制方式安装 MySQL 8.0.41
  • Locate 3D:Meta出品自监督学习3D定位方法
  • 大模型——使用 StarRocks 作为向量数据库
  • Go 写一个简单的Get和Post请求服务
  • 03_spring配置优先级
  • 回归分析丨基于R语言复杂数据回归与混合效应模型【多水平/分层/嵌套】技术与代码
  • 数智化招标采购系统针对供应商管理解决方案(采购如何管控供应商)
  • Qt/C++面试【速通笔记六】—Qt 中的线程同步
  • 合并两个有序数组
  • DataWorks Copilot 集成 Qwen3-235B-A22B混合推理模型,AI 效能再升级!
  • uniapp 实现时分秒 分别倒计时
  • 大数据平台与数据仓库的核心差异是什么?
  • MySQL RR (Repeatable Read) 隔离级别规则细节
  • 【计算机视觉】目标检测:深度解析Detectron2:Meta开源目标检测与图像分割框架实战指南
  • Linux Nginx网站服务【完整版】
  • 从高端制造到民生场景:天元轻量化软件的“破局”之路
  • 【QT】编写第一个 QT 程序 对象树 Qt 编程事项 内存泄露问题
  • 大语言模型 06 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机配置 GPT训练基本流程概念
  • ASP.NET MVC​ 入门与提高指南六
  • 一套SaaS ERP管理系统源码,支持项目二开商用,SpringBoot+Vue+ElementUI+UniAPP
  • 11.Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档
  • 若依Vue + Spring Boot:前后端参数传递实践与 @RequestParam、@RequestBody、@ModelAttribute 使用详解
  • 解决vscode cmake提示检测到 #include 错误
  • 【Hive入门】Hive高级特性:事务表与ACID特性详解
  • Ubuntu 24.04 终端美化