【VVC】xCompressCU()函数注解

//传入的tempLUT和bestLUT表示编码当前块之前所维护的HMVP列表信息
void EncCu::xCompressCU( CodingStructure*& tempCS, CodingStructure*& bestCS, Partitioner& partitioner, double maxCostAllowed )
{CHECK(maxCostAllowed < 0, "Wrong value of maxCostAllowed!");uint32_t compBegin;uint32_t numComp;bool jointPLT = false;//调色板模式if (partitioner.isSepTree( *tempCS )){if( !CS::isDualITree(*tempCS) && partitioner.treeType != TREE_D ){compBegin = COMPONENT_Y;//从亮度分量(Y分量)开始处理numComp = (tempCS->area.chromaFormat != CHROMA_400)?3: 1;//需要处理的颜色分量数量jointPLT = true;}else{if (isLuma(partitioner.chType)){compBegin = COMPONENT_Y;numComp   = 1;}else{compBegin = COMPONENT_Cb;numComp   = 2;}}}else{compBegin = COMPONENT_Y;numComp = (tempCS->area.chromaFormat != CHROMA_400) ? 3 : 1;jointPLT = true;}SplitSeries splitmode = -1;uint8_t   bestLastPLTSize[MAX_NUM_CHANNEL_TYPE];Pel       bestLastPLT[MAX_NUM_COMPONENT][MAXPLTPREDSIZE]; // store LastPLT foruint8_t   curLastPLTSize[MAX_NUM_CHANNEL_TYPE];Pel       curLastPLT[MAX_NUM_COMPONENT][MAXPLTPREDSIZE]; // store LastPLT if no partitionfor (int i = compBegin; i < (compBegin + numComp); i++){ComponentID comID = jointPLT ? (ComponentID)compBegin : ((i > 0) ? COMPONENT_Cb : COMPONENT_Y);bestLastPLTSize[comID] = 0;curLastPLTSize[comID] = tempCS->prevPLT.curPLTSize[comID];memcpy(curLastPLT[i], tempCS->prevPLT.curPLT[i], tempCS->prevPLT.curPLTSize[comID] * sizeof(Pel));}Slice&   slice      = *tempCS->slice;const PPS &pps      = *tempCS->pps;//图像参数集const SPS &sps      = *tempCS->sps;//序列参数集const uint32_t uiLPelX  = tempCS->area.Y().lumaPos().x;const uint32_t uiTPelY  = tempCS->area.Y().lumaPos().y;const ModeType modeTypeParent  = partitioner.modeType;const TreeType treeTypeParent  = partitioner.treeType;const ChannelType chTypeParent = partitioner.chType;const UnitArea currCsArea = clipArea( CS::getArea( *bestCS, bestCS->area, partitioner.chType ), *tempCS->picture );m_modeCtrl->initCULevel( partitioner, *tempCS );//该函数对m_modeCtrl进行初始化,对需要test的各种模式进行压栈等操作
#if GDR_ENABLED//渐进式解码器刷新if (m_pcEncCfg->getGdrEnabled()){bool isInGdrInterval = slice.getPicHeader()->getInGdrInterval();// 1.0 applicable to inter picture onlyif (isInGdrInterval){int gdrPocStart = m_pcEncCfg->getGdrPocStart();int gdrInterval = m_pcEncCfg->getGdrInterval();int picWidth = slice.getPPS()->getPicWidthInLumaSamples();int m1, m2, n1;int curPoc = slice.getPOC();int gdrPoc = (curPoc - gdrPocStart) % gdrInterval;int begGdrX = 0;int endGdrX = 0;double dd = (picWidth / (double)gdrInterval);int mm = (int)((picWidth / (double)gdrInterval) + 0.49999);m1 = ((mm + 7) >> 3) << 3;m2 = ((mm + 0) >> 3) << 3;if (dd > mm && m1 == m2){m1 = m1 + 8;}n1 = (picWidth - m2 * gdrInterval) / 8;if (gdrPoc < n1){begGdrX = m1 * gdrPoc;endGdrX = begGdrX + m1;}else{begGdrX = m1 * n1 + m2 * (gdrPoc - n1);endGdrX = begGdrX + m2;if (picWidth <= endGdrX){begGdrX = picWidth;endGdrX = picWidth;}}bool isInRefreshArea = tempCS->withinRefresh(begGdrX, endGdrX);if (isInRefreshArea){m_modeCtrl->forceIntraMode();}else if (tempCS->containRefresh(begGdrX, endGdrX) || tempCS->overlapRefresh(begGdrX, endGdrX)){// 1.3.1 enable only vertical splits (QT, BT_V, TT_V)m_modeCtrl->forceVerSplitOnly();// 1.3.2 remove TT_V if it does not satisfy the conditionif (tempCS->refreshCrossTTV(begGdrX, endGdrX)){m_modeCtrl->forceRemoveTTV();}}if (tempCS->area.lwidth() != tempCS->area.lheight()){m_modeCtrl->forceRemoveQT();}if (!m_modeCtrl->anyPredModeLeft()){m_modeCtrl->forceRemoveDontSplit();}if (isInRefreshArea && !m_modeCtrl->anyIntraIBCMode() && (tempCS->area.lwidth() == 4 || tempCS->area.lheight() == 4)){m_modeCtrl->finishCULevel(partitioner);return;}}}
#endif//(CU) 进行压缩之前进行一些初始化和预处理工作if( partitioner.currQtDepth == 0 && partitioner.currMtDepth == 0 &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FineReport使用小记(不断更新中…………)

FineReport使用小记 1. 单元格相关设置1.1. 单元格值样式 2. 报表块设置2.1. 给报表块加单位 1. 单元格相关设置 1.1. 单元格值样式 1. 百分比样式 选中单元格&#xff0c;单元格属性——>文本——>格式——>百分比 下面可以选择保留几位小数&#xff0c;图中为保留…

【MySQL】常见可执行程序

本文使用的版本是MySQL8&#xff0c;5.7可能会有所不同。 MySQL提供了一些重要的程序用来管理和操作数据库。这里会介绍一些常用的程序及其使用。对于MySQL程序的使用&#xff0c;可以查看官方帮助手册来学习。 MySQL :: MySQL 8.0 Reference Manual :: 6 MySQL Programs 程序…

7-6 猴子吃桃

7-6 猴子吃桃 分数 15 全屏浏览 切换布局 作者 蔡尚真 单位 绍兴文理学院元培学院 猴子第一天摘下若干桃子&#xff0c;当即吃了一半&#xff0c;还觉不过瘾&#xff0c;又多吃了一个&#xff1b;第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃了一个。以后每天天早上…

找了半天,还不如自己写一个图片转ico格式的程序

关于jpg、png等图片转ICO格式 最近突然急需一张ico格式的文件&#xff0c;就拿着处理好的png图片出网上找在线转换器&#xff0c;找了一个小时&#xff0c;绝了&#xff0c;不是需要注册充钱就是下载不下来&#xff0c;好不容易下载下来还是个文件错误。想着找个PS插件直接导出…

烧写uboot、linux镜像、根文件系统到开发板

烧写uboot、linux镜像、根文件系统到开发板 环境介绍 本博客使用x6818开发板。 公司&#xff1a;三星 ARM架构 Cortex-A53核 型号&#xff1a;S5P6818 特性&#xff1a;8核&#xff0c;最高主频2GHz 烧写uboot 使用网络烧写 网络烧写上位机是Ubuntu虚拟机。 先利用上…

基于STM32智能小车

一、前置准备 前置知识&#xff1a;需要学习stm32&#xff0c;建议去b站看江科大的视频&#xff0c;讲的很详细&#xff0c;学完串口那一块就可以制作了&#xff0c;软件用的是Keil5&#xff0c;开发语言C语言&#xff0c;手机连接蓝牙模块软件是蓝牙调试器。 需要准备的器件…

数学+思维,CF1056B - Divide Candies

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1056B - Codeforces 二、解题报告 1、思路分析 考虑i^2 j^2 | m 而m的余数有限&#xff0c;且m很小 我们枚举两重循环&#xff0c;都枚举m的余数&#xff0c;分别记为x&#xff0c;y 如果x ^ …

最大的数字(maxnumber)

最大的数字 题目描述 给定一个十进制整数 n n n&#xff0c;保证 n n n 的首位不为 0 0 0&#xff0c;你必须删除其中 d d d个数字&#xff0c;使得留下的数字最大。请输出留下的最大数。 输入格式 第一行&#xff1a;单个整数表示 d d d 第二行&#xff1a;单个整数表示…

BGP宣告+自动汇总问题

BGP 的宣告问题 在 BGP 协议中每台运行 BGP 的设备上&#xff0c;宣告本地直连路由&#xff1b; 在 BGP 协议中运行 BGP 协议的设备来宣告.通过 IGP 学习到的&#xff0c;未运行 BGP 协议设备产2、生的路由&#xff1b; 在 BGP 协议中宣告本地路由表中路由条目时,将携带本地到达…

Linux☞进程控制

在终端执行命令时&#xff0c;Linux会建立进程&#xff0c;程序执行完&#xff0c;进程会被终止&#xff1b;Linux是一个多任务的OS,允许多个进程并发运行&#xff1b; Linxu中启动进程的两种途径&#xff1a; ①手动启动(前台进程(命令gedit)...后台进程(命令‘&’)) ②…

数据库安全加固与API防护策略

在数字化时代&#xff0c;数据库作为企业核心资产的安全性至关重要。然而&#xff0c;随着网络攻击手段的不断演进&#xff0c;数据库和API接口成为了黑客的主要攻击目标。本文将探讨数据库被攻击、API接口被滥用的情况&#xff0c;并提供一系列实用的防护措施&#xff0c;旨在…

【玩转C语言】第三讲---> scanf 和 printf 函数详解(非常重要)!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 引言&#xff1a; 大家好&#xff0c;我是坊钰&#xff0c;为了让大家深入了解C语言&#xff0c;我开创了【玩转C语言系列】&#xff0c;将为大家介绍C语言相关知识…

虚拟存储器概述

目录 常规存储器管理方式的特征和局部性原理 缺点 局部性原理 局部性原理的应用 1. 提高内存利用率 2. 实现按需装入 3. 支持内存共享 4. 提高系统稳定性 虚拟存储器的定义与特征 虚拟存储器的特征 虚拟存储器的实现机制 虚拟存储器的工作过程 虚拟存储器的优点 虚…

C++ ─── STL 以及string

前言&#xff1a;什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架 STL的六大组件 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符…

Ambari集成Apache Kyuubi实践

目前还有很多公司基于HDP来构建自己的大数据平台&#xff0c;随着Apache Kyuubi的持续热度&#xff0c;如何基于原有的HDP产品来集成Apache Kyuubi&#xff0c;很多人都迫切的需求。集成Apache Kyuubi到HDP中&#xff0c;主要涉及Ambari的二次开发。本文详细叙述了集成Apache K…

力扣刷题分类合集

数组1.二分法&#xff1a;704.Binary Search&#xff08;求下标&#xff09; 704. Binary Search

SOA的作用和设计原则

1.SOA的作用 在一个企业内部&#xff0c;可能存在不同的应用系统&#xff0c;而这些应用系统由于开发的时间不同&#xff0c;采用的开发工具不同&#xff0c;一个业务请求很难有效地调用所有的应用系统。用简单的语言来表述&#xff0c;这些已有应用系统是孤立的&#xff0c;也…

分享一个用python的本地WIFI密码查看器

本章教程&#xff0c;主要分享一个本地wifi密码查看器&#xff0c;用python实现的&#xff0c;感兴趣的可以试一试。 具体代码 import subprocess # 导入 subprocess 模块&#xff0c;用于执行系统命令 import tkinter as tk # 导入 tkinter 模块&#xff0c;用于创建图形用…

Ubuntu bash按Table不联想

Ubuntu bash按Table不联想 bash-completion包未安装或损坏&#xff1a; 自动补全功能依赖于bash-completion包。首先&#xff0c;需要确保这个包已经安装。可以通过下面的命令安装或重新安装它&#xff1a; sudo apt install --reinstall bash-completion安装完成后&#xff0c…

使用RedissonClient的管道模式批量查询key

1.场景 遇到了一个场景&#xff0c;在客户给我们推送的数据中&#xff0c;咋1分钟左右&#xff0c;会有相同车辆vehicle 和时间 gpstime一样的数据&#xff0c;这类数据呢&#xff0c;我们认为是重复数据&#xff0c;需要过滤的 把相同 vehicle 和 gpstime 作为key存入到redis中…