![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
H.266/VVC
文章平均质量分 74
小小柴
这个作者很懒,什么都没留下…
展开
-
H.266/VVC代码学习28:Dependent Quantization
好久没看266的代码,感觉太难懂了,各种变量各种类,也没有个注释,只能抱着读书百遍其义自现的真理一遍一遍debug,最后大部分看懂了,有些不懂的以后有机会慢慢补。今天记录的是vvc中的新工具,dependent quantization。先上点简单的原理:依赖量化器的方法的实现如下所示:定义两个不同重建水平的标量量化器 定义一个两个标量量化器之间的切换过程这两个标...原创 2020-03-10 20:05:42 · 2188 阅读 · 1 评论 -
266中帧内预测完整过程的总结
做了一段时间帧内,感觉对帧内预测的理解有加深了一些,今天来给帧内预测做个总结,也相当于巩固记忆啦。 相比起来,帧内预测真的是属于视频编码中最简单的模块了,内容也超级少,感觉最近帧内有点难做,性能提升都很少,第十次会议大部分的提案的性能都不高,而且大部分提案都集中于滤波,双向预测和多参考行预测这一块。 帧内预测的基本思想就是利用相邻像素的相关性去除空间冗...原创 2018-06-09 21:50:02 · 8505 阅读 · 12 评论 -
VVC/JEM代码学习27:xIntraRecBlk
VoidTDecCu::xIntraRecBlk( TComYuv* pcRecoYuv, TComYuv* pcPredYuv, TComYuv* pcResiYuv, const ComponentID co...原创 2018-06-09 16:38:30 · 758 阅读 · 0 评论 -
H.266中的熵编码总结
持续更新......1.基于上下文的自适应上下文算术编码(用于亮度预测模式中的MPM及其他)Void TEncBinCABAC::encodeBin( UInt binValue, ContextModel &rcCtxModel ){#if !VCEG_AZ05_MULTI_PARAM_CABAC m_uiBinsCoded += m_binCountIncrement; r...原创 2018-06-15 22:48:52 · 2605 阅读 · 3 评论 -
H.266代码中为何要进行多次熵编码
其实不是在H.266中,在HEVC中也是。今天跟实验室同学讨论问题的时候发现了一个自己一直依赖偶读理解错误的知识点,即关于代码中三次出现encodeXXXX()函数。1.第一次出现在xCompressCU这个大函数里,但是各个参数的熵编码函数是分散在各个小函数中的,比如在xCompressCU里有encodeBTSplitMode()和encodeSplitFlag(); 在xCheck...原创 2018-06-15 21:43:55 · 889 阅读 · 0 评论 -
解码端出错
昨天改完代码在解码端运行的时候出现如题所示的错误,检查很久,后来发现是因为解码端和编码端的代码没有对应上,导致解码端的比特流串位了,读取的比特的时候位数不够,就会导致该错误。...原创 2018-06-22 18:26:51 · 766 阅读 · 3 评论 -
compressSlice里为什么要有encodeCtu
之前虽然看过一篇大神关于这个问题的博客介绍,有点一知半解的,但是随着理解的深入,现在对这个原因有了更深刻的认识,所以今天记录记录,以防过几年老年痴呆忘记哈。 我们知道compressSlice是完成一个帧的划分,以CTU为单位,根据RD COST确定各种最优的预测参数。compressSlice后面是encodeSlice,encodeSlice里是对compressSl...原创 2018-06-12 23:22:51 · 965 阅读 · 0 评论 -
H.266中的扫描顺序总结
1.Raster扫描:即从左到右,从上到下2.Z-扫描(不同于zigzag扫描):对于任何一个边长为偶数的正方形来说,都先扫描左上角,再是右上角,然后是左下角,最后是右下角,如下图的数字增大顺序所示。3.垂直扫描4.水平扫描5.对角扫描 其中,Raste扫描和Z扫描的作用是定位CU,他们两之间可以相互转换;g_auiZscanToRaster[]存放从Zscan索引到Raster索引的映射,g_a...原创 2018-05-22 10:32:19 · 1722 阅读 · 0 评论 -
H.266新参考软件VTM中的数据结构
从今天开始研究新的266的参考软件啦----VTM,先来看看新代码中的数据结构。 在以前的HM中,有三个很重要的数据结构,分别为TComDataCU,TComTU,TComPicYuv; TComDataCU---- 存储编码信息;表示一个CU或者CTU;图像位置到编码信息的的映射; TComTU----允许更简单的TU结构指引的对象; 不包含实际的数据...翻译 2018-05-25 22:19:06 · 3755 阅读 · 8 评论 -
H.266/VVC 新发布的参考软件
H.266新发布了两个参考软件,以后的研究工作都将基于这两个平台: 一个是the test model (VTM) ,另一个是 the benchmark set (BMS),前者在HEVC的基础上加了三叉树,四叉树和二叉树的划分。后者在前者的基础上加了9个新的工具,分别如下。 65 intra prediction modes (帧内预测)LM chroma ...原创 2018-05-25 17:01:09 · 4190 阅读 · 1 评论 -
H.266中帧内预测的亮度预测模式和色度模式的熵编解码
一.帧内预测的亮度模式的熵编码过程将67种预测模式分为3部分:a.6种MPM模式; 对于使用6 MPMs选择的模式的熵编码,使用一个截断的一元码。前三个bins用上下文进行编码,上下文取决于与当前正在被发送的bin相关的MPM模式。MPM模式可以被分成3类:(a)水平主导的模式,即MPM模式的编号小于或等于对角方向的模式编号(b)垂直主导的模式,即MPM模式的编号大于对角方...原创 2018-04-26 21:04:48 · 1426 阅读 · 1 评论 -
VVC/JEM代码学习26:xIntraCodingTUBlockTM
考虑到帧内和帧间有很多相似的patches,H.266提出了信号独立变换(SDT)技术,利用这样的相关性通过KLT的方法提高编码效率。这个训练的KLT扮演了一个转换的角色,旨在更有效地压缩能量。 通过本函数来实现SDT技术,在此函数中,首先,获得了一个由重构的左上模板t_b和编码块的预测块p组成的参考patch R。然后,使用参考patch在重建区域搜索N个最相似的patc...原创 2018-05-08 22:37:49 · 653 阅读 · 0 评论 -
修改代码注意事项(持续更新)
都是用鲜血换来的教训: 1).如果在修改代码过程中,扩展了右上方和左下方的相邻重建值,一定要记得修改对应存储数组的大小。 2)....原创 2018-06-26 17:09:31 · 2057 阅读 · 1 评论 -
在编解码参考软件中设置全局变量统计数据
今天想在解码端加一个全局变量统计模式信息; 一开始,现在decmain.cpp中的main()函数外面声明了几个全局变量,然后在main()函数里面进行初始化; 接着在TDecSbac.cpp中的parseIntraDirLumaAng函数上面用extern声明了这几个变量,在parseIntraDirLumaAng函数里面对这几个全局变量进行累加计算; ...原创 2018-06-26 11:22:59 · 414 阅读 · 0 评论 -
H.266的帧内技术之色度模式编码
在10月份的会议中,也接收了几个有关色度模式编码的几个提案,下面将详细讲述在VTM3.0版本上色度模式编码的流程。 色度分量的预测过程和亮度不太一样。首先是构建色度的预测模式候选列表,VTM3.0中是8个模式,分别有几部分组成,然后是根据RD check对这8个候选模式进行选择,最后把选择的最优模式按照特定的熵编码方式进行编码。一.色度候选模式列表的构建: ...原创 2018-12-13 16:07:56 · 1484 阅读 · 4 评论 -
H.266的帧内技术之亮度模式编码
在10月份澳门的JVET会议上,266接收了一个有关亮度模式编码的提案,下面就详细记录一下在VTM3.0版本上的亮度模式编码。 在VTM2.0中,亮度模式编码延续了H.265中的3 MPM及剩余模式编码的方法,在10月份会议(即L次会议)上,接受JVET-L0165提案,该提案提出针对现在的65种角度模式把3 MPM扩展到 6 MPM,且针对多参考行帧内预测技术细致的设计的不同的...原创 2018-12-13 15:37:28 · 718 阅读 · 2 评论 -
H.266的帧内技术之多参考行帧内预测(MRL)
在刚刚结束的十月份的会议中,H.266的帧内技术采纳了多参考行帧内预测技术(MRL)。 该技术现在还不能看到具体的代码,所以有些细节还不是很清楚,所以先讲个大概的过程。在之前的帧内预测中,使用当前块的相邻左侧一列和相邻上侧一行作为参考采样来计算当前块的预测值,在MRL技术中,将可以使用的参考行扩展到了三行,具体如下: 如图所示,不仅最相邻的重建采样作为参考采样,相...原创 2018-11-08 15:41:00 · 1930 阅读 · 7 评论 -
视频编码的比特流里包含的信息总结
今天就对如题所示的问题做个总结,按照VTM的代码和书上的一些信息,可能会有些遗漏或者错误,边学习边补充; 1.flag 视频编码里的flag超级多,包括: merge flag;MVP flag; split_cu flag;affine flag等等等等,一般用来表示是否使用某个工具或者是否进行了某个步骤等; 2.预测信息 帧...原创 2018-08-15 20:47:11 · 1129 阅读 · 0 评论 -
H.266的公共测试条件
经常忘了RA和LB之间的区别,今天记录一下;视频编码标准的公共测试条件定义了一套用于实验的配置,包含以下几种情况:(1)全帧内(All Intra),即对所有图像都采用I slice进行编码; (2)随机介入(Random access),对随机介入的图像每一秒钟进行一次金字塔结构的重排序,比较适合于广播环境;(3)低延时 Bslice(Low B),不需要图像重排,只...原创 2018-07-31 22:23:14 · 3337 阅读 · 0 评论 -
H.266/VVC中的四叉树+三叉树+二叉树(更新)
H.266已经确定采用混合树结构(MT),即由四叉树(QT),二叉树(BT)和三叉树(TT)结构组成。这种划分结构比之前非常灵活,极大的提高了编码性能。 CTU首先由四叉树结构划分,即CTU块可以不划分或递归地划分成4个相同大小的子块。然后,在QT的叶节点可以通过二叉树或三叉树结构进一步划分。二叉树和三叉树划分可以交错并递归进行。但是,一旦应用二叉树或三叉树划分,就...原创 2018-07-26 22:31:25 · 5498 阅读 · 5 评论 -
H.266/VVC中的PDPC技术
PDPC技术已经在刚刚结束的K次会议中被采纳。但目前还不知道这个技术是只用于Planar模式还是所有帧内预测模式。PDPC的基本原理是使用滤波后的参考采样生成预测值,再将此预测值和未滤波的参考采样进行加权平均得到最终的预测值。下面以G1001里面提到的PDPC技术为例,贴一下PDPC的具体流程。 上图是我自己做报告时画的一个图,左边是265中planar模式的计...原创 2018-07-26 21:26:56 · 3945 阅读 · 0 评论 -
H.265和H.266之间的差异
临近校招,这个问题可能经常会被问,所以趁着K次会议结束先对H.265和H.266之间的到差异做个目前为止做个总结。由于时间问题,只写有较大改进的技术,一些小细节就忽略不计了。 1.划分结构 H.265是四叉树划分,H.266中是四叉树加三叉树和二叉树划分,所以在H.266的划分中会存在很多矩形块(https://blog.csdn.net/cxy19931018/...原创 2018-07-26 17:48:45 · 28188 阅读 · 2 评论 -
VVC/VTM1.0代码学习一之编解码框架
1.编码框架 VTM1.0的代码框架大致和JEM一样,在encodeSlice部分有些改变。首先是函数名称的改变,以前是encodeCtu,然后是encodeCU,现在变成了如图所示。且以前的解码端与encodeCtu对应是decodeCtu,与encodeCU对应的是decodeCU,而现在在解码端的函数依然是上述函数名,只有调用函数的类由编码端的m_CABACWriter变成了解...原创 2018-07-25 12:23:56 · 2876 阅读 · 2 评论 -
VVC/JEM代码学习26:m_pcTrQuant->transformN*N
在H.266中,做完主变换后,还要进行二次变换,然后才进行量化;Void TComTrQuant::transformNxN( TComTU & rTu, const ComponentID compID, Pel ...原创 2018-05-08 22:20:58 · 698 阅读 · 1 评论 -
H.266中的熵编码
感觉在视频编码中熵编码是个很神奇的存在,现在 对这方面还不太懂,先记录一下H266中关于上下文模型的函数。CABAC中上下文模型中的上下文关系大概可以分为4种情况。第一种上下文模型根据它相邻的一编码块的语法元素构成,一般是用其左边和上边块的对应语法元素来建立相应的概率模型,对当前语法元素进行模型预测。第二种上下文模型仅局限于对块类型和子块类型的应用,其中第 n比特的概率模型的选定要参考前面已经编码...原创 2018-04-13 23:11:45 · 1204 阅读 · 0 评论 -
VVC/JEM代码学习13 : SAOProcess
在compressSlice和encodeSlice之间,还有两个主要的处理函数,一个是SAOProcess,一个是ALFProcess(ALF是JEM中新加的);也就是说,当前帧完成重构后要对重构图像进行样点自适应补偿和自适应环路滤波,最后才进行真正的熵编码。 样点自适应补偿的原理是由于量化导致高频信息的丢失从而在解码图像上产生振铃效应,为此,样点自适应补偿技术从像素域入手,对重构...原创 2018-03-29 23:29:30 · 1452 阅读 · 0 评论 -
H.266中帧内相关理解纠正
之前对帧内的一部分理解有很多误区,记录下刚纠正过来的知识点(慢慢更新):1.xIntraCodingTUBloc函数里没有熵编码过程,这个函数的主要功能是重构图像,以用于下一帧图像的预测,同时还会传出失真,用于计算RD cost;2.执行完xIntraCodingTUBloc后,有一个计算比特数的函数,而此比特数指的是编码残差系数的比特数,不包括其他;此比特数和xIntraCodingTUBloc...原创 2018-03-23 15:44:01 · 514 阅读 · 0 评论 -
VVC/JEM代码学习10:xEncodeCU
#if JVET_C0024_QTBTVoid TEncCu::xEncodeCU( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiSplitConstrain )#elseVoid TEncCu::xEncodeCU( TComDataCU* pcCU, UInt...原创 2018-03-06 17:20:24 · 486 阅读 · 10 评论 -
H.266中关于I帧亮度色度QTBT结构独立的原因
在H.266中,对于I slice,支持亮度和色度采用不同的QTBT结构,对于B 和P slice,亮度和色度才采取相同的QTBT结构,具体体现在代码中为(删除了无关代码):Void TEncCu::compressCtu( TComDataCU* pCtu ){//函数刚开始就将分量类型设定为亮度分量,这样在第一次调用xCompressCU里的xCheckRDCostIntra时,如果是I sl...原创 2018-03-19 17:47:01 · 2163 阅读 · 0 评论 -
H.266帧内色度预测模式的推导过程
帧内推导色度预测模式的详细流程帧内色度预测模式总共有11种模式,6种CCLM和5种传统的预测模式,其中6种CCLM模式是固定的CCLM模式,编号分别为67,68,69,70,71,72,不用推导过程,直接往11种模式候选列表里面加,而5种传统预测模式是需要通过推导得到的,推导过程具体为:1. 首先是推导当前色度块对应的亮度块的5个不同位置的预测模...原创 2018-03-18 21:51:33 · 2074 阅读 · 3 评论 -
H.266帧内亮度预测的详细流程
帧内亮度预测的详细流程1.首先,得到6种MPM模式;2.JEM中有67种亮度预测模式,为了加速每个模式RD cost的比较,先对原始的35种模式(H.265中的33种角度模式加DC和Planar模式)进行简单的SATD的计算,选出(numModeForFullRD+2)种最小的模式,其中,numModeForFullRD的值与宽的宽度和高度有关,具体情况如下:当块的大小为4*64,4*128,8*...原创 2018-03-17 20:47:29 · 1615 阅读 · 0 评论 -
H.266中MMLM技术的详细流程
JEM中的色度模式总共有11种,包括5种传统预测模式和6种CCLM模式,其中6种CCLM模式又包括1种单模型CCLM(编号67)模式和5种多模型CCLM模式(编号68-72)。在色度预测的总函数中,遍历这11种模式,根据代价选择最优的一个。1. 首先,为了加快RD cost的选择过程,我们先用69-72这四种MMLM模式对色度信号进行预测,从而计算简单的SATD,选择最小的一种模式进行后续的R...原创 2018-03-17 19:16:39 · 2714 阅读 · 0 评论 -
H.266:CCLM技术详解
在H.266的帧内预测模块中,加入了CCLM这个新技术。这个技术其实是CCP技术的一个扩展,CCP技术已经在H.265中被采用,CCP指的是利用亮度残差预测色度残差,是应用于残差域的,而CCLM技术将残差域限制打破,被应用到更多领域。 首先,CCLM的字面意思是分量间预测,显然,分量指的是亮度分量和色度分量,色度分量又进一步包括Cb分量和Cr分量。所以,由此可知,CCLM中包...原创 2018-02-27 10:13:14 · 3783 阅读 · 3 评论 -
CCLM中的线性回归
JEM中的CCLM技术涉及到了线性回归,看了一些帖子还挺有趣的,记录下。原文地址:https://www.zhihu.com/question/47455422?from=profile_question_cardhttps://www.cnblogs.com/little-horse/articles/6084391.html “回归”是由英国著名生物学家兼统计学家高尔顿(Francis转载 2018-01-18 17:33:18 · 698 阅读 · 0 评论 -
H.266------帧内预测
1. 67种帧内预测模式的帧内模式编码 为了捕获自然视频中任意边缘的方向,定向帧内模式的数量从HEVC的33中增加到了65种。这些密集的方向帧内预测模式应用于所有大小的块中,也用于所有的亮度和色度帧内预测。1.1 亮度帧内编码模式 为了适应帧内模式数量的增加,使用6MPMs的帧内模式编码方法。包含两个主要的技术:1)6 MPMs的来源,2)6 MPMs和non-MPM模式的熵...原创 2018-01-04 21:52:50 · 1784 阅读 · 0 评论 -
H.266-----QTBT结构
1.QTBT块划分结构 在HEVC里,使用定义为编码树的四叉树结构将一个CTU划分为CUs,以适应不同的局部特征。在CU层决定是否使用帧内或者帧间预测去编码图像区域。每个CU按照PU分割类型都能被进一步划分成1个,2个或4个PUs。在一个PU里面,应用相同的预测过程,相关的信息被发送到解码端。通过基于PU分割类型应用预测过程去获得残差块之后,一个CU可以按照另一个类似于CU编码原创 2018-01-04 21:43:57 · 3509 阅读 · 3 评论 -
H.266中estIntraPredLumaQT和estIntraChromaQT函数框架
原创 2018-03-20 21:08:21 · 496 阅读 · 3 评论 -
VVC/JEM代码学习11:xDecodeCU
Void TDecCu::xDecodeCU( TComDataCU*const pcCU, const UInt uiAbsPartIdx, const UInt uiDepth, const UInt uiWidth, const UInt uiHeight, Bool &isLastCtuOfSliceSegment, UInt uiSplitConstrain)#elseVoi...原创 2018-03-20 23:06:46 · 405 阅读 · 0 评论 -
VVC/JEM代码学习24:xRecurIntraChromaCodingQT()
在执行色度分量的预测时,对色度分量的11种候选模式都调用一次xRecurIntraChromaCodingQT函数,在里面完成预测,求残差,变换量化和重建,并返回失真。VoidTEncSearch::xRecurIntraChromaCodingQT(TComYuv* pcOrgYuv, TComYuv* p...原创 2018-04-22 22:50:18 · 516 阅读 · 0 评论 -
VVC/JEM代码学习23:xRecurIntraCodingLumaQT()
在执行亮度分量的预测时,在确定好最后的要执行RD cost的候选模式后,对于每个模式,都调用一遍xRecurIntraCodingLumaQT(),在此函数里面完成预测,求残差,变换量化和重建,并返回失真。VoidTEncSearch::xRecurIntraCodingLumaQT(TComYuv* pcOrgYuv, ...原创 2018-04-22 22:46:38 · 734 阅读 · 0 评论