H.265
编码视界
fangliangsong@foxmail.com
https://zhuanlan.zhihu.com/c_157245427
展开
-
条件编译在JM、HM、JEM中的应用
在制定视频编码标准的过程中,不断会有新的提案出来以期替换原来的技术,但原来的技术又不能立即删掉,于是条件编译在JM、HM、JEM中被广泛地使用。只要有代码的地方,就可以使用条件编译。条件编译既可以出现在头文件,又可以出现在源文件;既可以出现在类定义体、函数体中,又可以出现在类定义体、函数体外。需要注意的一点是,函数(成员函数)声明的地方用了条件编译,函数(成员)定义的地方也相应地要用条件编译。原创 2016-11-14 15:56:01 · 1256 阅读 · 0 评论 -
HEVC码率控制: Unified R-Q Model
这几天在看HM-6.2的Unified R-Q Model码率控制算法的代码,对应的提案是JCTVC-H0213,对应的文章是“Pixel-Wise Unified Rate-Quantization Model for Multi-Level Rate Control”。该模型使用二次模型计算QP。本文主要阐述其中两点:编码缓冲区、QP计算。 经典算法JVT-GO12只有一个编码缓冲区,本文要描原创 2017-04-05 22:10:23 · 2273 阅读 · 0 评论 -
HM Deblocking代码阅读
Deblocking的相关代码在TComLoopFilter.h和TComLoopFilter.cpp中。让我比较惊讶的是,TComLoopFilter.h中只声明了一个类TComLoopFilter,用一个类搞定deblocking。 还有一个与deblocking有关的一个类放在TypeDef.h中,代码如下:/// parameters for deblocking filtertyped原创 2017-04-10 22:45:19 · 1004 阅读 · 0 评论 -
H.265 Recommendation 7.4.2.3 在RBSP中封装SODB(非标准部分)
这个条款不属于这份文档的标准部分。本条款描述在RBSP中SODB的封装形式和在一个NAL单元中封装一个RBSP emulation_prevention_three_byte的使用,其目的如下: —为了防止NAL单元的起始码出现竞争,同时允许在一个NAL单元中出现任意的SODB。 —支持在一个NAL单元中通过在RBSP尾部搜索rbsp_stop_one_bit鉴别出SODB尾。 —使得在相同的翻译 2017-02-01 22:12:23 · 642 阅读 · 0 评论 -
HM TEncCu相关说明
class TComYuv的注释是:general YUV buffer class。该注释不清楚,其实TComYuv就是用于存放一个CU的相关数据。例如,在class TEncCu中的各个depth的CU的数据:/// CU encoder classclass TEncCu{private: TComDataCU** m_ppcBestCU; ///< B原创 2017-04-12 17:33:10 · 1145 阅读 · 0 评论 -
关于浮点QP
总所周知,QP是整数。然而HM/JEM均支持浮点QP(floating point QP),而且HM中从HM-1.0就开始支持了,这是为什么呢?先来看配置文件的参数说明: 从上图可以看出,配置文件中的QP被程序读进来的时候是一个浮点数Double TAppEncCfg::m_fQP。读进来之后在函数TAppEncCfg::parseCfg中对这个浮点QP进行如下处理: // allocate s原创 2017-04-20 23:09:01 · 1355 阅读 · 0 评论 -
HM中AMP模式的快速算法
从HM4.0开始,有AMP模式的快速算法的标签:#define AMP_ENC_SPEEDUP 1 ///< encoder only speed-up by AMP mode skipping#if AMP_ENC_SPEEDUP#define AMP_MRG原创 2017-04-20 14:54:34 · 2332 阅读 · 0 评论 -
评率控论文“Lambda Domain Optimal Bit Allocation Algorithm for High Efficiency Video Coding“
该文章出自李斌博士和他师弟,原率控提案是JCTVC-M0036。该文章推导了最优比特分配时的两个结论,由于两个目标方程有问题,导致第二个结论明显错误。应该说他们的推导基于一个文章中已说明的近似,以及两个文章中未说明的近似,并不是optimal。 这篇文章给简单的方法找理论依据的方法,很有借鉴意义,类似地推导optimal hierarchical Bit allocation可参考哈工大的文章“R原创 2017-04-14 16:59:14 · 1410 阅读 · 0 评论 -
x265代码阅读:码率控制(二)
头文件x265.h中的码率控制参数: struct { /* Explicit mode of rate-control, necessary for API users. It must * be one of the X265_RC_METHODS enum values. */ int rateControlMode;原创 2017-04-24 15:42:35 · 3392 阅读 · 0 评论 -
论率控的目标方程
在李斌博士的文章“λ Domain Rate Control Algorithm for High Efficiency Video Coding”中,将率控的目标方程定义为和率失真优化的目标方程: 上面的方程与率失真优化的目标方程完全相同,凭直觉,你不会认为率控和率失真优化是一回事。率控的首要目标是要让实际码率精确地达到目标码率,而不是小于或等于目标码率;如果实际码率小于目标码率很多,率控精度下原创 2017-05-04 15:59:35 · 960 阅读 · 1 评论 -
x265文献阅读:CU模式判决
首先,x265支持六种预设(preset):placebo, veryslow, slow, medium, faster and ultrafast,编码速度依次加快,性能也逐次递减。placebo的中文翻译是“安慰剂”,表示这个预设虽然编码性能不错,但由于编码复杂度高而不实用,只是安慰剂。 下面是VCIP的论文“Analysis and Optimization of x265 Encoder原创 2017-04-25 11:05:16 · 1622 阅读 · 0 评论 -
HM代码阅读:帧内预测(一)
本文的代码均是TEncSearch::estIntraPredLumaQT函数或被它调用的函数中的代码。在TEncSearch::estIntraPredLumaQT函数中,首先确定RMD(Rough Mode Decision)候选。RMD的候选模式的个数由以下两个数组确定:const UChar g_aucIntraModeNumFast_UseMPM[MAX_CU_DEPTH] ={ 3原创 2017-04-26 11:27:20 · 3135 阅读 · 0 评论 -
"HEVC Complexity and Implementation Analysis"阅读笔记
1、编码时间随AI、RA、LB的顺序依次递增。之所以LB比RA的编码时间更长,是因为通测配置下LB相对于RA的参数帧数量翻倍了。RA的list0参考前面两帧,list1参考后面两帧;LB的list0和list1分别参考前面相同的四帧;LP只使用list0。 2、HM-8.0在RA/LB配置下编码1080P的序列,达到实时需要一两千倍的加速。 3、相同QP下,AI配置的解码时间是LB/RA的两倍。原创 2017-05-22 15:07:10 · 751 阅读 · 0 评论 -
x265与HM编码性能对比
x265配置:QP设为22、27、32、37,其余设置均使用x265-1.8默认配置 HM配置:HM-16.7,LD B,四个QP点:22、27、32、37 测试序列:5个1080p的序列,帧数从240到600不等 下面是x265相比于HM的BD-rate表: 如果按Y、U、V比例为6:1:1的比例计算总体的BD-rate,则平均loss为28.8%,接近30%的编码性能损失。原创 2017-04-27 20:14:23 · 4529 阅读 · 9 评论 -
x265代码阅读:码率控制(一)
x265中码率控制算法貌似与x264的码率控制算法基本相同,基本上是经验性的,与ITU-T/MPEG各类标准推荐的码率控制算法均不同。 x265的率控应该只是帧级率控,虽然有与CU相关的率控参数,但其实那是率失真优化技术,并非LCU级率控。x265支持三种率控模式:/* rate tolerance method */typedef enum{ X265_RC_ABR, // aver原创 2017-04-23 20:55:23 · 8995 阅读 · 5 评论 -
讲座”视频编解码技术简介:过去、现在及将来“
2016年7月,大疆公司视频编码技术专家郑萧桢博士在电子科大“EE论坛”做了题为“视频编解码技术简介:过去、现在及将来”的讲座。听过很多视频编码领域的学术讲座,第一次听到这么细致的讲座,受益匪浅。郑萧桢博士对H.264、HEVC、AVS2标准中的技术如数家珍。还对已经开始制定的下一代视频编码标准H.266进行了介绍。讲座后要到了PPT,后面的学习中经常打开来查阅。原创 2016-11-16 21:56:13 · 3765 阅读 · 27 评论 -
JEM software ticket45:Console output error of nQP when LCU level rate control is enabled
上星期提交了一处HM和JEM都有的bug,维护HM的人没给我回复,维护JEM的人已经采纳了我的建议。 bug报告的网址:https://hevc.hhi.fraunhofer.de/trac/jem/ticket/45#no1 bug报告的内容:原创 2017-03-15 15:14:45 · 1250 阅读 · 4 评论 -
HRD释疑
码率控制生成的码流须符合HRD(Hypothetical Reference Decoder )的要求。H.265/HEVC Recommendation的Annex C部分规定HEVC的HRD,HRD是视频编码标准的一部分。 HDR有三个关键的参数:R、B、F。R是信道传输速率,B是解码缓冲区的容量,F是初始解码缓冲区充盈度(initial decoder buffer fullness)。F在原创 2017-04-09 22:16:16 · 2937 阅读 · 1 评论 -
帧内预测二维线性插值滤波器的实现分析(不含乘除法)
在PC平台下,乘除法的运算时间远高于加减法;在FPGA平台下,做乘除法需要专门的乘法器和除法器。线性滤波器中,滤波器系数乘以信号,存在乘法。本文以HM中的TComPrediction::xPredIntraPlanar函数为例,介绍如何实现没有乘除法的线性滤波器。TComPrediction::xPredIntraPlanar实现的是帧内预测中的planar模式,planar模式使用水平和垂直原创 2016-11-21 14:45:46 · 1083 阅读 · 0 评论 -
HM/JEM检查当前CU的模式是否是最优模式
如果当前模式的CU的代价小于之前的最优模式,则做处理。/** check whether current try is the best with identifying the depth of current try * \param rpcBestCU * \param rpcTempCU * \param uiDepth */#if JVET_C0024_QTBT原创 2016-11-29 11:31:45 · 1265 阅读 · 0 评论 -
HM/JEM划分模式的率失真代价的计算
TEncCu用于编码一个CTU,通过成员TComRdCost* m_pcRdCost进行率失真判决。计算模式划分的率失真代价的函数如下:Double TComRdCost::calcRdCost( UInt uiBits, Distortion uiDistortion, Bool bFlag, DFunc eDFunc ){ Double dRdCost = 0.0;原创 2016-11-29 11:26:51 · 2492 阅读 · 0 评论 -
JEM七种预测模式对应的主要函数
Void xCheckRDCostMerge2Nx2N( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU DEBUG_STRING_FN_DECLARE(sDebug), Bool *earlyDetectionSkipMode );#if VCEG_AZ07_FRUC_MERGE Void xCheckRDCostMerge2Nx2NFRUC原创 2016-12-08 10:53:32 · 1689 阅读 · 0 评论 -
HM/JEM CTU级码率控制相关代码
CTU级码率控制相关的代码主要在以下几个函数: Double getLCUTargetBpp(SliceType eSliceType); Double getLCUEstLambdaAndQP(Double bpp, Int clipPicQP, Int *estQP); Double getLCUEstLambda( Double bpp ); Int get原创 2016-12-02 14:49:04 · 1795 阅读 · 0 评论 -
JEM Inter/Merge/Affine的MVP candidates的建立
inter/merge/affine的MVP candidates的建立分别用以下几个函数:/** Constructs a list of candidates for AMVP * \param uiPartIdx * \param uiPartAddr * \param eRefPicList * \param iRefIdx * \param pInfo */Void TCom原创 2016-12-07 17:19:26 · 1207 阅读 · 0 评论 -
HM码率统计
HM编码完所有帧后,输出到stdout的数据格式: SUMMARY ——————————————————– Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR 500 a 1722.4448 40.8944 43.4868 42.9115 41原创 2016-12-14 22:39:37 · 1776 阅读 · 5 评论 -
关于HM/JEM Merge Candidates
TComDataCU::getInterMergeCandidates函数用于得到Merge模式的候选列表。Merge模式的候选列表最多为5个,且默认为5个: software-manual可以设置参数:MaxNumMergeCand 5 Specifies the maximum number of merge candidates to use. CommonDef.h中的最大值:stati原创 2016-12-08 16:47:56 · 857 阅读 · 0 评论 -
HM Inter/Merge模式的TMVP的计算
HM16.9支持的预测类型有两种:MODE_INTER和MODE_INTRA。 /// supported prediction type enum PredMode { MODE_INTER = 0, ///< inter-prediction mode MODE_INTRA = 1, ///< in原创 2016-12-07 16:34:15 · 1797 阅读 · 0 评论 -
HM工程组织
在HM参考软件文件夹下有一文件.\doc\mainpage.h,这个文件的功能的介绍: This document is automatically generated from the source code and special documentation tags. For more details on the used documentation system see h原创 2017-01-11 20:55:18 · 1447 阅读 · 0 评论 -
HEVC参考软件准则(提案JCTVC-H1001)
以下归则强制适用于所有软件实现的工作。不符合这些规则的改变将不被软件协调者接收。1 版权许可1.1 版权/许可状态版权放弃声明不应该被改变。每当增加一个文件,如下所示的相同的版权放弃声明,应该包含在文件的开头。/* The copyright in this software is being made available under the BSD * License, i翻译 2017-01-10 22:17:15 · 1151 阅读 · 0 评论 -
HEVC部分通测序列特点
原创 2017-01-12 22:26:27 · 665 阅读 · 0 评论 -
提案JCTVC-F386介绍
在函数HM的Void TEncSlice::setUpLambda(TComSlice* slice, const Double dLambda, Int iQP)中实现原创 2016-12-06 15:48:23 · 1460 阅读 · 0 评论 -
HM中语法元素二进制化的相关代码分析
H.265语法元素二进制化的相关代码分析H.265的语法元素的二进制化的编码主要有:截断莱斯编码(TR)、k-阶指数哥伦布编码、定长编码(FL)。值得注意的是,除了这三种编码方案外,H.265标准给part_mode、intra_chroma_pred_mode、inter_pred_idc、cu_qp_delta_abs、coeff_abs_level_remaining这五个语法元素提供了专门的原创 2017-01-26 23:21:55 · 932 阅读 · 0 评论 -
我的会议论文和毕业论文
我的会议论文 比特分配的优劣直接决定了编码性能和码率控制的精度,但因为它相对来说比较固定,反而在率控中发表的文章比较少,这篇文章就是研究HEVC的GOP级比特分配。应该说,率失真模型是第二位的,但这方面可玩的东西很多,主要的率控方面的研究均是在这方面。我投在IEEE BMSB 2017会议上的论文A New GOP Level Bit Allocation Method for HEVC Rat原创 2017-06-27 10:29:10 · 1561 阅读 · 2 评论