
H.266/VVC视频编码
文章平均质量分 87
H.266/VVC是下一代视频编码标准,将于2020年4月制定完成,本专栏以记录个人视频编解码的学习过程为目的,希望与更多优秀的人共同探讨研究。
海洋之心。
视频编码学习
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AVS3代码学习1:HPM6.0框架
文章目录0 运行程序1 上层函数2 帧内预测3 变换量化4 环路滤波5 熵编码0 运行程序1 上层函数1、app_encoder.c文件下的main()函数;2、enc.c文件下的enc_pic()函数;3、enc_mode.c文件下的enc_mode_analyze_lcu()函数;4、enc_mode.c文件下的mode_coding_tree()函数;5、enc_mode.c文...原创 2020-05-12 14:50:58 · 3730 阅读 · 8 评论 -
H.266/VVC代码学习60:CCALF解码端过程
CCALF是把亮度的信息进行维纳滤波加到色度上,以补充色度平坦的信息。于JVET的O次会议提出,Q次会议接收。首先我们先回顾一下ALF的算法,然后进行CCALF的学习。1 输入输出输入:1、亮度ALF之前的重建亮度像素;2、色度ALF之后的滤波色度像素;3、色度CTU位置及CTU宽高;4、7个滤波系数值。输出:色度CCALF滤波后的最终像素值。2 步骤1、从色度像素位置对应到亮...原创 2020-03-16 17:12:53 · 2478 阅读 · 1 评论 -
H.266/VVC技术学习59:量化
DQ原创 2020-03-09 09:51:57 · 2830 阅读 · 1 评论 -
H.266/VVC技术学习58:色度残差联合编码(JCCR)
VVC支持色度残差工具的联合编码(JCCR)。JCCR模式的使用由TU级别标志tu_joint_cbcr_residual_flag指示,所选模式由色度CBF隐式指示。如果TU的色度CBF之一或全部等于1,则存在标记tu_joint_cbcr_residual_flag。在PPS和Slice标头中,为JCCR模式发送色度QP偏移值,以区别于为常规色度残差发出的通常色度QP偏移值。编码模式。这些...翻译 2020-03-09 09:51:35 · 1540 阅读 · 0 评论 -
H.266/VVC技术学习57:视频属性杂谈(2)
前一期视频属性杂谈 我们讨论了视频的构成要素,也知道了显示在屏幕上的视频,是像素值是由yuv按序排列形成并通过SDL播放。这一期我们向上层进发,了解一下.yuv是怎么形成的,进而了解一下我们电脑里常有的.mp4、.avi等等视频文件是如何播放出来的。1 yuv文件的形成终于涉及到专业相关了哈哈哈哈哈。看了上一篇杂谈最后的计算环节,有没有感觉一个yuv太大了呢?一个高清电影就占了1T硬盘?事实上...原创 2020-03-04 15:10:30 · 1465 阅读 · 0 评论 -
H.266/VVC代码学习56:率失真优化
躲避疫情,在家也学点东西吧,解锁一波新地图——VVC的RDO。所谓率失真优化:在给定编码比特率的情况下,如何使失真最小:J(λ) = min[ D + λR ]。其中:率:信息数量的多少(比特率R);失真:接收短信号与源信号的差异程度(失真D);λ:拉格朗日参数,只与量化参数有关;几何意义:一条斜率为λ的直线,与率失真曲线的切点即最优解。目的:得到性价比最高的编码参数,如划分方式、预测...原创 2020-02-06 21:19:58 · 3398 阅读 · 4 评论 -
H.266/VVC技术学习55:熵编码
文章目录1 CABAC引擎1.1 HEVC的编解码引擎1.2 VVC的编解码引擎2 变换系数熵编解码2.1 普通变换系数的残差编码2.2 变换跳过系数的残差编码3 系数编码上下文模型1 CABAC引擎1.1 HEVC的编解码引擎HEVC中的CABAC引擎使用基于表的概率转换过程,(在64个不同的代表性概率状态之间)。在HEVC中,在计算新的range范围之前,将表示编码引擎状态的范围ivl...翻译 2019-12-24 21:49:42 · 2529 阅读 · 1 评论 -
H.266/VVC技术学习54:划分
文章目录1 图片被划分为CTU2 图片被划分为SubPicture、Slice、Tile2.1 Tile、SLice、SubPicture的概念2.2 光栅扫描分区模式2.3 矩形分区模式3 CTU以树形继续向下划分3.1 HEVC的划分方式3.2 VVC的划分方式3.3 编解码方式3.4 示例3.5 高层参数及限制3.6 帧内的色度独立划分4 CU在图片边缘的划分5 CU冗余划分的限制6 虚拟管...翻译 2019-12-23 22:06:20 · 3046 阅读 · 2 评论 -
H.266/VVC代码学习46:自适应环路整形器(LMCS)
在VVC中,在环路滤波器之前,添加了一种称为带有色度缩放的亮度映射(LMCS)的编码工具,作为新的处理块。LMCS有两个主要组成部分:1)基于自适应分段线性模型的亮度分量的环路映射;2)对于色度分量,应用依赖于亮度的色度残差缩放。1 LMCS体系结构下图从解码器的角度显示了LMCS体系结构。1、图中的浅蓝色方框表示在映射域中的处理位置:包括反量化,反变换,亮度帧内预测以及亮度预测与亮度...翻译 2019-11-19 15:00:15 · 2398 阅读 · 0 评论 -
H.266/VVC代码学习61:VTM中deblocking源码阅读
/* The copyright in this software is being made available under the BSD * License, included below. This software may be subject to other third party * and contributor rights, including patent rights...原创 2020-04-07 12:00:54 · 1683 阅读 · 4 评论 -
H.266/VVC代码学习43:VLC编解码
在ALF的系数上纠结了两个周,不了解它为什么没有传flag却可以从解码端直接获得,终于终于在VLCReader.cpp中抓到了它,也许这对RBSP的了解也有很大的益处吧,下面走进变长编码的世界。1 简介VLC即变长编码。原理是用短码来编频率高的信息来达到少比特的目的。我们知道视频编码中多数内容都是通过CABAC进行编解码的,对多数flag和变换系数熵编码都使用,并具有较高的编码效率。但以零阶...原创 2019-11-05 20:36:55 · 1150 阅读 · 2 评论 -
H.266/VVC代码学习41:VTM6.0变换算法小结(译自O2002)
感谢博主翻译,原博客链接在这里。高频调零VTM6中允许最大为64x64的大尺寸变换,适用于更高分辨率的视频处理,例如1080P和4K序列。对于大小(宽度或高度,或宽度和高度)等于64的变换块,将高频变换系数归零,仅保留低频系数。例如,对于一个尺寸为MxN的变换块,其中M是宽度,N是高度,当M等于64,仅保留左边32列的变换系数。类似地,当N等于64,只保留上边的32行变换系数。如果大尺寸块使用...转载 2019-10-20 21:55:38 · 1515 阅读 · 0 评论 -
H.266/VVC技术学习34:视频属性杂谈
文章目录1 位、比特、字节的概念1.1 位(bit)1.2 字节(Byte)1.3 其他1.4 和视频相关2 分辨率、像素的概念2.1 分辨率2.2 像素2.3 像素值3 YCbCr通道的4:2:0格式4 yuv文件的存储方式5 计算实例1 位、比特、字节的概念1.1 位(bit)我们常说的比特,其实就是位。这是计算机中的最小数据单位,一位二进制的数,说白了就是一个0或者1。1.2 字节(...原创 2019-07-19 11:37:19 · 1818 阅读 · 0 评论 -
H.266/VVC代码学习32:VTM5.0解码端最上层函数
解码部分的研究不像编码端那样需要精雕细琢,但如果想研究一个内容划分或选择模式等的最终结果是怎样,那么应该从解码端入手。下面让我们来学习解码端的框架及最上层的三个函数。文章目录1 main()2 DecApp::decode()3 DecLib::decode()1 main()输出时间等信息,调用pcDecApp->decode()开始解码过程。int main(int argc,...原创 2019-07-06 16:22:08 · 2432 阅读 · 2 评论 -
H.266/VVC代码学习27:视频失真测度:SSD、MSE、SAD、SATD、PSNR
1 定义SSD:平方误差和 —— Sum of Squared DifferenceMSE:均方误差 —— Mean Squared ErrorSAD:绝对误差和 —— Sum of Absolute DifferenceSATD:平方误差和 —— Sum of Absolute Transformed DifferencePSNR:峰值信噪比 —— Peak Signal to Noi...原创 2019-05-05 20:53:55 · 2758 阅读 · 4 评论 -
H.266/VVC代码学习25:宽角度模式(getWideAngle)
在前面xPredIntraAng函数中我们学习到了,在亮度预测中,有67种角度预测方向。对于正方形块来说,这67种方向足够描述其纹理特性。然而,当CU的宽高不相等时,只有67种模式对于矩形块来说,有一些纹理不能被表述出来,而还有一些角度没有被囊括。宽角度模式就是基于这种问题而提出的,对于帧内的亮度分量宽高比不为1的情况下块生效。...原创 2019-04-29 20:58:03 · 1523 阅读 · 4 评论 -
H.266/VVC代码学习26:VTM5.0中IntraPrediction类及其相应全局函数
所有帧内预测的函数都已学习过,今天我们来关注一下跟C++跟相关的东西:IntraPrediction类的定义。原创 2019-05-02 17:06:36 · 2717 阅读 · 2 评论 -
H.266/VVC代码学习24:常见的熵编码函数(encodeBin、encodeBinEP、encodeBinsEP)
1 较重要的熵编码的函数: virtual void encodeBin ( unsigned bin, unsigned ctxId ) = 0; virtual void encodeBinEP ( unsigned bin ) = 0; virtual void enco...原创 2019-04-25 17:42:38 · 2640 阅读 · 3 评论 -
H.266/VVC代码学习23:帧内参考像素及滤波(xFillReferenceSamples,xFilterReferenceSamples,useFilteredIntraRefSamples)
在进行帧内预测前,首先要获取参考像素,并对参考像素进行滤波。原创 2019-04-24 17:18:20 · 1459 阅读 · 3 评论 -
H.266/VVC代码学习22:帧内预测的初始化(initIntraPatternChType)
进行帧内预测之前,首先要初始化,主要进行两个步骤:1.相邻参考像素的获取2.参考像素的滤波理论部分见万帅书P118-120代码框架如下:void IntraPrediction::initIntraPatternChType(const CodingUnit &cu, const CompArea &area, const bool bFilterRefSamples)...原创 2019-04-24 11:12:03 · 1387 阅读 · 10 评论 -
H.266/VVC代码学习21:帧内角度预测的实现 / 近对角模式的PDPC(xPredIntraAng)
xPredIntraAng函数的作用是对任意大小的块和任意模式,如何将参考像素的值根据其模式的角度填充进每一个像素。下图是basketball drill的一个16*16的块,其预测模式为10(偏斜上方),得到如下预测结果:水平模式18可以简单地通过投影的方式得到预测值。但由上图可见,10这个模式并不能简单地通过投影得到像素值。如果单纯看代码,会感觉到这是一个不讲道理的填充方式。这个函数的...原创 2019-04-20 17:29:14 · 2500 阅读 · 3 评论 -
H.266/VVC代码学习20:角度预测入口 / 特殊模式的PDPC技术(predIntraAng)
PDPC技术是通过VTM4.0代码如下:void IntraPrediction::predIntraAng( const ComponentID compId, PelBuf &piPred, const PredictionUnit &pu, const bool useFilteredPredSamples ){ /****************** 初始化 ***...原创 2019-04-14 16:26:29 · 1785 阅读 · 6 评论 -
H.266/VVC代码学习19:特殊的角度模式:DC模式(xPredIntraDc、xGetPredValDc)
1 简介DC模式适用于大面积平坦区域,其预测值由其左侧和(或)上侧参考像素值得到2 计算3 代码void IntraPrediction::xPredIntraDc( const CPelBuf &pSrc, PelBuf &pDst, const ChannelType channelType, const bool enableBoundaryFilter ){ ...原创 2019-04-14 10:15:56 · 1112 阅读 · 0 评论 -
H.266/VVC代码学习18:特殊的角度模式:planar模式(xPredIntraPlanar)
planar是模式标号为0的模式,当块内像素是渐变情况时,通常采用planar模式。1 简介对应情况:在像素值缓慢变化的区域,线性:它使用水平和垂直两个线性滤波器,将两者平均值作为当前像素的预测值。2 计算3 代码void IntraPrediction::xPredIntraPlanar( const CPelBuf &pSrc, PelBuf &pDst, cons...原创 2019-04-13 17:37:10 · 4265 阅读 · 4 评论 -
H.266/VVC代码学习17:帧内亮度预测的编解码(intra_luma_pred_modes)
先放结论:原创 2019-04-07 10:08:04 · 2133 阅读 · 4 评论 -
H.266/VVC代码学习16:帧内色度预测的编解码(intra_chroma_pred_modes)
先放结论:如果需要进一步研究请继续一、编码:CABACWriter调用的函数及结构如下CABACWriter::intra_chroma_pred_mode —intra_chroma_lmc_mode ——unary_max_symbol —getIntraChromaCandModes1 入口函数void CABACWriter::intra_chroma_pred_...原创 2019-04-07 09:51:06 · 2241 阅读 · 0 评论 -
H.266/VVC代码学习15:LM模式代码(xGetLumaRecPixels、predIntraChromaLM)
入口函数xIntraCodingTUBlock进入LM模式的代码如下: //===== get prediction signal 计算预测值 ===== if( compID != COMPONENT_Y && PU::isLMCMode( uiChFinalMode ) )//2.LM模式预测,得到预测角度 { { xGet...原创 2019-03-28 11:40:09 · 2335 阅读 · 0 评论 -
H.266/VVC代码学习14:色度列表及DM模式代码(getFinalIntraMode、getIntraChromaCandModes)
DM即derived mode原创 2019-03-25 22:36:03 · 1413 阅读 · 0 评论 -
H.266/VVC代码学习13:VTM4.0中的CU层操作(compressCtu 、 xCompressCU)
从H.266/VVC代码学习3:VTM4.0中的CTU层操作(encodeCtus)我们了解到了视频最基本的操作块为CTU,现在我们进一步学习CU层的操作。有两个十分重要的函数:1 compressCtu:是对encodeCtu中拿到的单个ctu进行操作,是进行CU划分预测等处理的入口。内部一共会调用两次 xCompressCU ,一次是对亮度进行处理,一次是对色度进行处理。可见compre...原创 2019-03-22 11:37:44 · 5875 阅读 · 37 评论 -
H.266/VVC代码学习10:xRecurIntraCodingLumaQT函数
初始化后分为两种情况:1.可以继续划分,2.不可继续划分1.可以继续划分时,根据cost的大小进行TU的划分(递归调用多次划分),设置cbf,获取上下文模型并保存代价2.不可继续划分时,设置变换的模式(6种,决定是否开启及开启几个),对可以进行变换的模式进行后续残差计算、变换量化和反变换重建等操作,即xIntraCodingTUBlock函数(DCT2与其余5种不同),更新率失真信息。最终获...原创 2019-03-20 16:40:38 · 1119 阅读 · 0 评论 -
H.266/VVC代码学习9:xIntraCodingTUBlock函数
这个函数将确定的帧内预测模式进行残差计算、变换量化和反变换重建等操作。具体含义可见代码中注释:#if JVET_M0464_UNI_MTSvoid IntraSearch::xIntraCodingTUBlock(TransformUnit &tu, const ComponentID &compID, const bool &checkCrossCPrediction...原创 2019-03-18 17:09:26 · 950 阅读 · 1 评论 -
H.266/VVC代码学习8:xRecurIntraChromaCodingQT函数
对色度模式列表中的模式都调用一次,进行当前PU的色度分量的一系列编码工作,并求得失真#if JVET_M0102_INTRA_SUBPARTITIONSChromaCbfs IntraSearch::xRecurIntraChromaCodingQT( CodingStructure &cs, Partitioner& partitioner, const double bes...原创 2019-03-18 16:40:05 · 1500 阅读 · 0 评论 -
H.266/VVC代码学习7:VTM4.0帧内色度预测代码(estIntraPredChromaQT)
#if JVET_M0102_INTRA_SUBPARTITIONSvoid IntraSearch::estIntraPredChromaQT( CodingUnit &cu, Partitioner &partitioner, const double maxCostAllowed )#elsevoid IntraSearch::estIntraPredChromaQT(...原创 2019-03-14 20:45:03 · 1091 阅读 · 0 评论 -
H.266/VVC代码学习6:VTM4.0中lambda与QP的关系
在cfg中可以得到QP值,本文档视为亮度QP,记作QP(Y);在cfg中还可以得到CbQpOffset和 CrQpOffset,供后续计算色度QP,记作QP©;亮度lambda和色度lambda由以上两种QP算得,记作lambda(Y)和lambda©。一、设置亮度lambda(Y)亮度lambda的计算公式为:lambda(Y) = 0.57 * 2^(x/3)其中x = QP(Y)+...原创 2019-03-10 20:19:49 · 4545 阅读 · 2 评论 -
H.266/VVC代码学习5:VTM4.0帧内亮度预测代码(estIntraPredLumaQT)
#if JVET_M0102_INTRA_SUBPARTITIONS//ISP技术void IntraSearch::estIntraPredLumaQT( CodingUnit &cu, Partitioner &partitioner, const double bestCostSoFar )#elsevoid IntraSearch::estIntraPredLumaQ...原创 2019-03-10 18:20:32 · 3330 阅读 · 5 评论 -
H.266/VVC代码学习4:VTM代码整体结构及最上层函数
最近在做一些较上层的内容,从老师和师兄师姐的博客里学到了很多,对VTM代码有了进一步的理解。VTM4.0代码整体结构如下,并会后面分别介绍几个主要函数的作用。EncSlice::encodeCtus大体操作:以CTU为单位,对划分后的内容进行熵编码。每个slice为一帧。一帧中对所有CTU(128*128)都进行编码(for循环每个CTU,分别调用compressCtu函数),具体来说主要...原创 2019-03-02 16:37:26 · 7899 阅读 · 4 评论 -
H.266/VVC代码学习3:VTM4.0中的CTU层操作(encodeCtus)
由于要研究比特数的相关内容,本周阅读了encodeCtus。学习笔记如下:void EncSlice::encodeCtus( Picture* pcPic, const bool bCompressEntireSlice, const bool bFastDeltaQP, uint32_t startCtuTsAddr, uint32_t boundingCtuTsAddr, EncLib* ...原创 2019-02-23 16:35:55 · 4308 阅读 · 8 评论 -
VVC运行代码前的简要流程
期末考完,回归科研。由于一个半月没接触实验室工作,刚一回归只感受到手生。忙活一上午和半个下午终于找回感觉,特此留下一篇简要流程,以备后面遇到相同的境遇。一、运行代码方面1.找到VTM3.0(最新版本)的工程压缩包,在project文件夹下重命名以防同名工程,解压缩。2.project文件夹下使用cmake-gui.exe处理工程得到build,打开NextSoftware.sln进入代码。...原创 2019-01-20 16:58:27 · 3271 阅读 · 7 评论 -
H.266/VVC代码学习1:帧内预测框架(20190528更新VTM5.0)
本人是西电研一的一名普通学生,现在在通院信科所多媒体通信实验室,主要研究方向是视频编码标准H.266/VVC。如很多刚上研同学一样,入学以来经历了迷茫、对科研方向无从下手等问题。两个月来,在理清视频编码结构后,终于渐渐理解并敢于修改VVC的代码。并准备在博客这个平台上记录自己的学习,希望可以与更优秀的人交流讨论。第一次写微博,准备多说些。我是在2017年4月了解的视频编码,当时的计网老师也就是我...原创 2018-11-18 14:13:36 · 9283 阅读 · 17 评论 -
H.266/VVC代码学习36:VTM6.0帧间预测主要方式及编码方法
刚一开学就转向inter了,心里还是有点小激动的,又要从零基础开始了!!!本篇博客主要讲一下帧间预测的大体预测方式及主要预测方式的编码方法。...原创 2019-08-28 21:14:25 · 3295 阅读 · 4 评论