
HEVC
文章平均质量分 61
岳麓吹雪
现在努力,以后就可以休息
展开
-
HEVC量化死区
最近才接触到量化死区,来学习一下这个技术。原创 2019-11-25 10:33:25 · 2514 阅读 · 3 评论 -
HEVC代码学习43:默认量化矩阵
量化矩阵的原理是对应不同位置的系数使用不同的量化系步长进行量化,人眼对高频不敏感,可以对低频分量进行小步长量化,对高频分量进行小步长量化,在保证主观质量的情况下,提高压缩效率。HEVC支持量化矩阵,但是默认不启用。HEVC的量化矩阵与TU大小相同,分为4x4,8x8,16x16,32x32 4种尺寸。HEVC可以使用来ing中国量化矩阵...原创 2019-10-31 10:20:13 · 3501 阅读 · 0 评论 -
HEVC代码学习27:calcRdCost函数
之前在率失真代价TComRdCost类中提到,计算率失真代价的函数为:calcRdCost,下面就来学习一下。calcRdCost工作流程如下: 1、根据输入的失真类型eDFunc来设置λ。 2、根据公式计算RD Cost。其中标记一下,有一点疑问,在DF_SAD下的代价为什么多除了65536.0,猜想应该是之前多乘了一个65536.0,在这除掉了。待看完其它代码估计会有答案,留此疑问后边看懂后原创 2017-09-30 20:53:39 · 2878 阅读 · 2 评论 -
HEVC代码学习26:率失真代价类TComRdCost
HEVC代码学习25:xDecompressCU函数原创 2017-09-28 15:39:31 · 3267 阅读 · 0 评论 -
HEVC代码学习29:getDistPart函数
getDistPart的功能是根据输入的当前图像和原始图像的信息来计算失真,分为失真参数初始化和计算失真两部分。计算失真是通过函数指针FpDistFunc DistFunc来实现的,DistFunc会根据cDtParam调用对应失真计算函数来计算失真。//计算失真Distortion TComRdCost::getDistPart( Int bitDepth, Pel* piCur, Int iC原创 2017-10-02 19:50:02 · 1443 阅读 · 0 评论 -
HEVC率失真优化
参考:新一代高效视频编码H 265/HEVC:原理、标准与实现率失真优化是视频编码的重要内容,是保证编码器编码效率的主要手段。什么是率失真优化为了在有限信道内传输、存储数据量巨大的视频,需要采用有损压缩方式对视频进行压缩,但在降低码率的同时也引入了失真。因此需要在码率和失真间进行权衡。视频编码的主要目的就是保证一定视频质量的条件下尽可能的减少编码比特率,或保证一定编码比特率的条原创 2017-10-01 10:36:56 · 4860 阅读 · 11 评论 -
HEVC及其参考测试软件的发展历程
背景:HEVC是由ITU-T视频编码专家组和ISO/IEC运动图像专家组联合制定的视频编码标准,并开发了参考软件HM (HEVC Test Model)。专家组成立了Joint Collaborative Team on Video Coding (JCT-VC)视频编码联合小组,开展HEVC 的标准制定工作,并继续进行了Format Range Extensions (RExt),Sca原创 2016-10-17 15:37:32 · 3654 阅读 · 4 评论 -
HEVC帧内/帧间预测:Cross-Component Prediction (CCP)
Cross-Component Prediction (CCP)跨组件预测是通过消除颜色组件的相关性,在保证颜色高保真度的同时,实现对视频内容的高效压缩,被HEVC RExt采纳。其核心思想是使用亮度组件来预测色度组件,进一步消除亮度和色度组件之间的相关性,提高编码效率。在CCP中,亮度残差没有任何变化,只对色度残差进行了处理。一、线性预测模型:令原始亮度组件为x,原始色度信号为y原创 2016-10-18 14:34:43 · 2592 阅读 · 2 评论 -
HEVC网络适配层:NALU网络适配单元
在H.265/HEVC中,采用了与H.264/AVC中类似的视频编码层(VCL)和网络适配层(NAL)的双层架构,以适应不同的网络环境和视频应用。不同的网络环境具有不同的特性,比如最大传输单元可能不同,因此不同网络环境下中传输的压缩数据,应根据视频数据特性采用特定的分组策略,划分为大小不同的分组。网络适配层NAL的主要任务就是对视频压缩后的数据进行划分和封装,并进行必要的标识,使其更好的适原创 2016-10-20 14:40:48 · 2099 阅读 · 1 评论 -
HEVC代码学习24:encodeResAndCalcRdInterCU函数
推荐http://blog.youkuaiyun.com/nb_vol_1/article/details/51190324在http://blog.youkuaiyun.com/lin453701006/article/details/72403936学习中,我们提到xCheckRDCostInter调用了encodeResAndCalcRdInterCU来计算残差和RD cost。今天来学习encodeResAndCa原创 2017-08-16 16:14:31 · 3142 阅读 · 5 评论 -
帧内、帧间预测编码效率比较
在之前的各种文献中都看到过这样的结论:帧间预测的编码增益要高于帧内预测。可是从来没看过详细解释,今天来总结一下。首先来看原理: 帧内预测——基于同一帧内已编码块预测,构造预测块,计算与当前块的残差,对残差、预测模式等信息进行编码。其主要去除的是空域冗余。 帧间预测——基于一个或多个已编码帧预测,构造预测块,计算与当前块的残差,对残差、预测模式、运动矢量、参考图像索引等信息进行编码。其主要去除的是原创 2017-08-22 16:30:21 · 10950 阅读 · 0 评论 -
HEVC代码学习28:setLambda函数
在之前的TComRdCost类学习中,我们提到,要计算率失真代价,需要三个量:失真D、拉格朗日因子λ和码率R。下面就来看一下λ的设置函数。 在TComRdCost类中定义了setLambda函数,来对λ值进行设置。//设置λVoid TComRdCost::setLambda( Double dLambda, const BitDepths &bitDepths ){ m_dLambda原创 2017-10-02 11:03:24 · 1995 阅读 · 0 评论 -
HEVC代码学习2:TAppEncTop::encode函数
HM中TAppEncTop::encode函数学习原创 2016-10-11 22:11:50 · 5438 阅读 · 2 评论 -
HEVC代码学习15:AMVP相关函数
在HEVC中,使用了AMVP技术,利用空域和时域上的运动向量的相关性,为当前PU建立候选预测MV(MVP)列表。 xCheckBestMVP的功能就是在已知MV的情况下,将当前的MVP和之前最优的MVP比较,选择最优MVP。//已知MV的情况下,找最优MVPVoid TEncSearch::xCheckBestMVP ( TComDataCU* pcCU, RefPicList eRefPicL原创 2017-06-02 10:55:25 · 4467 阅读 · 3 评论 -
HEVC代码学习42:estIntraPredLumaQT函数
在之前的 HEVC代码学习37:帧内预测代码整体学习 中已经提到,estIntraPredLumaQT是亮度帧内预测的入口函数,下面将对该函数进行详细学习。estIntraPredLumaQT中完成了亮度分量的帧内预测,其主要流程如下: 一、初始化各种参数。 二、为了减少率失真优化次数,HEVC中默认使用帧内快速搜索算法,将分粗选和细选两个阶段进行。如果不使用快速搜索,将对所有帧内预测模式...原创 2018-05-30 11:43:35 · 4293 阅读 · 12 评论 -
HEVC代码学习0:HM使用+码流分析教程
第一次面对如此浩大的工程代码,真的不知如何下手。拜读HEVC_CJL大神的博客,受益匪浅。以下将记录个人学习过程,有不对的地方请谅解指正,十分感谢。更新·2016.10.10:对HM使用方法进行了描述。·2018.01.23:对原HM使用方法进行了较大更新,增加了HM下载和码流分析部分。·2018.03.05:增加HM常见问题及解决方法。·2018.03.28:增加针对编...原创 2020-09-21 11:08:35 · 39241 阅读 · 149 评论 -
HEVC代码学习31:xCheckRDCostMerge2Nx2N函数
推荐阅读 http://blog.youkuaiyun.com/nb_vol_1/article/details/51163625 http://blog.youkuaiyun.com/guoyaoyao1990/article/details/35339717今天来学习HM中merge部分的代码,其入口函数为xCheckRDCostMerge2Nx2N。这里需要注意的是,merge是借用空间邻近块的MV作为原创 2017-11-16 17:55:41 · 2805 阅读 · 2 评论 -
HEVC代码学习11:xCompressCU函数
今天接着之前进行了全局最小CU分块,来看进行CU分块的xCompressCU函数。xCompressCU主要作用是完成块划分,确定最优预测模式。主要可以分为: 1.帧间预测xCheckRDCostInter、xCheckRDCostMerge2Nx2N 2.帧内预测xCheckRDCostIntra 3.PCM模式xCheckIntraPCM 这里PCM模式是一种无损编码模式,该模式下原创 2017-05-17 16:08:34 · 6339 阅读 · 4 评论 -
HEVC代码学习34:compressSlice函数
compressSlice,是Slice层编码的入口函数,主要完成的功能就是Slice层编码参数的初始化,其中会调用compressCtu(其中会调用xCompressCU,对CU进行划分)和encodeCtu(其中对调用xEncodeCU,对CU进行编码)。主要工作流程: 1.计算Slice的起始CTU和边界CTU。 2.初始化率失真参数:bit、RD cost、失真。 3.初始化Sbac熵原创 2017-11-30 11:15:13 · 2943 阅读 · 0 评论 -
HEVC代码学习35:xEncodeCU函数
xEncodeCU是由encodeCtu调用,其作用是从CTU开始迭代对每个CU进行编码。注意,xEncodeCU是在最优分块已经划分完成后进行编码时使用的,在xCompressCU中没有使用。xEncodeCU会调用以下函数来完成各部分的编码: encodeSplitFlag编码块是否划分 encodeSkipFlag编码是否是skip模式 encodeMergeIndex如果是ski...原创 2017-12-01 17:21:58 · 2842 阅读 · 14 评论 -
HEVC帧间预测
经过一个月奋斗,终于7门考试考完了,继续来学习HEVC。 之前由于并没有用到帧间预测的东西,没有对帧间预测进行学习,现在来具体学习一下。帧间预测是利用视频时间域的相关性,使用邻近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。目前主要采用基于块的运动补偿技术,原理是为当前图像的每个像素块在之前已编码图像中寻找一个最佳匹配块,即运动估计。用于预测的图像称为参考图像,参考块到当前像原创 2017-01-12 10:54:05 · 17696 阅读 · 2 评论 -
HEVC代码学习32:getInterMergeCandidates函数
今天来看xCheckRDCostMerge2Nx2N函数中提到的重要函数getInterMergeCandidates,其功能是创建merge候选列表,这里重点来看空域候选列表的建立。首先来回忆一下merge的空域候选列表。merge候选列表长度为5,空域最多提供4个候选,按顺序依次遍历A1-B1-B0-A0-B2,选出4个候选填入候选列表。注意,空域最终可能提供的候选数量可能少于4个。 下面来看原创 2017-11-19 11:24:30 · 1662 阅读 · 0 评论 -
HEVC代码学习30:fillMvpCand函数
fillMvpCand函数的功能就是为AMVP建立候选列表。AMVP的理论见: http://blog.youkuaiyun.com/lin453701006/article/details/54340405fillMvpCand主要流程如下,主要来看空域候选列表: 一、建立空域候选列表: 1. 按顺序搜索左侧块A0-A1-scaled A0-scaled A1,只要有一个MV存在,写入候选列表,跳出进行原创 2017-11-01 22:16:00 · 2142 阅读 · 2 评论 -
HEVC编码结构:Slice和Tile
HEVC编码结构中的Slice、Tile结构概念及两者关系原创 2016-10-07 11:32:05 · 13888 阅读 · 3 评论 -
HEVC代码学习8:xMotionEstimation函数
之前学习了xPatternSearchFracDIF函数,今天来学习其上层的xMotionEstimation函数,从字面就可以理解,功能是进行运动估计。xMotionEstimation主要工作流程是:进行一些初始化,设置搜索范围,然后通过整像素搜索得到一个最优点,将这个最优点作为起点进行亚像素搜索,最终得到以1/4精度为单位的MV。Void TEncSearch::xMotionEstimati原创 2017-04-27 17:01:51 · 6596 阅读 · 8 评论 -
视频编码会议常用网址
MPEG http://phenix.int-evry.fr/mpeg/index.php 需要账号密码,密码3个月变更一次。2015.10 之后的提案在JVET 网站上就都能够下载到了。 input提案号为m+数字,如m38889。 output提案号为w+数字,如w16737。JVET(研究下一代视频编码的机构) JVET Note: http://wftp3.itu.int/av-ar原创 2017-04-27 15:51:46 · 4344 阅读 · 4 评论 -
HEVC代码学习9:getInterMergeCandidates函数
今天需要统计Merge的候选列表信息,来看下getInterMergeCandidates函数,用于建立merge候选列表。 其主要工作流程: 1.建立空间列表,如果达到最大候选数,退出。 2.空间列表不能填满候选列表,建立时域列表补足,如果达到最大候选数,退出。 3.空间+时域列表不能填满候选列表,建立组合列表补足,如果达到最大候选数,退出。 4.若依然为填满,则使用零MV补足。//!原创 2017-05-08 21:35:56 · 1896 阅读 · 0 评论 -
HEVC代码学习10:实现全局使用最小CU划分
今天算是来进行一次练手,实现全局使用最小CU和PU划分进行编码。HEVC中,支持CU最大尺寸为64x64,最小为16x16,在代码中在xCompressCU中进行CU的划分。首先输入的CU为最大尺寸,由cfg文件中的MaxCUWidth和MaxCUHeight指定,计算各种划分模式的cost,通过xCheckBestMode选择最优模式进行划分,迭代处理,直到达到最大深度结束。 因此,我们可以从x原创 2017-05-16 09:40:12 · 3244 阅读 · 11 评论 -
HEVC代码学习7:xPatternSearchFracDIF函数
上一次我们学习了运动估计中使用的插值滤波器函数,这次来看具体的分像素差值函数xPatternSearchFracDIF。在运动估计中,首先进行整像素的搜索,确定一个最优MV,然后在进行分像素搜索,得到以1/4为单位的MV。其分像素搜索通过xPatternSearchFracDIF函数实现,代码如下,主要功能是对Y分量进行亚像素搜索。首先进行1/2像素插值,然后进行1/4像素插值,最终得到以1/4为单原创 2017-04-13 17:25:57 · 2891 阅读 · 5 评论 -
HEVC代码学习6:filterHor和filterVer函数
帧间预测分为运动估计ME和运动补偿MV,其中用到了MV的亚像素搜索,需要使用filterHor和filterVer进行插值。 这里使用的是HM16,在之前版本中分为filterHorLuma、filterHorChroma和filterHorLuma、filterVerChroma。在HM16已经将亮度和色度插值滤波器整合。 filterHor和filterVer代码如下:/** *原创 2017-04-12 23:13:49 · 2778 阅读 · 0 评论 -
HEVC代码学习5:cross-component prediction代码实现2
在之前的学习中,主要对CCP的整体代码思路进行了学习,下面将再进一步研究一下其相关的函数以及其重要参数。原创 2016-10-26 15:33:44 · 2268 阅读 · 4 评论 -
HEVC代码学习1:TAppEncoder的main函数
这里使用的是HM16.6。TAppEncoder是编码器工程,完成视频序列的编码。下图为TAppEncoder的函数调用关系。运行时,首先调用encmain.cpp中的main函数int main(int argc, char* argv[]){ TAppEncTop cTAppEncTop; // print information fp原创 2016-10-10 14:47:42 · 5704 阅读 · 24 评论 -
HEVC概念缩写对照表
学习HEVC过程中,遇到了好多概念的缩写,容易忘记,下面整理一下以便之后阅读时查看。里面有的中文为自行翻译,可能不准确还请指正。原创 2016-10-12 16:20:31 · 3127 阅读 · 0 评论 -
HEVC代码学习3:TEncTop::encode函数
在之前学习的TAppEncTop::encode函数中,通过调用了TEncTop::encode对视频帧进行编码,下面将对TEncTop::encode进行学习。按照HM代码理解来看,TEncTop::encode主要作用是为GOP压缩之前做一些准备工作,包括创建当前图像缓冲区、设定QP是否自适应、根据码率控制模式来确定是否需要先初始化GOP,然后调用TEncGop::compress原创 2016-10-13 09:59:35 · 4796 阅读 · 11 评论 -
HEVC代码学习16:运动矢量MV的数据结构
今天学习MV的数据结构,进一步理解MV的存储、处理等各种操作。TComMv先来看基本的MV类TComMv。可以看到MV是以水平分量m_iHor和垂直分量m_iVer的形式存储的,类中包含了设置、获取、加减、比较等函数。class TComMv{private: //MV水平和垂直分量 Short m_iHor; ///< horizontal component of motio原创 2017-06-12 15:51:17 · 5354 阅读 · 31 评论 -
HEVC代码学习17:m_filteredBlockTmp[]和m_filteredBlock[][]
在之前的运动估计的亚像素搜索中,提到了插值之后的数据存放在m_filteredBlock[][]中,最近在学习中,发现其中涉及很多问题,不容易研究明白一些,记录一下。基本结构m_filteredBlockTmp[]大小为4,m_filteredBlock[][]大小为4x4,类型为TComYuv。//LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS = 4原创 2017-06-13 17:13:34 · 2188 阅读 · 0 评论 -
HEVC代码学习21:xTZSearch函数
今天来继续学习运动估计的整像素搜索,来看下xTZSearch函数。昨天已经说了xTZSearch是Diamond搜索的入口函数,其中调用了重要函数xTZSearchHelp和xTZ8PointDiamondSearch 。其主要工作流程如下: 1、使用宏TZ_SEARCH_CONFIGURATION,配置相关的搜索参数,初始化搜索范围、跨度、像素值和SAD。 2、假设中值预测MV为最优点。 3原创 2017-08-11 16:36:09 · 3181 阅读 · 0 评论 -
HEVC代码学习23:xTZ8PointDiamondSearch函数
今天来学习xTZ8PointDiamondSearch函数。 xTZ8PointDiamondSearch是xTZSearch调用的一个重要函数,实现的是菱形模板搜索。xTZ8PointDiamondSearch的菱形模板如下图: 理论可以见之前帧间预测的运动估计-搜索算法部分,这里不再赘述。 http://blog.youkuaiyun.com/lin453701006/article/details/原创 2017-08-14 23:21:19 · 1701 阅读 · 0 评论 -
HEVC代码学习22:xTZSearchHelp函数
xTZSearchHelp是整像素搜索中的重要函数,在xTZSearch中多次被调用,今天就来学习一下这个函数。xTZSearchHelp的主要功能是,计算输入搜索点__inline Void TEncSearch::xTZSearchHelp( TComPattern* pcPatternKey, IntTZSearchStruct& rcStruct, const Int iSearchX, c原创 2017-08-13 20:53:24 · 1898 阅读 · 1 评论 -
HEVC代码学习18:运动估计和运动补偿总结
经过了这段时间对帧间预测部分代码的学习,算是大体上了解了其工作原理。只看理论不看代码,体会不深刻,在看了代码后,有了一种恍然大悟的感觉,很多算法实现和看原理时理解的不一样。下面来整理一下之前写的博客,总结一下运动估计和运动补偿具体的代码实现思路,主要谈一下代码处理的思路,运动估计运动估计实际就是当前块在参考图像中搜索找到匹配块的处理过程。在实际代码中入口函数是xMotionEstima...原创 2017-06-25 10:29:00 · 11988 阅读 · 15 评论