VTM中的cu、pu和tu在使用时都是作为CodingStructure类的成员变量来使用的,即作为CS中cus、pus和tus数组中的一个变量来使用的,毕竟VTM中的操作都是以CS作为最基本的类来执行的。
VTM不会像JEM中那样将cu、pu和tu区分起来看待,JEM中在划分完cu后,在处理pu时会有8种划分模式,tu也会根据pu的划分方式有自己的划分。VTM则移除了这种对cu、pu和tu的严格区分,只是将cu、pu和tu视为当前块cs的三种类型的数据,CTU划分树得到cu之后不再进行pu和tu的继续划分了(当然tu会因为变换块的大小关系可能划分为小块)
CU、PU和TU的结构体中包含的数据如下:

struct CodingUnit : public UnitArea
{CodingStructure *cs;           //所归属的csSlice *slice;ChannelType    chType;PredMode       predMode;     //intra、interPartSize       partSize;       //VTM中均为2Nx2NUChar          depth;   //所有划分模式的depthUChar          qtDepth; //QT深度UChar          btDepth; //BT深度UChar          mtDepth; //TT+BT深度SChar          chromaQpAdj;SChar          qp;          //量化参数SplitSeries    splitSeries;   //64位长整数,记录ctu划分树划分到cu时的各个depth的划分模式Bool           skip;         //是否为skip模式Bool           transQuantBypass; //变换系数旁路编码Bool           ipcm;          //是否为pcm模式Bool           rootCbf;// needed for fast imv mode decisionsSChar          imvNumCand;unsigned    idx;        //cu存储在cs中的cus数组中CodingUnit *next;      //idx表示在数组中位置,nest指向数组中下一个cuPredictionUnit *firstPU; //cu会记录它的pu和tuPredictionUnit *lastPU;   //cu的pu和tu是cs.pus和cs.tus的一段TransformUnit *firstTU;TransformUnit *lastTU;
};struct IntraPredictionData
{UInt  intraDir[MAX_NUM_CHANNEL_TYPE];      //帧内预测亮度和色度模式
};struct InterPredictionData        //帧间预测数据,merge和inter_ME
{Bool      mergeFlag;       //是否mergeUChar     mergeIdx;        //mergeidxUChar     interDir;       //帧间预测方向:1-前向、2-后向、3-双向UChar     mvpIdx  [NUM_REF_PIC_LIST_01];      //mvp的在AMVP列表中的idxUChar     mvpNum  [NUM_REF_PIC_LIST_01];      //AMVP列表中mvp数目Mv        mvd     [NUM_REF_PIC_LIST_01];      //mvdMv        mv      [NUM_REF_PIC_LIST_01];       //mv=mvp+mvdShort     refIdx  [NUM_REF_PIC_LIST_01];      //参考帧MergeType mergeType;       //merge模式类型
};struct PredictionUnit : public UnitArea, public IntraPredictionData, public InterPredictionData
{                           //pu直接继承了上面帧内和帧间的数据CodingUnit      *cu;         //pu所属的cuCodingStructure *cs;           //pu所属的csChannelType      chType;unsigned        idx;           //pu存储在cs中的pus数组中PredictionUnit *next;          //cs.pus中指向下一个pu
};struct TransformUnit : public UnitArea
{CodingUnit      *cu;       //tu所属的cuCodingStructure *cs;ChannelType      chType;#if HEVC_USE_RQT || ENABLE_BMSUChar        depth;      //tu如果进行划分时的深度
#endifUChar        cbf          [ MAX_NUM_TBLOCKS ];    //tu是否已经经过变换量化RDPCMMode    rdpcm        [ MAX_NUM_TBLOCKS ];    //pcm模式          pcm模式是省去求残差、变换和量化Bool         transformSkip[ MAX_NUM_TBLOCKS ];    //transformSkip模式  TS模式是省去变换SChar        compAlpha    [ MAX_NUM_TBLOCKS ];unsigned       idx;       //与cu和pu一样,cs.tus中的位置TransformUnit *next;private:TCoeff *m_coeffs[ MAX_NUM_TBLOCKS ];    //其实这里只是记录当前tu的变换系数的存储位置,tu的变换系数数据存储在cs中。参考addTU函数就能理解Pel    *m_pcmbuf[ MAX_NUM_TBLOCKS ];   //pcm模式时的像素buf
};

VTM1.0代码阅读:CU、PU、TU相关推荐

  1. VTM1.0代码阅读:CodingStructure类主要函数

    CodingStructure类中的各个函数对于cu.pu和tu的函数处理,其实大致流程都是差不多一样的,所以这里只对cu的相应函数进行分析. 对于下面CodingStructure类中的各个函数的阅 ...

  2. 每一步详细介绍—在HM中进行CU PU TU划分以及PU最佳预测模式选择

    CU PU TU划分以及PU最佳预测模式选择 在HM对CU进行划分(CU模式判别).PU模式选择(划分).以及PU预测模式划分的过程总算有点理解,现对整个过程进行详细介绍. HM进行块划分和模式选择主 ...

  3. VTM3.0代码阅读:xEstimateMvPredAMVP函数

    AMVP运用于inter_ME模式的时候. xEstimateMvPredAMVP进行AMVP,获得当前pu的相邻运动信息,构建AMVP列表,最终选择出最优的MVP.AMVP最终获得的MVP作为ME的 ...

  4. 浅谈HEVC中的CTU CU PU TU

    从今天开始会陆续写一些对HEVC的认识的文章,小弟初来乍到,希望大家能够多多指点. 这两天看了block partitioning structure in the HEVC standard这篇论文 ...

  5. HEVC标准中的图像分割(2),slice,tile,CTU,CU,PU,TU等

    接着来说HEVC的图像分割. HEVC的标准中有这么一段话,翻译过来就是: 图像分成分量(Y,Cb,Cr). 分量分成coding tree blocks 图像分成tile列 图像分成tile行 Ti ...

  6. HEVC区域划分Slice Tile CTU CU PU TU

    Slice Slice是可以不依赖同一张图片其他Slice独立编码的数据结构,包括信号预测.残差信号重建和熵编码.一张图片可以分为一个活多个Slice.Slice包含一个或多个Slice segmen ...

  7. VTM3.0代码阅读:xDeriveCUMV函数

    xDeriveCUMV函数根据解码得到的预测参数数据,计算得到mv. 函数内根据解码得到的各个模式的数据,获取到MMVD.三角预测.AffineMerge.普通merge.AffineME.普通int ...

  8. yii 2.0 代码阅读 小记

    1.\yii\base\object 设置了get/set属性...使用getName()获取属性名..构造函数中使用config初始化属性 2.\yii\base\Component 继承自Obje ...

  9. VVC 代码阅读 compressCtu()函数

    void EncCu::compressCtu( CodingStructure& cs, const UnitArea& area, const unsigned ctuRsAddr ...

最新文章

  1. redis中密码设置
  2. metasploit 目录结构
  3. Codeforces Round #470 (rated, Div. 2 C. Producing Snow(思维)
  4. android地图路径绘制,android:利用svg的path路径+canvas 开发自定义地图控件
  5. linux下启动oracle服务
  6. C++笔记-远程线程注入
  7. 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件
  8. Glide 这样用,更省内存!!! 1
  9. YbSoftwareFactory 代码生成插件【八】:基于JQuery EasyUI、Web Api的 ASP.NET MVC 代码生成插件...
  10. 多光谱、高光谱与雷达数据等产品级划分标准
  11. 程序员居然都玩起“直播”,你的好友工程狮已经上线!
  12. kindeditor富文本编辑器下载使用
  13. 宾馆酒店如何对客人进行实名认证登记?
  14. 开发人员使用Helix QAC实现静态代码测试合规性的五大原因
  15. A调用B方法,@Transactional事务失效情况
  16. ESP8266_CH340G串口自动下载固件库原理
  17. html怎么设置左侧内边距,CSS 内边距(Padding)
  18. Not allowed to access vertices on mesh ‘Combined Mesh (root: scene)
  19. 开源表单推荐:Tduck 填鸭 —— 表单收集器
  20. Taro引入阿里图标

热门文章

  1. 测试软件能批量转换成pdf吗,三大PDF转换软件对比测评
  2. Conversion failed when converting date and/or time from character string.
  3. C++学习笔记12:编程练习二
  4. win10 安全模式开机
  5. 信息时代的眼睛保护色
  6. docker使用和部署
  7. 交换机和路由器之间区别
  8. 复旦大学计算机专业博士生导师,危辉 - 复旦大学 - 计算机科学技术学院
  9. 阿尔法c语言程序设计考试题,计算机考试习题
  10. 《用图表说话》读后感