版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、HM学习笔记来自博客HM学习笔记一来自博客编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对 文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(HM学习笔记一来自博客)的 内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的 源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以 下为HM学习笔记一来自博客的全部内容。HEV涔习的整体结构及_些基本概7个工程1 TAppCommon2o TAppDecoder3o TAppEncoder4O
2、 TIi bCommon5o TLi bDecoder6. TLibEncoder7. TLibVideolOT代表Test* (这一个的理解可能有误),App代表Application*,表明该工程主要包含 些应用函数Lib代表Library,表明该工程主要包含一些库函数 Common表明该工程 包含的一些函数是编码器和解码器共用的, Decoder1表明该工程包含的函数是解码器使用 的,而Encoder5表明该工程包含的函数是编码器使用的.VideolO工程主要是实现对YUV 文件的读写操作。编码器和解码器的主函数分别在enema i no epp和decma ino epp中,相信光看源
3、文件名都能看 岀来了。(1)类的命名:(2)变量的命名:(3)函数的命名:HEVC学习(三)帧内预测系列之一fiI IReferenceSamples函数(填补当前PU相关的样本值)一Void TComPattern: :fiI IReferenceSamples图像2 (左上角为4个像素点,如无强调则以块为单位计算长度等?)PS:此处有两块图像:重建的YUV的大图像仁相对应的专用于预测的PU及其周边的参考样点图Pel* piRoiTemp指向重建Yuv图像1的位置(临时使用,指向可随意变动)Pel* piRoiOrigin指向重建Yuv图像1对应于当前PU所在位置的首地址(对当前PU固 定)
4、Int* pi Adi Temp图像2的感兴趣位置(变动的,用于赋值)iPicStride重建YUV图像1的宽iNumlntraNeighbor指示PU周边可用邻块数uiWidth= uiCuWidth*2+1图像 2 的宽,(Height二 uiCuHeight*2+1图像 2 的高uiCuWidth 图像2的CurrentPU部分的宽,uiCuHeight图像2的CurrentPU部分的高iTota I Samples总样点数iTota IUn i ts 以4x4块为单位的块数i UnitSize块的大小主要功能是在真正进行帧内预测之前,使用重建后的Yuv图像对当前PU(Predict U
5、nit预测单 元)的相邻样点进行赋值,为接下来进行的角度预测提供参考样点值.PS:关于一个PU的相邻点,以及它的相邻点的可用性如何判断的问题,是一个细节问题,并不 会影响我们对这个函数实现功能的理解.PS: reference samp I es are part i a I I y avai I able部分没看,也看不懂每个4x4块里的4个样点分别被赋值为对应位置的重建Yuv的样点值?(4*4块中不是16 个样点吗)HEVC(B)CU、PU地址计算方法光栅扫描,即从左往右,由上往下,先扫描完一行,再移至下一行起始位置继续扫描。H.264HM学习笔记一来自博客使用的主要就是光栅扫描顺序。HE
6、VC里同样也有光栅扫描顺序,但是,由于它对CU采用的是递归划分的方式,如果仍是采用光栅扫描顺序,对CU的寻址会很不方便。HEVC定义了 Z扫描顺序Z扫描是针对一个CU来说的,它是用于递归扫描CU的分割。定位一幅图像中的一个CU (或 其分割)大致是这么个过程,首先,由于CU的尺寸的最大值是已知的.会根据这个定位到该CU 左上角相对于图像左上角的位置,即得到它的坐标,接着,才是对当前块进行z扫描,单位是 4x4块,换句话说,Z扫描地址是对一个CU有效的,不能直接使用这个地址来确定它在图像 中的位置。HEVC学习(五)帧内预测系列之三initAdiPattern函数(预测的前期准备.得到PU的过程
7、)Void TComPattern:initAd iPattern获得 i Num I ntraNe i ghbor x bNe i ghborF I ags 等将参数传入(一)中的 f i I I ReferenceSamp I es函数赋值对周围样点进行3抽头的平滑滤波 主要功能有三个HM学习笔记来自博客(D检测当前PU的相邻样点包括左上、上、右上、左、左下邻域样点值的可用性,或者说检 查这些点是否存在;(2)参考样点的替换过程;(二)中已介绍过(3)相邻样点即参考样点的平滑滤波。Bool bNeighborFlags4 * MAX NUM_SPU_W + 1指示4个方向上相邻样点值的可
8、用性piAdiBuf二 p i Ad i TempiNumUnitsI nCu = uiCuWidth / iUnitSize; CurrentPU 宽(以块为单位,暂时理解 4*4块宽4)订 ota I Un its=(i NumUn i ts I nCu 2)+ 1左下、左、上、右上、1 左上角isAboveAvai lable函数计算返回左边可用邻块数Int iBufSize =uiCuHeight2 + uiCuWidth2 +1;-一滤波缓存区的大小,相邻块的个数Ulnt uiWH= uiWidth * uiHeight个缓存区中的元素个数,图像2中块的总总个数piAdi Buf指向
9、滤波前的参考样点的首地址piFi IterBuf将piAdiBuf所有参考样点拷贝到此区域一一经过滤波后所得值保存在piFi IterBufN中 存放滤波后样点值的区域piFilterBufl 经过滤波的样点值(与piAdiBuf相差uiWH,因为滤波前后的值顺序存放) 存放顺序:piAdiBuf大小 uiWH-piFi IterBufl uiWHpiFi IteredBuf2uiWHpiFi IterBuf iBufSize (周边样本块数,只有这些才参与滤波)一piFi IterBufNPS: piAdiBuf、piFi IterBufl 按照图像顺序存放,piFi IterBuf、piF
10、i IterBufN 将周边样点 顺序存放,方便滤波Q:获取当前PU左上角LT,右上角RT以及左下角LB以4x4块为单位的Zorder?不懂HM学习笔记一来自博客HEVC参考软件代码总结1. 编码器程序从TAppEncodern工程中的enema in. epp文件开始的,此文件中包含程序运行 的入口函数” main”,在main函数中主要做了编码器对象的创建、分析配置文件,初始化配置 参数,和编码器最重要的功能encode”。2. 在” encode函数中,主要实现了读取YUV文件的数据、初始化工具对象例如:GOPEncoder、SI iceEncoderv CUEncder。在此函数里,还
11、包括一个encode函数,调用CompressGOP函数来具体执行编码任务。3. 在CompressGOP函数中,完成了以下的功能:InitGOP将文件的码流分成若干GOP以便后续程序能够顺利执行。二,Ini tEncSI ice 创建编码的 Slice。三,在此函数中,还包括preCompressSI ice和CompressSI ice两个函数,前者的作用是 选择不同的Iamuda进行编码(编码是调用了 CompressCU函数,后续介绍),后者是在最好的 I amuda下进行编码。四.循环滤波五,(爛编码等,还没看).4. 在xCompressCU函数中(CompressCU函数的主体也
12、是调用xComprssCU函数),先进行帧间预 测xCheckRDCostMerge2Nx2N, xCheckRDCost Inter等。在做完帧间预测后进行阵内预测,这是 调用的函数是xCheckRDCostIntra,在xCompressCU函数的后续部分,还递归调用自身以实现 对每个CU的编码。变换编码在encodeCoeff中实现,量化在xCheckIntraPCM完成。5o xCheckRDCostIntra函数,主要完成帧内预测的任务,对亮度的预测使用estIntraPredQT, 对色度使用 est IntraPredChromaQTo6。estlntraPredQT函数,在思想
13、对亮度的处理和色度的处理是一样的,所以只介绍亮度的处理函数。在estIntraPredQT函数中,主要完成了 RDCost的选择,在其中predIntraLumaAng函HM学习笔记一来自博客数实现了方向的预测;calcHAD函数计算了 SATD; xModeBitsIntra函数计算编码的码率;xUpdateCandList更新了最好的RDCost所使用的模式。HEVC学习(六)帧内预测系列之四实现亮度分量帧内预测的主函数的大体框架estlntraPredQT函数(实现亮度分量帧内预测) pred I ntraLumaAng 函数一 Void TComPredi ct i on: predI
14、ntraLumaAngHEVCGt)帧内预测的最为重要的函数之一pred IntraLumaAng1. getPreditorPtr 函数-一Irrt* TComPattern: : getPredictorPtrI nt ptrSrc获得指向参考样点首地址的指针数组m_auclntraFi Iter里面存放了不同PU尺寸下滤波的阈值getAdiOrgBuf函数 返回指向未经滤波的参考样点的首地址sw二2* iWidth + 1? (ptrSrc指向的是当前PU的左上邻点,故加上2*iWidth指向下一行即当前PU的左邻点,加1指向当前PU的首地址)PS:若帧内预测模式满足滤波的条件,则返回的
15、指针要加上uiWH (详见(五)2.根据帧内预测模式调用以下函数xPredlntraPlanar 函数一进行 Intra Planar 模式预测 xPredlntraAng 函数-一进行 Intra.DCv Intra.Angular (有角度的)模式预测3. xDCPredFi Itering函数Void TComPred i ct i on : : xDCPredF i I ter i ngxDCPredF iI ter i ng ( ptrSrc+sw+1 , sw, pDst, u i Str i de, iWi dth , iHeight )sw =2* iWidth +1?xDCP
16、redF iI ter i ng( I nt* pSrc, I nt i SrcStr i de, PeI*& rpDst, I nt iDstStr ide, I nt iWidth, I nt i Height )对Intra.DC模式的边界进行平滑滤波处理.I nt i SrcStr i de预测模块的I nt* pSrc=ptrSrc+sw+1ptrSrc指向当前PU的左上邻点,指向当前PU的首地址,Q?:第一行的点,利用对应上邻点与其加权平均(不是与devalue吗?)HEVC/H。265参考代码跟踪跟踪帧内预测:4. 在xCompressCU函数中(CompressCU函数的主体也
17、是调用xComprssCU函数),先进行帧间预 测xCheckRDCostMerge2Nx2N, xCheckRDCost I nter等。在做完帧间预测后进行帧内预测,这是 调用的函数是xCheckRDCostIntra,在xCompressCU函数的后续部分,还递归调用自身以实现 对每个CU的编码。变换编码在encodeCoeff中实现,量化在xCheck IntraPCM完成。5. xCheckRDCostIntra函数,主要完成帧内预测的任务,对亮度的预测使用estIntraPredQT,对 色度使用 estIntraPredChromaQTo6o estlntraPredQT函数,在
18、思想对亮度的处理和色度的处理是一样的,所以只介绍亮度的处理函数在estIntraPredQT函数中,主要完成了 RDCost的选择,在其中predIntraLumaAng函数HM学习笔记来自博客实现了方向的预测;calcHAD函数计算了 SATD; xModeBitsIntra函数计算编码的码率;xUpdateCandList更新了最好的RDCost所使用的模式。HEVC学习(八)以SA0为例浅析跟踪代码寻找到SA0真正实现功能的代码处HE比学习(九)帧内预测系列之六xPredlntraPlanar 函数 _Vo i d TComPred i ct i on: xPredI ntraPIana
19、r进行Intra.Planar模式预测(对于代码中的某些公式并未深究)Ulnt bIkSize = offset2D=width图像 2 中 CurrentPU 的宽度srcStr ide图像2的宽topRowk=二pSrc k-srcStr i de存放上边界那一行的数组leftColumnk二 pSrck*srcStr ide1 存放左边界那一列的数组、TodROW1位置的值等于其上面的点的值Q? : Ulnt shiftID 二 g aucConvertToBit width + 2 是什么鬼?Q?: horPredleftColumnk + offset2D; ?为什么要加 offse
20、t2D?Q?: topRow k=shiftID;?HEVC学习(十一)一帧内预测系列之七xPred I ntraAng 函数Vo i d TComPred i ct i on: : xPred I ntraAng进行Intra.DCv IntraAngular (有角度的)模式预测Int blkSize二width;/! 当前PU的宽度Pel* pDst二rpDst;/!指向预测样点区域首地址Boo 1 modeDC=dirMode 2DC模式为1,若是DC模式则modeDC为真Boo 1 modeHor=!modeDC & (dirMode 18)modeDC 为假且 dirMode ge
21、tDepth( uiAbsPartIdx )是否大于uiDepth来确定当前CU是否还要继续 分割,后者我们知道,是当前CU的深度,那么前者呢?自然就是在xCompressCU中确定下来 的当前CU的最佳分割模式。对 compressCU 的参数 pcCU 进行类似语句:pcCU-getDepth ( uiAbsPartIdx ),即可获得 Z order为uiAbsPartldx的4x4块的深度,如果把整个CU每个4x4块的深度确定下来,那么它的划分自然也就确定下来了.HEVC中SA自适应样点补偿 详细分析解读SAO原理:SAO是在DB之后进行,输入是重建帧和原始帧数据,输岀是SAO数据和S
22、AO后的重建 帧。自适应样点补偿是一个自适应选择过程,在去块滤波后进行。下面是整个HEVC的编码框图,可以看到SAO是在整个帧编码完成后得到重建帧后进行的,属 于Slice级别(帧级)。首先把Frame划分为若干LCU,然后对每个LCU中每个像素进行SAO操作。将根据其LCU像素 特征选择一种像素补偿方式,以减少源图像与重构图像之间的失真。自适应样点补偿方式分为 带状补偿(Band Offset, B0)和边缘补偿(Edge Offset, E0)两大类。带状补偿将像素值强度等级划分为若干个条带,每个条带内的像素拥有相同的补偿值。进行补 偿时根据重构像素点所处的条带,选择相应的带状补偿值进行补偿。边缘补偿主要用于对图像的轮廓进行补偿它将当前像素点值与相邻的2个像素值进行 对比,用于比较的2个相邻像素可以在下图中所示的4种模板中选择,从而得到该像素点的类 型解码端根据码流中标示的像素点的类型信息进行相应的补偿校正。SAO-自适应样点补偿意义何在:SAO意义:大 量模拟测试和资料显示,SAO平均可以节约2%到6%的码率,而编解码的复杂度只增加2% 左右!SAO主要目的和操作原理减少源图像与重构图像之间的失真。如果只看这点,实际上每帧 编码后的码率反而会增加,因为多了 SAO的相关语法和语义以及补偿值的编码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 修鞋店大理石装修合同
- 工业生产变压器租赁合同
- 2024年大型厂房交易合同
- 水果采摘租赁山场合同
- 市场调研合同
- 2024劳动法修订:劳动合同的规范与创新
- 广告公司制作操作工合同
- 2024××××通信工程承包合同范本
- 娱乐场所安全经营指引
- 2024年城乡公共交通线路特许经营合同
- 探究与发现对勾函数图象和性质 教学设计-2023-2024学年高一上学期数学人教A版(2019)必修第一册
- 2024-2030年中国城市更新行业市场深度分析及前景趋势与投资战略研究报告
- 2023光伏并网柜技术规范
- 2024至2030年互联网+鸡蛋市场前景研究报告
- 欠钱不还诉状书范文2024年
- 液化气站双重预防体系手册
- 2024年村官面试试题及答案
- 2023年中级经济师《人力资源管理》真题及答案解析(11月12日上午)
- 2024中科信工程咨询(北京)限责任公司招聘6人高频考题难、易错点模拟试题(共500题)附带答案详解
- 2024年九年级化学上册 第1单元 走进化学世界教案 (新版)新人教版
- 教师资格考试小学心理健康面试2024年下半年自测试题及答案解析
评论
0/150
提交评论