
H.266/VVC
文章平均质量分 69
岳麓吹雪
现在努力,以后就可以休息
展开
-
JVET提案学习方法
跟了两年多的266提案了,从一开始的mpeg转到JVET,今天来对JVET提案的学习方法吧。JVET提案系统:http://phenix.int-evry.fr/jvet/之前有整理过一些常用网址https://blog.youkuaiyun.com/lin453701006/article/details/70858499JVET网站很简洁,个人相当喜欢,而且提案完全开放,不需要注册账号。All m...原创 2019-03-31 10:56:41 · 7084 阅读 · 1 评论 -
BMS/VTM代码学习:解码器端的环路滤波处理
今天来看下环路滤波部分的代码。下图,这里所说的环路滤波器包含了去块效应滤波器和像素自适应补偿SAO滤波器,属于环路后处理。 在解码端,解码码流生成预测帧后,会对预测帧+残差得到的重构帧进行环路滤波,环路滤波后的视频帧就是最终要输出的图像。从JEM再到BMS/VTM,大致维持了HM的代码,增加了少量内容,这里就不对比来说了。DecLib::executeLoopFiltersDec...原创 2018-07-25 14:32:17 · 2152 阅读 · 2 评论 -
BMS/VTM代码学习:CodingStructure和CodingUnit
在BMS中对CU类进行了简化,看起来好舒服啊,代码量少了很多。今天就从指定CU的提取入手,来说下BMS中的CodingStructure和CodingUnit。HM/JEM:TComDataCU先来看HM和JEM。CU信息存储在TComDataCU中,来看官方给的介绍: TComDataCU里面的确存放了大量信息,在日常使用中从这样一个cu对象就可以取到大部分所需要的信息。这里就不贴...原创 2018-07-17 20:31:32 · 2845 阅读 · 4 评论 -
H.266代码学习:xCheckRDCostMerge2Nx2N函数
今天来学习一下JEM中的xCheckRDCostMerge2Nx2N函数。之前HEVC代码学习31:xCheckRDCostMerge2Nx2N函数已经学习了HEVC中的xCheckRDCostMerge2Nx2N函数,JEM中相比HM变化不大,主要是新加入了TMVP新技术。xCheckRDCostMerge2Nx2NxCheckRDCostMerge2Nx2N是帧间Merge模式的入...原创 2018-06-14 11:12:13 · 1422 阅读 · 0 评论 -
H.266代码学习:estIntraPredLumaQT函数
之前 HEVC代码学习42:estIntraPredLumaQT函数 对HM中的estIntraPredLumaQT函数进行了学习,下面将对JEM中的该函数进行学习。estIntraPredLumaQTestIntraPredLumaQT是亮度帧内预测的入口函数,完成了亮度帧内预测最优模式的选择。JEM与HM主要区别有: 1.JEM中,亮度帧内模式预测模式数由35增加到67种,...原创 2018-05-30 17:23:24 · 1664 阅读 · 14 评论 -
H.266代码学习:xCheckRDCostIntra函数
今天来看帧内预测的入口函数xCheckRDCostIntra。JEM整体代码框架和HM是相同的,帧内预测代码框架可参考 HEVC代码学习37:帧内预测代码整体学习。xCheckRDCostIntra在xCompressCU中被调用,进行帧内预测。JEM与HM主要区别: 这一部分,相对HM没有什么重大改动。流程如下: 主要流程可以分为5个部分: 1.初始化,设置子块信息。 2....原创 2018-05-22 16:59:00 · 2369 阅读 · 0 评论 -
H.266代码学习:decompressCtu和xDecompressCU函数
今天来学习一下JEM的decompressCtu和xDecompressCU函数。之前在 H.266代码学习:decodeCtu和xDecodeCU函数 学习了的学习中提到,decodeCtu和xDecodeCU只是用来解码各种flag和系数,没有进行预测重构。在完成相关信息的解码之后,会在decompressCtu和xDecompressCU中完成的预测重构。decompressCtu该...原创 2018-05-20 17:13:22 · 814 阅读 · 0 评论 -
H.266代码学习:decodeCtu和xDecodeCU函数
之前 HEVC代码学习39:decodeCtu和xDecodeCU函数 中对HM中的CTU解码函数进行了学习,这里来学习一下JEM中的。decodeCtu该函数是解码CTU的入口函数,代码比较简单。JEM中与HM主要区别: 在JEM中,会对帧内模式的亮度和色度分量分别编码,因此解码时会首先对帧内模式的亮度CTU解码,然后对色度CTU解码。流程如下: 1.为亮度设置QP,...原创 2018-05-20 11:11:24 · 738 阅读 · 0 评论 -
新一代视频编码定名VVC(Versatile Video Coding)
https://news.itu.int/versatile-video-coding-project-starts-strongly/JVET于2018年4月10日美国圣地亚哥会议上,为新一代视频编码标准定名为Versatile Video Coding,主要目标是改进现有HEVC,提供更高的压缩性能,同时会针对新兴应用(360°全景视频和HDR)进行优化。VVC预计在2020年之前完成标准化,目翻译 2018-05-07 10:32:48 · 9602 阅读 · 0 评论 -
H.266代码学习:JEM使用方法
之前在HEVC代码学习0:HM使用+码流分析教程中详细介绍了HM使用方法,而H.266参考代码JEM已经成型,因此这里简单介绍下JEM的使用方法。阅读建议:JEM使用方法与HM类似,使用中改动在于cfg。使用过HM的同学,更换cfg后就可以轻松上手,本文就当科普了,看简介就可以了。 没有使用过HM,建议移步HEVC代码学习0:HM使用+码流分析教程,参考HM使用方法来使用JEM。...原创 2018-04-14 16:40:13 · 3578 阅读 · 14 评论 -
H.266代码学习:xIntraCodingTUBlockTM及其调用的重要函数
之前在 H.266代码学习:transformNxN函数 中提到,帧内KLT的入口函数是xIntraCodingTUBlockTM,今天就来对他进行详细学习。这里本人存在一点疑问,先写出来: 从代码中看,帧内预测中使用KLT变换,必须使用TM匹配进行预测,为什么KLT只能针对TM匹配预测进行变换?TM匹配替代了原帧内预测,原HEVC中应该是没有的,为什么JEM中没有提到新增使用TM匹配的帧内...原创 2018-04-02 11:33:16 · 879 阅读 · 0 评论 -
BMS/VTM代码学习:decompressSlice函数
今天正式转入BMS代码的学习,最近在干解码端的东西,就从解码这边开始看了。先来看decompressSlice函数。在之前的 HEVC代码学习38:decompressSlice函数 中已经讲过HM中的两个decompressSlice函数,BMS中整合为一个decompressSlice函数,变化不大。DecSlice::decompressSlice该函数比较简单,是解码一帧图像的上层...原创 2018-07-14 11:08:09 · 951 阅读 · 0 评论 -
H.266/VVC测试软件VTM
JVET于2018年4月10日美国圣地亚哥会议上,为新一代视频编码标准定名为Versatile Video Coding,正式开启了H.266/VVC的标准化进程。从H.265跟过来的同学们肯定都知道中间存在一个JEM(Joint Exploration Model ),实际就是一个过渡版本,其中的技术在H.266/VVC中并不一定会采纳,要重新评估决定。在4月的J会议上,确定了VVC的初...原创 2018-07-20 15:11:55 · 6981 阅读 · 10 评论 -
BMS2.0变换编码跟进
BMS2.0中,变换编码采纳了多核变换和二次变换。在draft中提到,采纳的多核变换只使用DCT2,DCT8,DST7三种变换核,没有给出具体的算法细节,现在来从代码中大概看下变换部分的内容。代码和JEM变动不大,JEM代码分析可见H.266代码学习:transformNxN函数和JEM一样,变换编码入口函数名称保持为transformNxN,变换尺寸JEM中就已经不是NxN了,换成tra...原创 2018-09-16 17:50:15 · 639 阅读 · 0 评论 -
VTM4.0 DC模式
我又回来了,好久没更博客了吧,没事来写下前段时间看的东西吧。DC模式很简单,理论很简单,就是用邻近像素块的均值填充当前预测块,具体不做介绍了。这里介绍下VTM中DC的改进历程。这里只介绍主要种子提案,下面给出DC相关提案号。JVET-J0020 Description of SDR video coding technology proposal by Panasonic (Panasoni...原创 2019-03-26 16:14:45 · 1343 阅读 · 1 评论 -
VTM4.0变换编码跟进
VTM4.0变换编码加入了5项新技术:• JVET-M0140 Sub-block Transform (SBT) for inter blocks• JVET-M0297: skipping high frequency coefficients in wide/high blocks• JVET-M0303: implicit MTS• JVET-M0464: UniMTS• JVE...原创 2019-04-03 20:58:29 · 1197 阅读 · 7 评论 -
VTM3.0色度帧内候选模式列表
今天来详细看下色度帧内候选模式列表,函数是getIntraChromaCandModes,代码部分很简单。MDMSVTM中使用的是HM色度候选模式,MDMS在CE中,估计是因为复杂度的问题,目前还没有采用。在L0139中给出了一个简单的复杂度分析,性能上使用MDMS相比VTM在AI下的Y BD-rate估计为-0.2%,UV估计约-1%(个人根据提案数据估计,没有具体测过)。下图是MDMS...原创 2018-12-24 16:14:09 · 1175 阅读 · 8 评论 -
H.266/VVC已采纳技术
之前总结过H.266 JEM相对于H.265/HEVC的改进,JEM可以看做H.265到H.266的过度阶段参考软件,把很多有效果的算法都收纳进去了,与目前的H.266/VVC是存在很大不同的。目前H.266/VVC已经进入到了正式的标准化阶段,参考软件改用了BMS/VTM,从3.0开始,只对VTM进行更新。以下是截止L次澳门会议H.266/VVC已采纳技术(详见L1002):• Intra...原创 2018-12-23 10:11:06 · 4529 阅读 · 3 评论 -
VTM3.0变换编码跟进
之前BMS2.0变换编码跟进总结了BMS/VTM2.0的变换编码,从3.0开始,参考软件不再使用BMS版本,只有VTM版本更新。相比VTM2.0,VTM3.0变换编码变化不大,主要采纳了三份提案,代码改动很小,性能基本没有变化,主要是修复bug和统一化。1.帧内MTS传输变换核index时,不再检测非零系数个数。——JVET L0059 SamsungVTM2.0中,帧内亮度块使用多核变换情...原创 2018-12-16 18:57:13 · 1107 阅读 · 9 评论 -
VTM3.0代码学习:estIntraPredChromaQT函数
之前VTM3.0色度帧内预测跟进中学习了VTM3.0的色度帧内预测过程,今天来看下具体函数estIntraPredChromaQT。VTM3.0色度帧内预测分成两个阶段:1.粗选:按DC、Ver、Hor、LM_L、LM_T进行预测,按SATD排序,去掉两个SATD最大的模式。2.细选:粗选剩下三个模式和Planar、LM、DM(共六种)进行RD检测选最优。其中当DM借用的亮度角度模式与前四种...原创 2018-12-13 15:21:42 · 970 阅读 · 1 评论 -
VTM3.0色度帧内预测跟进
VTM2.0先来回顾一下VTM2.0色度帧内预测。在VTM2.0中,色度帧内预测会按Plannar、Ver、Hor、DC、LM、DM(共六种)顺序进行预测,RD检测最优。其中当DM借用的亮度角度模式与前四种模式相同时,会将DM换为角度66模式。VTM3.0相比VTM2.0,由于加入了MDLM(详见L0338),色度帧内预测有所变化。在VTM3.0中,加入了MDLM,即LM增加了L...原创 2018-11-19 11:24:07 · 899 阅读 · 10 评论 -
VTM3.0代码学习:predIntraAng函数
今天来学习一下帧内预测函数predIntraAng,用于生成帧内预测图像。输入参数: const ComponentID compId //In 颜色分量 PelBuf &piPred //In/Out 预测图像 const PredictionUnit &pu //In 当前PU const bool useFilteredPredSamples ...原创 2018-11-21 11:36:13 · 1387 阅读 · 0 评论 -
BMS/VTM代码学习:xCompressCU
找工作基本结束,收心回来看266了,从xCompressCU开始吧。在初学者阶段写过HEVC代码学习11:xCompressCU函数,当时实际看的一知半解,作为参考吧。BMS/VTM中xCompressCU代码精简了很多,看起来容易多了,主要流程为:1.初始化:设置可用模式、上下文模型等。2.尝试帧间、帧内各种可用预测模式,当遍历完所有可用模式后,调用xCheckModeSplit进行划分,...原创 2018-09-26 15:48:15 · 3848 阅读 · 6 评论 -
VTM2.0算法跟进
7月份JVET卢布尔雅那会议上确定了VTM2.0版本,来跟进下采纳的技术:JVET-K1002采纳的技术有: • Intra prediction – 67 intra mode with wide angles mode extension(宽角度模式是针对矩形块提出的) – Position dependent intra prediction combination (...原创 2018-09-13 22:44:00 · 1335 阅读 · 2 评论 -
H.266代码学习:AMT相关代码学习
AMT理论部分见http://blog.youkuaiyun.com/lin453701006/article/details/79026631JEM中,AMT分为EMT和EMTFAST两种,在cfg中可以设定。CommonDef.h中定义了AMT的重要参数,默认AMT最大可用块尺寸为64。变换函数xTrMxN_EMTxTrMxN_EMT更详细的分析见 H.266代码学习:xT,xTrMx...原创 2018-01-16 10:23:20 · 1832 阅读 · 0 评论 -
H.266代码学习:MDNSST相关代码初步学习
之前已经对MDNSST理论知识进行了学习,这里不再赘述,来看代码部分。 http://blog.youkuaiyun.com/lin453701006/article/details/79030862MDNSST是在主变换后进行处理,在transformNxN函数中,可以看到,经过xT主变换后会进行NSST变换,这里只分析其中MDNSST相关代码,为了便于阅读,省略其他代码。MDNSST主要流程如下: 1.原创 2018-01-24 10:52:32 · 1053 阅读 · 0 评论 -
H.266代码学习:xEncodeCU函数
之前在HEVC代码学习35:xEncodeCU函数中介绍过xEncodeCU函数,今天来看JEM中的xEncodeCU,其中难点在于QTBT编码结构。HM中使用compressCtu对每个CTU进行划分并预测,然后使用encodeCtu对每个CTU进行编码。JEM中也是如此,会在xEncodeCU,迭代完成CU各种信息的编码。所以在这里,当前的CTU已经进行了划分和预测,如果要看CU的划分和预...原创 2018-03-29 22:56:10 · 1260 阅读 · 9 评论 -
H.266变换编码:模式依赖的不可分二次变换MDNSST
MDNSST代码学习:http://blog.youkuaiyun.com/lin453701006/article/details/79148082在JEM中,变化编码的改进可以分为两个阶段,如下图。 第一阶段是使用自适应多核变换AMT(http://blog.youkuaiyun.com/lin453701006/article/details/79026631)或信号决定变换SDT(http://blog原创 2018-01-11 11:40:10 · 1389 阅读 · 2 评论 -
H.266帧间预测:局部光照补偿(LIC)
在HEVC中,已经采用了全局光照补偿加权预测。JEM中加入了局部光照补偿(LIC),是一种基于光照变换的线性模型,使用一个放缩系数a和一个偏移量b。能够自适应的根据每个帧间模式的CU选择是否使用。 Pneigh=a∗Pref+b→a,bP_{neigh}=a*P_{ref}+b→a,b 其中PneighP_{neigh}为当前图像中当前CU的邻近采样点,PrefP_{ref}为参考图像中对应的邻原创 2018-01-03 21:44:01 · 1976 阅读 · 6 评论 -
H.266帧间预测:仿射运动预测
在HEVC中,只有平动模型被用于运动补偿预测。然而在真实世界中,有各种各样的运动,比如放大/缩小,旋转,透视运动和其他非规则运动。JEM中简化的仿射运动补偿预测在JEM中,使用了一个简化的仿射运动补偿预测。如下图所示,一个块的仿射运动域由两个运动矢量表示。 一个块的运动矢量域(MVF)表示如下: 其中(v0x,v0y)(v_{0x},v_{0y})是左上中心控制点的运动矢量,(v1x,v1y原创 2018-01-04 11:41:32 · 5307 阅读 · 0 评论 -
H.266帧间预测:重叠块运动补偿(OBMC)
重叠块运动补偿(OBMC)曾在H.263中被使用过。目前HEVC采用的是基于块的运动估计和补偿技术,当运动矢量不准确、物体不是简单的平移运动或一个分块中包含多个运动物体时,就容易出现方块效应。采用OBMC可以对块边缘进行处理,可以减少方块效应。不像H.263,在JEM中可以使用CU级语法来控制OBMC的开关。JEM中,OBMC被用于除CU的右侧和底部边缘的所有运动补偿MC块边缘。另外,OBMC不仅被原创 2018-01-03 16:17:34 · 4811 阅读 · 0 评论 -
H.266帧内预测滤波器改进
4抽头帧内插值滤波器HEVC帧内预测中,角度预测模式生成预测块时使用了2抽头线性插值滤波器。 JEM中,采用了两种4抽头帧内插值滤波器:尺寸小于等于64的块使用三次插值滤波器,大于64的块使用高斯插值滤波器。滤波器的系数由块尺寸决定。 边缘预测滤波器在HEVC帧内预测中,垂直或水平模式生成帧内预测块之后,最左侧一列或最上方一行会进一步调整,以保持块边界的连续性。 JEM中,这一处理被扩展到了一些原创 2017-12-27 15:36:06 · 1435 阅读 · 0 评论 -
H.266帧间预测:自适应运动矢量残差分辨率和更高运动矢量存储精度
在HEVC中,运动矢量残差(MVD)单位由use_integer_mv_flag控制,当flag为0,MVD以1/4像素亮度采样为单位编码传输。在JEM中,引入了一个局部自适应运动矢量分辨率(LAMVR),MVD分辨率可以在CU级别进行控制,每个有非零MVD分量的CU都有MVD分辨率flag,控制MVD以1/4、整数或4的倍数的亮度采样为单位进行编码。注意:以下为简略,所有的MVD分辨率为亮度分量M原创 2018-01-02 21:55:46 · 1991 阅读 · 0 评论 -
H.266 JEM相对于HEVC HM的改进
参考文献:JEM algorithm description editing目前JEM最新版本为JEM7.0,相对于HEVC的改进如下:1.块结构: 四叉树+二叉树块结构,支持更大CTU(最大可为256x256,CTC为128x128)——http://blog.youkuaiyun.com/lin453701006/article/details/527537242.帧内预测 65个帧内预测...原创 2017-12-18 11:47:26 · 5484 阅读 · 2 评论 -
H.266帧间预测:亚CU级运动预测
JEM使用了QTBT结构,没有了CU、PU、TU界限,一个CU每个预测方向最多有一组运动参数。在编码器端通过将大块CU划分为子CU并派生得到子CU运动信息,可以有两种亚CU级别的运动矢量预测模式: 1.可选时域运动矢量预测(Alternative temporal motion vector prediction,ATMVP)—— 并置参考图像中,ATMVP方法允许每个CU可以从多个小于当前CU原创 2018-01-02 19:13:54 · 2678 阅读 · 1 评论 -
H.266色度帧内预测
HEVC中,色度分量支持5种帧内预测模式:Planar、垂直模式、水平模式、DC模式以及对应亮度分量的预测模式。如果对应亮度分量的预测模式为前四种之一,则替换为角度预测模式34。H.266中,色度分量在原HEVC的5种模式的基础上,增加了6种跨组件线性模型(cross-component linear model,CCLM)模式。色度帧内预测模式的候选列表包括三部分: 1. CCLM模式 2.原创 2017-12-26 21:07:12 · 1744 阅读 · 2 评论 -
H.266帧内角度预测模式
HEVC中,帧内预测包括Planar模式、DC模式和33种角度预测模式。H.266中,沿用了Planar和DC模式,将角度预测模式增加到了65种,帧内预测模式达到了67种。角度预测更加密集,对所有块、亮度色度分量都可用。 为了容纳新增的角度预测模式,JEM使用了6个最可能模式Most Probable Modes(MPM),主要包括了两方面的技术:(1) 6个MPM的推导。(2) 6个MPM和no原创 2017-12-26 15:02:23 · 4051 阅读 · 3 评论 -
H.266变换编码:自适应多核变换AMT
AMT代码学习:http://blog.youkuaiyun.com/lin453701006/article/details/79065885在JEM中,变化编码的改进可以分为两个阶段,如下图。 第一阶段是使用自适应多核变换AMT或信号决定变换SDT(http://blog.youkuaiyun.com/lin453701006/article/details/79035202)的主变换,两者通过率失真优化进原创 2018-01-10 17:47:11 · 3165 阅读 · 2 评论 -
H.266代码学习:SDT相关代码初步学习
之前在H.266变换编码:信号决定变换SDT中已经对SDT的理论进行了学习,下面来初步看下代码,之后会进行详细学习。SDT分为两部分: 1.训练KLT 2.对残差使用KLT第一部分训练KLT,帧内和帧间是独立处理的。帧内KLT对于帧内KLT,其训练部分是在xIntraCodingTUBlockTM中完成的。 xIntraCodingTUBlockTM详见https://b...原创 2018-01-25 11:31:19 · 931 阅读 · 0 评论 -
H.266变换编码:信号决定变换SDT
SDT代码学习:http://blog.youkuaiyun.com/lin453701006/article/details/79158700在JEM中,变化编码的改进可以分为两个阶段,如下图。 第一阶段是使用自适应多核变换AMT(http://blog.youkuaiyun.com/lin453701006/article/details/79026631)或信号决定变换SDT的主变换,两者通过率失真优化进...原创 2018-01-11 16:46:11 · 1508 阅读 · 0 评论