xCompressCU( )作为HEVC编码器最重要的函数之一,主要是确定CU的分割深度、预测模式等参数。

(一) xCompressCU( )位置

以HM16.5版本为例进行分析,在工程“TAppEncoder”里面打开“encmain.cpp”文件。

然后依次按照下列图的顺序即可找到xCompressCU()位置。

(1)

(2)

(3)

(4)

(5)

(6)

(7)

(二) xCompressCU( )函数介绍

参考:https://blog.csdn.net/king20168/article/details/76113446

/*Para rpcBestCU 存放最优数据

Para rpcBestCU 存放局部最优数据 
Para uiDepth CU深度 
Para eParent 父CU的PU模式*/ 
HEVC编码器最重要的的函数之一,主要是确定CU的分割深度、预测模式等参数。从宏观上大致可以包含merge和skip的预测函数xCheckRDCostMerge2Nx2N()、帧间预测函数xCheckRDCostInter()和帧内预测函数xCheckRDCostIntra() 以及函数copyPartFrom()和xCheckBestMode()。该函数实现的功能:遍历每个预测模式,通过比较率失真代价值,得到最优的预测模式,保存到参数rpcBestCU中,然后通过调用自身进行子CU的编码。遍历每种预测函数时,均使用rpcTempCU参数,参数rpcTempCU主要有两个作用:1.存放每一个预测函数的最优参数,然后通过xCheckBestMode() 函数将最优参数传给rpcBestCU;注意的是,在进行下一个预测函数之前,rpcTempCU会被初始化,模式信息、代价值、失真和码率等参数将会被清零;2.存放子CU的最优信息,当CU进行回溯裁剪时,通过比较rpcBestCU和 rpcTempCU两个参数的率失真代价值进行判断是否划分。copyPartFrom()函数实现的是将子CU的最优信息传递给rpcTempCU。参数eParent是父CU的最优预测模式,这个参数在进行非对称分割模式的预测时会用到。子CU总的率失真代价值的计算:这个率失真代价值的计算并不是将子CU的最优率失真代价值进行相加得到,而是根据总的失真和码率进行计算。这是因为在预测完成后,还会增加一定的码率,如编码分割标志位。函数简介如下: 
1. xCheckRDCostMerge2Nx2N():merge和skip模式的预测函数,当残差为0时,为skip模式。这个函数与普通的帧间预测函数的区别是没有运动估计过程。 
2. xCheckRDCostInter():普通帧间模式2N×2N、N×N、N×2N、2N×N、2N×nD、2N×nU、nL×2N和nR×2N的预测函数,主要包括运动估计和运动补偿两个过程。作用:进行预测,得到每种帧间模式的率失真代价值、失真和码率,并通过比较得到最优的帧间模式。 
3. xCheckRDCostIntra():帧内预测函数,帧内模式包括平面模式、DC模式以及33种角度预测模式。 
4. copyPartFrom():将子CU的最优编码信息传递给当前深度的rpcTempCU中。 
5. xCheckBestMode():通过比较rpcTempCU和rpcBestCU中的编码信息,将最优的信息存放在rpcBestCU中。 

HEVC---xCompressCU()函数作用及位置相关推荐

  1. H.265/HEVC学习之xCompressCU函数

    H.265/HEVC的CU划分只有四叉树划分方式,如下图所示: 在HEVC的参考软件HM中,CU的划分是通过调用xCompressCU函数实现的,通过递归调用自身实现CU的划分以及编码,递归划分的流程 ...

  2. API各函数作用简介

    API各函数作用简介 1.控件与消息函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小  AnyPopup 判断屏幕上是否存在任何弹出式窗口  Arrang ...

  3. 在标准IO库中,rewind函数作用?

    在标准IO库中,rewind函数作用? 将文件内部的位置指针重新指向一个流(数据流/文件)的开头 一个完整的信号生命周期包含4个重要的事件,这4个重要事件分别是? 信号诞生:信号在进程中注册完毕:信号 ...

  4. H.266/VVC代码学习:xCompressCU函数

    xCompressCU函数是用来进行CU划分(递归调用自身)以及模式选择. 首先调用m_modeCtrl->initCULevel函数初始化模式选择列表,由堆栈控制,将当前CU可以划分的模式(四 ...

  5. c语言memset函数作用,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s,int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一般 ...

  6. C++多态,虚函数作用及底层实现原理

    简述C++虚函数作用及底层实现原理 1.foreword C++是面向对象程序设计,其包括3项特点: (1)数据抽象:接口和实现分离 (2)继承:父类和子类 (3)多态:动态绑定 本文讨论多态. 当父 ...

  7. Python内置函数作用及解析

    Python内置的函数及其用法.为了方便记忆,已经有很多开发者将这些内置函数进行了如下分类: 数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(7个) 反射操作(8个) 变量操作(2个 ...

  8. R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符、str_sub函数指定起始位置和终止位置替换子字符串

    R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符.str_sub函数指定起始位置和终止位置替换子字符串 目录

  9. R语言使用str_locate函数和str_locate_all函数来定位特定字符串或者字符串模式在字符串中的位置:str_locate函数第一个位置、str_locate_all函数定位所有位置

    R语言使用str_locate函数和str_locate_all函数来定位特定字符串或者字符串模式在字符串中的位置:str_locate函数第一个位置.str_locate_all函数定位所有位置 目 ...

最新文章

  1. Educational Codeforces Round 17 E. Radio stations cdq分治 + 树状数组
  2. WebMagic爬取58同城租房数据
  3. 一篇图像识别的科普文
  4. 使用TypeScript开发ReactNative应用的简单示例
  5. LINUX下载编译g729
  6. Unity渲染性能优化总纲
  7. Silvaco_VP_INIT
  8. php连接mssql的一些相关经验和总结
  9. 人人都能看懂——c大调d大调f…
  10. xul界面编程语法_探索XUL中的多线程编程
  11. Echarts图表隐藏X轴和Y轴
  12. 森林防火火灾漫延算法 火灾推演算法分析 火灾蔓延范围计算方法 森林火灾边界漫延计算方法
  13. Android初级,Toast的带图片显示
  14. SQL16号统计1~15号数据,1号统计上月15~月底数据
  15. STM32CubeMX HAL F103 BKP备份寄存器使用
  16. Python两个列表交错合并方法
  17. Minio(一) | 搭建Minio服务器(单节点)
  18. JQuery动画基础:上卷下拉
  19. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day19】—— 集合框架3
  20. python的staticmethod,classmethod和装饰器以及闭包

热门文章

  1. 和信虚拟终端的全面部署-虚拟终端网络工程实施
  2. windows加域后的问题
  3. Struts2教程3:struts.xml常用配置解析
  4. 命令查看mysql 是否安装_验证mysql是否安装成功的方法
  5. c语言实现全排列并存储,C语言实现全排列和回溯法总结
  6. 鸿蒙车载智慧屏评测,华为智慧屏S Pro体验:告诉你鸿蒙OS有多优秀?
  7. Visual Studio 2008下设置OpenCV
  8. X64-CL iPro 采集卡OC-64EO-IPRO0简介
  9. Mysql原理+ 多实例 +表损坏
  10. 物联网:不要幻想今年会突飞猛进,但行业依然亢奋