一、基本结构

VTM的数据模型图如下所示:

数据结构分三种类型:

1. 导航信息

  • Size、Position、Area(Position+Size):基本二维信息(位置、尺寸)
  • CompArea:继承自Area,表示特定分量的二维信息
  • UnitArea:包含了多个分量的Area,表示多个分量的二维信息,描述同一位置处的一组块

参考:

  • Size

    • width,height:UInt-描述了一个矩形的大小
  • Position
    • x,y:Int-描述了一个点的二维位置信息
  • Area:Size,Position

    • 继承自Size和Position,一个位于特定位置的特定大小的矩形
  • CompArea:Area
    • 一个多分量信号中的特定分量的(compID)Area
  • UnitArea
    • blocks[0…N-1]:CompArea
    • N个多分量信号blocks的融合

2. 存储区域

  • AreaBuf:包含了一个二维信号在内存中的存储(buf 和 Stride),可以根据位置访问到相应的信号值,包含内存的操作方法(fill、copy等)
  • UnitBuf:包含了多个分量的二维信号在内存中到的存储,包含内存的操作方法(fill、copy等)
  • PelStorage:一个UnitBuf(Pel类型),需要分配自己的内存空间

参考:

  • AreaBuf< T >(为Pel和TCoeff定义为PelAreaBuf和CoeffAreaBuf)

    • at(x, y):返回信号在(x, y)处的值
    • bufAt(x, y):返回一个指向(x, y)位置的缓冲区的未加工(raw)的指针
    • subBuf(x, y, w, h):返回一个AreaBuf,描述距离(x, y)的偏移量为(w, h)的位置的缓冲区
    • fill(val):使用特定的值填充特定的区域
    • copyFrom(other):从别的区域将内容复制过来
    • substract,addVag, reconstruct,removeHighFreq:取代TComYuv功能的方法
  • UnitBuf< T >,与AreaBuf有相似的接口
    • bufs[0…N-1]:AreaBuf:包含了信号不同分量的描述信息

3. 编码信息

  • Picture:包含了输入输出信号作为元数据(slice info等等),还包括了许多帧级信息(poc、temporalId等)
  • CodingUnit, PredictionUnit, TransformUnit:包含相应的信息(模式信息、位置信息(继承自UnitArea))
  • CodingStructure:管理CU、PU和TU等,通过Picture链接他们;包含自上向下进行RD搜索的方法

参考;

  • CoingUnit:UnitArea

    • 描述如何编码被UnitArea所描述的这个区域
  • PredictionUnit:UnitArea
    • 描述此UnitArea的预测信号是怎样生成的
  • TransformUnit:UnitArea
    • 描述此UnitArea的变换编码是如何应用的

coding structure basics:

  • area:UnitArea类型,描述了CodingStructure包括了图像的哪些区域
  • addCU(UnitArea):创建并定位跨越了UnitArea的CodingUnit
  • getCU(position):返回位于指定位置的CodingUnit(TransformUnit和PredictionUnit存在模拟接口)
  • setDecomp(CompArea):将指定的CompArea设置为已重建
  • setDecomp(UnitArea):模拟多通道的操作
  • isDecomp(Position):返回这个位置的重建信号是否已被生成

RD-Search with CodingStructure

  • initStructData(…):清除当前包含的所有数据(信号和编码信息)
  • initSubStructure(…):在层次结构的底部链接一个新的编码结构
  • useSubStructure(…):从子结构中复制编码数据
  • copyStructure(…):从其他结构中复制编码信息,并不受到父子之间的约束关系

二、具体细节

1. Coding Structure

CondingStrcture包含了CodingUnit等等一系列的对象, 并可以将他们映射到Picture上面。

CondingStrcture并不局限于CTU,全局动态分配。CS区域大到可以覆盖整个帧,小到一个CU

  • 上层的的CoddingStructure包括了在当前帧的所有CU、PU、TU
  • 下层的CodingStructure则是包含了一个特定的UnitArea表示。

CondingStrcture在创建之后内容为空,需要被填满。

  • 使用addCU/PU/TU方法创建映射到特定的对象
  • getCU/PU/TU方法可以获取到使用全局位置寻址的特定对象

使用dynamic_cache动态地分配需要的资源以提高性能。

使用CodingStructure进行RD-Search

  • 允许使用全局上下文transparent的局部编码
  • 遵循经典的best-temp向上传播方案
  • CodingStructure以表示一个局部UnitArea而建立,访问UnitArea之外的信息需要返回上层CodingStructure
  • 父节点不知道子节点,但是最好的子节点将传递给父节点

实例:

如下图所示,cs1是位于上层的coding structure,cs2是下层的coding structure

通过cs2访问位于(32,32)的CU,直接返回cu2

 通过cs2访问位于(16,32)位置的CU,通过其父节点cs1,访问返回cu1;

通过cs1访问位于(32,32)位置的CU,cu2属于cs1的子cs,父节点不能知道子节点,返回null。

2. Partitioner

  • Partitioner是一个管理划分的类(CU、TU,QT和所有可能的划分)。
  • VTM将区域划分模型建模为栈,即新的划分将在当前已处理区域上创建下一级别的划分。
  • 包含对当前划分信息的访问方法,划分信息包括实际划分区域的UnitArea和CU/TU深度信息。
  • 包含设置划分限制的方法,即在特定CU深度级(区域尺寸)上的划分限制。
  • 包含对划分的合理性检查(cansplit)

3. Data Ownership

每一个数据都属于某一个对象,并需要分配内存以及释放

  • Picture

    • 归属于EncLib或DecLib
    • 拥有信号的缓冲区,Slice对象,SEI消息和TileMap
  • AreaBuf, UnitBuf
    • 不保存任何数据
  • PelStorage
    • 可能拥有某些缓冲区,取决于创建时调用的是create还是createFromBuf
    • 数据保存在m_origin成员中
  • CodingStructure
    • Top-Layer:属于Picture

      • 链接至图像的信号缓冲区,但是并不拥有这些缓冲区
    • Other(暂时存在于RD-Search):属于EncCu或IntraSearch
      • 包含一些信号的缓冲区,并拥有他们
    • 总是拥有描述结构和布局的缓冲区(非信号)
    • 拥有变换系数缓冲区
    • 不拥有CodingUnit,仅仅是通过dynamic_cache链接到他们
  • CodingUnit,PredictionUnit,TransformUnit
    • 属于dynamic_cache,其中对象是通过get获取,通过cache来释放
  • TransformUnit
    • 不拥有变换系数缓冲区
    • 从CodingStructure链接到缓冲区
  • dynamic_cache
    • Top-Level的缓冲区是全局的(在运行时动态分配。并在退出的时候释放)
    • RD-Search的缓冲区是属于EncCu和IntraSearch

4. 代码片段

迭代CU中的所有TU(traverseTUs),所有PU(traversePUs)

// call xDecodeInterTU for all TUs in the CU described by cu
for( auto& currTU : CU::traverseTUs( cu ) )
{
xDecodeInterTU( currTU, compID );
}

迭代特定区域中的所有CUs

// iterate over all CUs which are contained in the area described by ctuArea
for( auto &currCU : cs.traverseCUs( ctuArea ) )
{
// decompress CU
xDecompress( currCU );
}

5. 常见问题

  • 最初使用HEVC,运动矢量存储的最小分辨率是PU
  • 针对h.266标准最新提出的工具打破了这一常规(VCEG-AZ10)
    • 对于运动矢量信息来说Sub-Pu的分辨率将被需要
    • 将sub-PUs存储为PUs将会破坏提出PU的逻辑
    • 解决方案:用于子PU解析的运动信息的附加缓冲器

例子:

Mv mvL0 = cs.getPU( pos )->mv[0];  // obsolete low-res call
Mv mvL0 = cs.getMotionInfo( pos ).mv[0]; // new next-style high-res call
  • 旧的调用还在允许,可能会提供子分辨的结果
  • PU::spanMotionInfo方法用于设置这个缓冲区

VVC参考软件VTM数据结构相关推荐

  1. VVC参考软件——VTM的安装和编译

    VVC参考软件VTM安装教程 一.官网下载VTM [VTM下载官网](https://jvet.hhi.fraunhofer.de/) 现在VTM版本更新到5.0,通过SVN只能下载2.0之前的版本, ...

  2. VVC/H.266参考软件VTM算法描述 [译](一. CTU划分部分)

    Algorithm description for Versatile Video Coding and Test Model 8 (VTM 8) [译自JVET-Q2002] 3.2 Partiti ...

  3. H.266/VVC测试软件VTM

    VTM简介 JVET于2018年4月10日美国圣地亚哥会议上,为新一代视频编码标准定名为Versatile Video Coding,正式开启了H.266/VVC的标准化进程. 从H.265跟过来的同 ...

  4. H.266 参考软件VTM下载和安装

    1.下载安装cmake ,下载地址https://cmake.org/. 安装后打开控制面板-系统-高级系统设置-环境变量-PATH-编辑-输入cmake.exe的路径即可. 2.如果你之前(HEVC ...

  5. VVC参考软件的下载安装

    备忘,原文链接: https://blog.csdn.net/JRRRJ/article/details/80797064

  6. 视频压缩编码参考软件代码入门

    代码学习0:参考软件的使用 视频压缩编码标准 参考软件获取 参考软件的使用 参考软件使用方法 VTM工程 cfg配置文件 工程命令设置 编码器 解码器 工程运行 编码器 解码器 结果输出 编码端 解码 ...

  7. 四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码 我们已经知道,H.264是一种视频压缩标准,其只规定了符合标准的码流的格式,以及码流中各个语法元素的解析方法.H.264标准并 ...

  8. AVS2参考软件的运行

    博主最近在接触学习AVS2的代码,在查找资料的时候发现关于AVS2的资料少之又少,光是将这个代码运行起来博主也是踏了一些坑,其实遇到的问题都是很简单的,只不过下载下来的代码并没有使用手册,一切都是自己 ...

  9. 3D-AVS2参考软件RFD10.0的配置

    3D-AVS2参考软件RFD10.0的配置 一.用Cmake生成RD.sln解决方案 CMake下载地址:https://cmake.org/download/ 参照README.txt,注意VC版本 ...

最新文章

  1. AI Challenger 2018 机器翻译参赛总结
  2. SAP 电商云 Spartacus UI ROUTING_FEATURE 的使用场景
  3. Visibiltity:none与Display:none区别
  4. mysql foreign key_MYSQL外键(Foreign Key)的使用
  5. 和is哪个好_眼霜哪个牌子好用?这些品牌的眼霜睡前涂一涂,黑眼圈细纹没有了...
  6. sql developer下载_开放下载!《Rocket MQ 使用排查指南》精解100+常见问题
  7. 【Python】【有趣的模块】【requests】【一】HTTP头信息总结
  8. [2018.07.24 T3] 大原题
  9. Shopee跨境电商开店高频问题解答
  10. Web应用程序安全原理(Web服务面临的威胁)
  11. mysql sniffer 官网下载_MySQL抓包工具:MySQL Sniffer 和性能优化
  12. GAN合成语音相关论文
  13. UVALive7461 - Separating Pebbles 判断两个凸包相交
  14. 公司网站应该外包SEO公司还是自己去做?
  15. COSCon'22 第七届中国开源年会火热报名中,喜迎新一波赞助伙伴
  16. 拉钩网前端项目实战04
  17. CORBA协议相关的概念
  18. 甲骨文开始审核 Java 许可问题:500 强企业“连夜”卸载 Oracle JDK
  19. Oracle VPD
  20. 安卓游戏源码(Replica Island)复刻岛

热门文章

  1. 阶乘相关的算法题,东哥又整活儿了
  2. 打开计算机硬盘页面抖动,显示器闪烁抖动的原因分析及解决方法
  3. 简单的Springboot上传图片生成可访问的url
  4. AssetClub游戏攻略
  5. 画图板软件的功能需求文档
  6. 合肥市招投标中心上传文件html格式,投标文件排版格式有什么标准?怎吗才能中标?...
  7. Adobe Reader 文档无法签名_Adobe | Acrobat amp; Reader多个安全漏洞通告
  8. 计算机u2.0接口在哪,USB2.0和USB3.0的USB接口区别在哪里?怎么分辨?
  9. html打印无法打印背景图片,Word/wps怎么打印背景图片?Word背景打印不出来的三种解决办法...
  10. DeepFake换头术升级:浙大新模型,GAN出一头秀发