HM编码器代码阅读(4)——一些概念
来源:互联网 发布:网红王逗逗的淘宝店铺 编辑:程序博客网 时间:2024/06/05 20:07
AMVP 即先进运动矢量预测
AMP 不对称分割
SEI 图像增强提高信息
NAL单元的前两个字节是头部(第一个字节总是0,接着是NAL类型,然后是layer标志,最后是temporal标志)
DPB 是解码图像缓存
VCL NAL包含编码数据
no-VCL NAL包含控制信息
IRAP图像必须属于时域层0,且使用帧内预测
leading Picture在解码顺序上紧跟着IRAP图像,但是输出顺序在IRAP图像之前——也叫前置图像
trailing Picture在解码和输出顺序上都在IRAP图像之后——也叫后置图像(是相对于IRAP图像而言的)
编码或者解码顺序:IRAP、leading Picture 、 trailing Picture
有三种类型的trailing Picture:TSA,STSA,TRAIL
有两种leading Picture:RADL和RASL
图像的输出顺序由poc决定,但是编码和解码顺序却不一定
VUI 视频可用信息
HRD 虚拟参考解码器
代码中经常出现的 lambda就是拉格朗日因子 “λ”
MV预测(即MVP,可以有时域或者空域上预测出)有两种新技术:
1、AMVP 先进MV预测
2、merge模式
PCM模式,该模式下编码器直接传输一个CU的像素值,而不经过预测变换等操作
CBF 就是编码块标志
运动估计(ME)
就是为当前的块(在当前的帧中)在参考图像中找到一个最佳的匹配块(使用SAD绝对误差和继续计算)。因为有多个参考帧,因此每一个参考帧都有对应的匹配块,后面会选择代价最小的那个匹配块。
MV预测(MVP)
又分为两种预测方式:Merge模式和AVMP方式。MV预测顾名思义,就是这个MV不是计算出来的,而是根据同一帧的相邻块的MV以及参考帧匹配块的MV预测出来的。
1、MV的空域预测:参考的MV来自同一帧,是当前块的相邻块的MV
2、MV的时域预测:主要针对B帧。参考的MV来自参考帧匹配块的MV,它还分为下面两种方式:
(1)当参考的MV都来自同一方向时,那么参考的MV中的一个可以由另一个来预测(注意是参考的MV中的一个,而不是当前的MV,当前的MV自然也是由它们推到出来)
(2)直接模式的MV预测,如果两个参考帧来自不同的方向,使用的就是这种方式。
2、MV的时域预测:主要针对B帧。参考的MV来自参考帧匹配块的MV,它还分为下面两种方式:
(1)当参考的MV都来自同一方向时,那么参考的MV中的一个可以由另一个来预测(注意是参考的MV中的一个,而不是当前的MV,当前的MV自然也是由它们推到出来)
(2)直接模式的MV预测,如果两个参考帧来自不同的方向,使用的就是这种方式。
加权预测
表示当前帧的像素可以通过参考帧进行加权得出,分为:
1、explicit加权预测
2、implicit加权预测
1、explicit加权预测
2、implicit加权预测
HEVC的两种MV预测技术:merge模式,AMVP模式
1、merge模式:为当前的PU(或者CU)建立一个MV候选列表,列表中存在5个候选MV,通过遍历这5个候选的MV,选出最优的那个MV,然后只需编码该MV所在的索引就行了。它建立的MV候选列表包含了空域和时域两种情况,对于B帧,还会包含组合列表。在HM的代码中,实际上空域、时域的候选MV都放在一个列表中,先存放空域的MV,再存放时域的MV(对于时域的MV需要进行缩放,而且时域MV最多只有一个),如果后续的MV数量不够5个,那么会填充零MV。对于B帧,需要建立两个临时候选列表(在HM中好像没看到!有点疑问?),然后对其中的MV进行两两组合,形成最后的候选列表。
2、AMVP模式:同样建立候选列表,但是候选MV只有2个。选出最优的预测MV之后,对MV进行差分编码,然后对MVD以及预测MV的索引进行编码即可。对于空域的MV,和merge模式类似,但是选择两个即可;时域MV只选择一个MV,然后组合起来,保留候选列表中的前两个候选MV。
2 0
- HM编码器代码阅读(4)——一些概念
- HM编码器代码阅读(21)——熵编码的概念以及在HEVC中应用
- HM编码器代码阅读
- HM编码器代码阅读(3)——一些比较容易混淆的类和结构
- HM编码器代码阅读(25)——和熵编码有关的一些类
- HM编码器代码阅读(10)——片的编码
- HM编码器代码阅读(11)——CU的初始化
- HM编码器代码阅读(12)——CU编码
- HM编码器代码阅读(18)——变换
- HM编码器代码阅读(19)——量化
- HM编码器代码阅读(22)——cabac的流程
- HM编码器代码阅读(26)——去方块滤波
- HM编码器代码阅读(28)——比特流
- HM编码器代码阅读(29)——码率控制
- HM编码器代码阅读(42)——率失真优化
- HM编码器代码阅读(46)——SAO总结
- HM编码器代码阅读(9)——片编码器的初始化
- HM编码器代码阅读(8)——其他的一些重要的变量和数据结构的说明
- 数据集成--Informatica PowerCenter
- 第一个博客
- HNOI2016模拟4.10 线性代数与逻辑 简化条件后的简单DP
- You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)
- 深入理解C++指针
- HM编码器代码阅读(4)——一些概念
- 【basename】取出路径的文件名
- JVM(4)--java堆和栈、内存分配策略
- Bellman flod SPFA算法再解
- iOS 关于信鸽推送点击推送通知的处理
- 【cp】:copy的简写 功能:复制
- 子页面获取父类页面的jQuery easyUI对象问题
- iOS 最简单的资料
- 一次配置ssh 密钥互相登陆的troubeshooting