HEVC/H265 HM10.0 分析(二)TComDataCU.cpp .

HM平台之**xCompressCU**(TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth, PartSize eParent) /*Para rpcBestCU 存放最优数据 Para rpcBestCU 存放局部最优数据 Para uiDepth CU深度 Para eParent 父CU的PU模式*/ HEVC编码器最重要的的函数之一,主要是确定CU的分割深度、预测模式等参数。从宏观上大致可以包含merge和skip的预测函数xChec 阅读详情

以下分析TComDataCU.cpp。这个cpp是很重要的,要分几次分析完,这是分析TComDataCU.cpp(一)。


  1. Void TComDataCU::getPartPosition( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH)  
  2. {  
  3.   UInt col = m_uiCUPelX;  
  4.   UInt row = m_uiCUPelY;  
  5.   
  6.   switch ( m_pePartSize[0] )  
  7.   {  
  8.   case SIZE_2NxN:  
  9.     nPSW = getWidth(0);        
  10.     nPSH = getHeight(0) >> 1;   
  11.     xP   = col;  
  12.     yP   = (partIdx ==0)? row: row + nPSH;  
  13.     break;  
  14.   case SIZE_Nx2N:  
  15.     nPSW = getWidth(0) >> 1;   
  16.     nPSH = getHeight(0);        
  17.     xP   = (partIdx ==0)? col: col + nPSW;  
  18.     yP   = row;  
  19.     break;  
  20.   case SIZE_NxN:  
  21.     nPSW = getWidth(0) >> 1;   
  22.     nPSH = getHeight(0) >> 1;   
  23.     xP   = col + (partIdx&0x1)*nPSW;  
  24.     yP   = row + (partIdx>>1)*nPSH;  
  25.     break;  
  26.   case SIZE_2NxnU:  
  27.     nPSW = getWidth(0);  
  28.     nPSH = ( partIdx == 0 ) ?  getHeight(0) >> 2 : ( getHeight(0) >> 2 ) + ( getHeight(0) >> 1 );  
  29.     xP   = col;  
  30.     yP   = (partIdx ==0)? row: row + getHeight(0) - nPSH;  
  31.   
  32.     break;  
  33.   case SIZE_2NxnD:  
  34.     nPSW = getWidth(0);  
  35.     nPSH = ( partIdx == 0 ) ?  ( getHeight(0) >> 2 ) + ( getHeight(0) >> 1 ) : getHeight(0) >> 2;  
  36.     xP   = col;  
  37.     yP   = (partIdx ==0)? row: row + getHeight(0) - nPSH;  
  38.     break;  
  39.   case SIZE_nLx2N:  
  40.     nPSW = ( partIdx == 0 ) ? getWidth(0) >> 2 : ( getWidth(0) >> 2 ) + ( getWidth(0) >> 1 );  
  41.     nPSH = getHeight(0);  
  42.     xP   = (partIdx ==0)? col: col + getWidth(0) - nPSW;  
  43.     yP   = row;  
  44.     break;  
  45.   case SIZE_nRx2N:  
  46.     nPSW = ( partIdx == 0 ) ? ( getWidth(0) >> 2 ) + ( getWidth(0) >> 1 ) : getWidth(0) >> 2;  
  47.     nPSH = getHeight(0);  
  48.     xP   = (partIdx ==0)? col: col + getWidth(0) - nPSW;  
  49.     yP   = row;  
  50.     break;  
  51.   default:  
  52.     assert ( m_pePartSize[0] == SIZE_2Nx2N );  
  53.     nPSW = getWidth(0);        
  54.     nPSH = getHeight(0);        
  55.     xP   = col ;  
  56.     yP   = row ;  
  57.   
  58.     break;  
  59.   }  
  60. }  
Void TComDataCU::getPartPosition( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH)
{
  UInt col = m_uiCUPelX;
  UInt row = m_uiCUPelY;

  switch ( m_pePartSize[0] )
  {
  case SIZE_2NxN:
    nPSW = getWidth(0);      
    nPSH = getHeight(0) >> 1; 
    xP   = col;
    yP   = (partIdx ==0)? row: row + nPSH;
    break;
  case SIZE_Nx2N:
    nPSW = getWidth(0) >> 1; 
    nPSH = getHeight(0);      
    xP   = (partIdx ==0)? col: col + nPSW;
    yP   = row;
    break;
  case SIZE_NxN:
    nPSW = getWidth(0) >> 1; 
    nPSH = getHeight(0) >> 1; 
    xP   = col + (partIdx&0x1)*nPSW;
    yP   = row + (partIdx>>1)*nPSH;
    break;
  case SIZE_2NxnU:
    nPSW = getWidth(0);
    nPSH = ( partIdx == 0 ) ?  getHeight(0) >> 2 : ( getHeight(0) >> 2 ) + ( getHeight(0) >> 1 );
    xP   = col;
    yP   = (partIdx ==0)? row: row + getHeight(0) - nPSH;

    break;
  case SIZE_2NxnD:
    nPSW = getWidth(0);
    nPSH = ( partIdx == 0 ) ?  ( getHeight(0) >> 2 ) + ( getHeight(0) >> 1 ) : getHeight(0) >> 2;
    xP   = col;
    yP   = (partIdx ==0)? row: row + getHeight(0) - nPSH;
    break;
  case SIZE_nLx2N:
    nPSW = ( partIdx == 0 ) ? getWidth(0) >> 2 : ( getWidth(0) >> 2 ) + ( getWidth(0) >> 1 );
    nPSH = getHeight(0);
    xP   = (partIdx ==0)? col: col + getWidth(0) - nPSW;
    yP   = row;
    break;
  case SIZE_nRx2N:
    nPSW = ( partIdx == 0 ) ? ( getWidth(0) >> 2 ) + ( getWidth(0) >> 1 ) : getWidth(0) >> 2;
    nPSH = getHeight(0);
    xP   = (partIdx ==0)? col: col + getWidth(0) - nPSW;
    yP   = row;
    break;
  default:
    assert ( m_pePartSize[0] == SIZE_2Nx2N );
    nPSW = getWidth(0);      
    nPSH = getHeight(0);      
    xP   = col ;
    yP   = row ;

    break;
  }
}


在 2N*N, 2N*nU,2N*nD 中,上面部分的partIdx 为0,下面部分为1;

在N*2N,nL*2N,nR*2N中, 左边部分的partIdx为0,右边部分为1;

在N*N中, 按四叉树的结构,partIdx 分别为0,1,2,3;

在2N*2N中, partIdx只能为0;


xP,yP的值是CU块左上角的绝对位置值,nPSW,nPSH是当前CU块的宽度和高度,记住,CU是可以嵌套的,CU包含CU,所以有xP,yP,nPSW,nPSH就能够唯一的确定CU块,

HEVC学习(一) —— HM的使用 从今天开始,会陆续发表HEVC学习过程中的一些总结,主要目的是与大家一起交流学习,由于水平有限,恳请大家能够不吝赐教。   由于这是第一次写博客,而且学习也是个循序渐进的过程,第一篇文章就简单介绍下如何使用HEVC的官方标准测试模型HM吧。其实如果之前学习过H.264的话,肯定也是用过JM的,HM的使用方法与JM基本上是相同的,只是配置文件的内容有所不同罢了。好了,不多说,马上进入正题。 阅读详情

相关推荐

开放平台 - 互动玩法演进之路

随着直播业务和用户规模日益壮大,如何丰富直播间内容、增强直播间内用户互动效果,提升营收数据变得更加关键。

bilibili_TC的博客 1740

HM编码器代码阅读(17)——帧间预测之merge模式(一)Merge模式的介绍以及相关函数

入口函数:TEncCu::xCheckRDCostMerge2Nx2N 主要流程: (1)获取可用merge候选MV数量以及merge候选MV (2)判断是否为无损模式,如果是无损模式,那么下面的for循环只需迭代一次,如果不是武勋模式,那么下面的for循环要迭代两次 (3)一个for循环,遍历所有的merge模式候选者      1)设置相关参数      2)调用motionCom

NB_vol_1的专栏 8307

调试备忘录-SWD协议解析

目录--点击可快速直达 文章目录写在前面1  SWD协议简介2  SWD物理层协议解析2.1  SWD通信时序分析2.2  SWD 寄存器简介2.2.1  DP寄存器2.2.2  AP寄存器2.3  SWD通信流程2.3.1  SWD复位2.3.2  SWD读IDCODE2.3.3  SWD清除错误标志位,并且使能AP调试2.3.4  SWD读取AP IDR(也就是AP寄存器的ID CODE)2.3.5  SWD读写MCU任意寄存器 写在前面 最近由于公司需要,所以就做了个基于SWD协议的离线烧写器。由于.

洛神殇的博客 1万+

HEVC/H265 HM10.0 分析(二)TComDataCU.cpp

以下分析TComDataCU.cpp。这个cpp是很重要的,要分几次分析完,这是分析TComDataCU.cpp(一)。 Void TComDataCU::getPartPosition( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH) { UInt col = m_uiCUPelX; UInt row = m_ui

szu030606的专栏 6702

llama factory

NOTE] 除上述链接以外的其他网站均为未经许可的第三方网站,请小心甄别。

thesky123456的博客 1273

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

TComDataCU.h等主要类

/// Non-deblocking filter processing block border tag enum NDBFBlockBorderTag {   SGU_L = 0,   SGU_R,   SGU_T,   SGU_B,   SGU_TL,   SGU_TR,   SGU_BL,   SGU_BR,   NUM_SGU_BORDER }; ///

zhuix7788的专栏 2966

开源libmodbus编译为32位和64位动态库

libmodbus 是支持Linux,Mac OS X,window 的一个开源库,支持modbus TCP和RTU 两种模式。

lemontree1945的博客 1923

分析HM代码,首先必须把class TComDataCU完全搞明白!

分析HM代码,首先必须把class TComDataCU完全搞明白! 为了找到合适的模式或者合适的分割, 基本上都是采用两个TComDataCU来操作, TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU. 相当于两个指针对应两个乒乓buffer,  m_ppcBestCU[uiDepth], m_ppcTempCU[uiDepth], 当然每一个ui

飞翔 视频直播系统 1万+

当C#遇见声音魔法:从麦克风到文字的0.1秒奇幻漂流

为什么选300Hz?因为人声基频通常在85-255Hz,但清脆的“啊”可能到2kHz,所以300Hz是安全区!(参考知识库[1])

墨夶的博客 365

我正用AI Agent重构传统GIS 核心功能,说大白话做空间分析

GeoAI-UP项目通过AI Agent技术实现自然语言驱动的空间分析,核心创新包括: 意图识别层:通过LLM理解用户需求,自动拆解为可执行目标 智能任务规划:动态生成分析流程,处理复杂依赖关系 统一算子架构:采用标准化接口封装200+空间分析功能 可视化工作流。

专注GIS软件开发。 496

HEVC 常用之 类TComDataCU分析

分析HM代码,首先必须把class TComDataCU完全搞明白! 分类: AVC H 分析HM代码,首先必须把class TComDataCU完全搞明白! 为了找到合适的模式或者合适的分割, 基本上都是采用两个TComDataCU来操作, TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU. 相当于两个指针对应两个乒乓b

Goul_的专栏 1711

【eclipse】win 10:eclipse 4.9 下载、安装和汉化(支持中英切换)

目录 一、eclipse下载 二、eclipse安装 三、eclipse在线汉化 四、eclipse离线汉化(推荐) 一、eclipse下载 ①官网下载地址(收费):https://www.eclipse.org/downloads/点击前往下载 ②【推荐】我的百度网盘下载地址(包括离线汉化包):点击下载 提取码:0nfw ③eclipse4.9其他地址下载:http...

顾三殇 —— 博客空间(软件测试) 1万+

CU 级别的分析:TComDataCU

class TComDataCU { private: // ------------------------------------------------------------------------------------------------------------------- // class pointers // -----------...

baidu_35812312的博客 1402

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HM中的TComDataCU和VTM中的CodingStructure和 CodingUnit的代码解释

在HM中TEncCU.cpp的文件中 xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth DEBUG_STRING_FN_DECLARE(sDebug_), PartSize eParentPartSize ) 代码中每个深度的预测用的都是temp, 预测完后跟best比较并交换。best保留作为当前深度的预测数据, 而temp再次初始化。在下一深度的4个子CU预测中用的是...

zhang2039的博客 1059

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TComDataCU

/** \file TComDataCU.h \brief CU data structure (header) \todo not all entities are documented */ #ifndef _TCOMDATACU_ #define _TCOMDATACU_ #include // Include files #include "C

tianzhijiaozi19的专栏 1761

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

5. HEVC参考代码HM10.0的使用

在正式讨论HEVC的技术细节之前,有必要先建立好符合标准的实验平台,这对理解编解码的技术具有很大帮助。最方便,最有效,认可程度也最高的自然是JCT-VC工作组公布的参考代码HM系列了。这里,我们用最新版的参考代码HM10.0为例,详细阐述如何用参考软件成功编码一个视频码流。 参考代码的下载请到我的微盘:http://vdisk.weibo.com/s/u9IAN下载。 (1)下载完成后解压,文

ClaireShi的专栏 2652

xCheckRDCostInter

//xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N ); #if AMP_MRG//< encoder only force merge for AMP partition (no motion search for AMP) Void TEncCu::xCheckRDCostInter( TComDataCU*& rpcBestCU, TC

Moz_z的专栏 1240

openHevc学习笔记:工程代码基本结构——main loop

本文对openHevc工程代码中的主循环部分采用广度遍历模式,用伪代码记录代码结构。并且添加部分注释。 Main loop 1          av_read_frame(); // to do 2          got_picture=libOpenHevcDecoder(); 2.1         for i:max_decoders if (i else av_pkt

i000zheng的博客 768

overview of hevc (二)

结合上一篇文章中的框图,我们来描述一下各个模块的改进 Intraprediction: 预测方向拓展到33个,另外加上一个DC和一个planar,一共35中预测模式,使得预测更加精细,但是为了控制编码复杂度,所以对4x4和64x64的尺寸的预测模式进行了限制。下图对比了HEVC和AVC的Intra预测模式:        INTERPREDICTION:              相

视频编解码算法,专注HEVC/AVC算法研究、实现及其优化 6392

TComPicYuv、TComPic、TComPicSym、TComDataCU以及TComYuv的关系

TComPicYuv、TComPic、TComPicSym、TComDataCU以及TComYuv的关系转载https://blog.csdn.net/nb_vol_1/article/details/71173023    首先用一张图来描述它们之间的关系    1、HM首先使用TComPicYuv保存从文件中读取出来的YUV数据    2、利用TComPicYuv构造TComPic,并把YUV...

xhyan523的博客 1429

[HEVC/H265] 另一个开源项目openHEVC

今天才在群里看见openHEVC项目,过去看了下,是基于FFMPEG结构写的,代码也进行了优化,比我为了调试方便而保持和HM函数名/结构兼容时效率提高不少。推荐大家去看看。似乎目前只支持解码,也许不久会加入编码功能吧。     地址:http://github.com/OpenHEVC/

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 5924

HTM-16.2代码(1)——编码端一些函数的说明

(1)片编码器的初始化——initEncSlice 主要是设置和计算一些参数,为片的编码做准备 参考:http://blog.csdn.net/nb_vol_1/article/details/51151645 (2)片的编码——compressSlice 主要是设置一些参数和初始化一些东西,然后对片中的每一个LCU调用initCtu(初始化CU)和compressCtu(对CU编码)和e...

Eyrane的博客 1174

H.266/VVC相关技术学习笔记4:HEVC和VVC中块划分的差别

关于H.265/HEVC和H.266/VVC中的块划分的区别: 一、HEVC中首先需要将一个图像固定划分为多个CTU。 ① CTU的尺寸固定划分为64×64,一个CTU由一个亮度CTB和两个色度CTB,再加上相应的语法元素组成。 ② CTU可以通过四叉树的方式向下划分为一个个小的CU,一个CU由一个亮度CB和两个色度CB再加上相应的语法元素组成。 ③ CTU划分的CU最大尺寸是64×64(即整个C...

Peter_Red_Boy的博客 4716
上一篇: HEVC/H265 HM10.0 分析(一)NALread.cpp .
下一篇: HEVC/H265 HM10.0 分析(三)TAppDecTop.cpp .
NJU-HEVC-SML
博客等级 码龄15年 30粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值