这些帧类型用于提供更好的压缩率,我们将在下一章看到这是如何发生的。现在,我们可以想到 I 帧是昂贵的,P 帧是便宜的,最便宜的是 B 帧。B利用前后的信息进行压缩,便是指前后的参考帧中都有较大的变化。

HEVC学习,其参考代码为HM ,梳理HM代码中的各个环节,并且分阶段,弄懂其意思是跨过门槛的第一个环节。

https://img-my.csdn.net/uploads/201511/16/1447638401_2084.png

帧内预测:

7、帧内预测的详解(入口函数:xCheckRDCostIntra): 
7.1、对于亮度分量: 
7.1.1、调用estIntraPredQT。主要做模式选择的工作,负责选出对于当前PU的最优模式,如DC、planar、角度等模式。 
(1)首先对N个候选模式进行粗粒度筛选。代价函数是SATD+λ*ModeBits。选出若干个可能的候选模式。下面是相关的函数。 
(2)predIntraLumaAng。计算当前PU的预测值。 
(3)calcHAD。计算SATD代价。 
(4)xModeBitsIntra。计算当前模式所消耗的比特数。 
(5)xUpdateCandList。更新模式的代价,保持前N个模式的代价最小。 
(6)选出N个模式之后,这N个模式会进入xRecurIntraCodingQT函数继续处理。 
7.1.2、调用xRecurIntraCodingQT。根据选出的模式进行PU的分割,然后进行变换量化等工作。 
(1)这个函数会被调用两次,第一次调用直接把PU当作TU,只为算出N个模式的RD代价, 从而选出一个最优的,在这个最优的模式被选出后,再次调用这个函数,对这个最优的模式进行PU的分割。下面的是相关的函数。 
(2)xIntraCodingLumaBlk。对当前TU进行求残差,对残差进行变换、量化、反量化、反变换、重建等一系列工作,并求出失真。 
(3)xGetIntraBitsQT。求出当前模式的所有信息进行熵编码会产生的比特数。 
(4)calcRdCos。根据 xIntraCodingLumaBlk得到的失真和 xGetIntraBitsQT产生的比特数进行RD代价的计算,从而比较各个模式的优劣。 
(5)xSetIntraResultQT。保存最优模式的数据。 
7.2、对于色度分量,过程和亮度大部分一样。

帧间预测:

8.1、帧间分为两种方式,一种是默认的inter模式(入口函数xCheckRDCostInter),另一种是merge模式(入口函数xCheckRDCostMerge2Nx2N)。 
8.2、inter模式的调用流程:xCheckRDCostInter——>predInterSearch——>encodeResAndCalcRdInterCU 
8.3、merge模式的调用流程:xCheckRDCostMerge2Nx2N——>motionCompensation——>encodeResAndCalcRdInterCU 
8.4、predInterSearch进行的是ME(运动估计)和MC(运动补偿)的过程。 
8.5、motionCompensation进行的是MC的工作。因为merge进行的是MV预测,因此没有ME(运动估计)的过程。 
8.6、encodeResAndCalcRdInterCU。根据预测值,求出残差,然后进行TU的划分,然后进行变换、量化等操作以及RD代价的计算。流程图如下: 
 
8.6.1、encodeSkipFlag。对skip模式的标志进行编码。 
8.6.2、encodeMergeIndex。对MVP的索引进行编码。 
8.6.3、xEstimateResidualQT。在非skip模式的时候,进行RQT的决定(即应该把PU分割成什么样的TU)。 
8.6.4、xAddSymbolBitsInter。计算当前模式在进行熵编码时产生的比特数。 
8.6.5、xSetResidualQTData。保存当前最优的残差信息。

一、HEVC中熵编码采用的技术

1、零阶(或者k阶)哥伦布指数编码(变长编码,类似于哈夫曼编码那样),主要用于VPS、SPS、PPS、slice头部信息的编码

2、CABAC(算数编码),主要用于数据和参数的编码

265 reference code HM 学习笔记

1. 关于层次的划分,在一帧图像中,并非所有的CTU都是帧间预测或是帧内预测,而是更具计算RD的值进行选择。

在代码中,PU, TU与CU的关系是,根据树形关系来,进行组织?

2. hevc中的z顺序扫描与其他不同的地方,一般为从左到右,从上到下的顺序进行扫描,但由于在HEVC中的CU树形组织结构,基本为,在同一个树高上的CU按照这样的顺序进行。

真正的帧内预测都是以PU为划分单位开始进行的,帧内预测的首要步骤是对于左边与上边的相邻边界进行采样操作,获得采样数值,但依然需要对其进行滤波处理。

从代码中,我们是否能够看到,在每读入以帧YUV之后,我们就开始进行了编码工作,具体包括为,帧内帧间预测,转换量化,熵编码与环路滤波,接下来应该分析,拥有依赖关系的B帧,其编码顺序可能会有所调整。

帧内预测中的DC模式,planar,和一般的角度模式之间的区别。如何计算预测角度处,没有弄懂,原本的35个角度模式,是如何与我们所得出的边界采样点之间对应起来,且其返回值是什么,其实,xPredIntraAng函数的根本任务是,将PU块按照相应的角度模式进行填充,并将其放在pTrueDst形参中进行返回,以便进行RD判断运算,以此来确定,何种的角度模式是最合适的压缩模式。(可以观察这段代码,看其是如何将一个较为复杂的逻辑,使用简单的代码进行表述)

运动估计与运动补偿的区别和关系,运动估计是拥有位移向量,而运动补偿是还需要进行残差计算

帧间预测可以分为两个过程:运动估计和运动补偿。
运动估计(motion estimation,ME)——提取当前图像运动信息的过程。为当前编码块在已编码块中寻找最佳估计快,使得预测块与当前块残差尽可能的小,并计算当前块的偏移MV(motion vector)。
运动补偿(motion compensate,MC)——根据运动矢量和帧间预测方法,求得当前帧的估计值。

codec基础知识的学习相关推荐

  1. 基础知识的学习,来自十年程序员的经验分享

    本文转载自微信公众号<大飞码字> 前面分享过一篇算法学习的文章 : 不懂算法,还想进大厂?做梦吧. 虽然有点标题党,但内容还是不错的. 后来就想能不能对计算机学习方法和学习心得写个系列的文 ...

  2. 计算机网络基础知识 帮助学习网络管理的初学者快速了解网络管理的初步结构知识...

    网络分层: OSI七层协议:物理层.数据链路层.网络层.运输层.会话层.表示层.应用层 五层协议:物理层.数据链路层.网络层.运输层.应用层 HTTP四层协议:网络接口层.网际层.运输层.应用层 层 ...

  3. python基础知识培训价格_Python基础知识的学习

    看到有人推荐Jupyter notebook中markdown另存为md文件的方法,可以将文档直接导入到知乎里.自己尝试了下,效果很好.文档中为Python基础知识的学习和练习内容. 数据类型:字符串 ...

  4. 网络基础知识汇总学习

    一.网线(双绞线)连接线的制作 双绞线制作有 568A 和 568B 两个标准,日常以 568B 标准较常用. 568B 标准按颜色排序为: 1- 橙白. 2- 橙.3- 绿白.4- 蓝. 5- 蓝白 ...

  5. R语言基础知识入门学习(一)

    目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...

  6. python基础知识资料-学习Python列表的基础知识汇总

    千里之行,始于足下.要练成一双洞悉一切的眼睛,还是得先把基本功扎扎实实地学好.今天,本喵带大家仔细温习一下Python的列表.温故而知新,不亦说乎. 当然,温习的同时也要发散思考,因为有些看似无关紧要 ...

  7. 2021Golang技术基础知识及学习路线图

    导读:Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入 ...

  8. SEO 基础知识? 2023学习SEO最佳指南

    文章目录 搜索引擎优化基础知识 什么是搜索引擎优化? 为什么搜索引擎优化很重要? SEO有什么好处? 如何做搜索引擎优化 关键词研究 内容优化 网站结构优化(页面SEO) 外部链接优化 移动优化 分析 ...

  9. mysql数据库python基础知识_python学习之Mysql数据库编程基础知识介绍

    在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Pytho ...

最新文章

  1. Mybatis的工作原理,你了解过吗?
  2. 2018年十大云宕机事故盘点:主流无一幸免!
  3. myeclipse html选取包含元素的标签_HTML基础2019-1-21
  4. nodejs接收get请求参数
  5. JavaScript实现permutate With Repetitions重复排列算法(附完整源码)
  6. java lazy_Java性能优化要点之五: 队列与lazySet
  7. Actor-ES框架:Ray-Handler之ToReadHandler编写
  8. 我是如何走上前端开发这条路 并常年保持一线竞争力的
  9. 触发器_PLCDCS组态中SR触发器介绍
  10. 修改Linux系统默认编辑器
  11. java sdk设计原则_java 设计模式遵循的六大原则
  12. 详细了解 clientWidth、clientHeight、clientLeft、clientTop 以及几个常用的场景
  13. 项目建议书模板doc_简历模板大全,直接可以下载使用的简历模板
  14. android电话记录仪,零费用变身记录仪 安卓手机探索改造
  15. 【MATLAB数据分析】01数据的均值、变异度、偏度和峰度
  16. 【IKAnalyzer中文分词器详解-(1)分词逻辑】
  17. 使用麦克风和Arduino测量以dB为单位的声音/噪声水平
  18. Wireshark网络安全之传输层安全-UDP泛洪(UDP Flood)
  19. Linux查看和结束进程命令详解
  20. java实现word文档的导出

热门文章

  1. 图解windows xp Professional系统安装过程
  2. Cesium 日常问题整理
  3. 数字经济的发展需要包括区块链在内的八大技术的支撑360云储
  4. Andorid基础 Android系统层次框架结构
  5. 企业抖音账号流量提升3步法,新号也能过百万播放量
  6. Android代理模式(静态代理,动态代理,Retrofit代理模式分析)
  7. 百度技术沙龙:如何设计优良的日志分析系统
  8. 刺客列传鸿蒙记,高淳高级中学2020-2021学年高一上学期阶段测试语文试题.docx
  9. 赛门铁克和DigiCert证书有什么区别?
  10. 金蝶 EAS 编码规则 新增显示且不允许断号