HM学习笔记_来自博客

上传人:汽*** 文档编号:432023698 上传时间:2023-09-21 格式:DOCX 页数:11 大小:137.35KB
返回 下载 相关 举报
HM学习笔记_来自博客_第1页
第1页 / 共11页
HM学习笔记_来自博客_第2页
第2页 / 共11页
HM学习笔记_来自博客_第3页
第3页 / 共11页
HM学习笔记_来自博客_第4页
第4页 / 共11页
HM学习笔记_来自博客_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《HM学习笔记_来自博客》由会员分享,可在线阅读,更多相关《HM学习笔记_来自博客(11页珍藏版)》请在金锄头文库上搜索。

1、HEVC学习(二) HM的整体结构及一些基本概念7 个工程1. TAppCommon2. TAppDecoder3. TAppEncoder4. TlibCommon5. TLibDecoder6. TLibEncoder7. TLibVideoIOT代表 Test(这一个的理解可能有误) , App 代表 Application ,表明该工程主要包含一些应用函数 Lib代表 Library ,表明该工程主要包含一些库函数。 Common 表明该工程包含的一些函数是编码器和解码器共用的,Decoder 表明该工程包含的函数是解码器使用的,而Encoder 表明该工程包含的函数是编码器使用的。V

2、ideoIO 工程主要是实现对YUV 文件的读写操作。编码器和解码器的主函数分别在 encmain.cpp 和 decmain.cpp 中,相信光看源文件名都能看出来了。( 1) 类的命名:( 2) 变量的命名:( 3) 函数的命名:HEVC学习(三) 帧内预测系列之一fillReferenceSamples函数(填补当前PU 周围相关的样本值) Void TComPattern:fillReferenceSamples图像 (2 左上角为 4 个像素点,如无强调则以块为单位计算长度等?)PS:此处有两块图像:重建的 YUV 的大图像 1、相对应的专用于预测的 PU 及其周边的参考样点图像 2

3、Pel* piRoiTemp指向重建Yuv 图像 1 的位置(临时使用,指向可随意变动)Pel* piRoiOrigin 指向重建Yuv图像 1 对应于当前PU所在位置的首地址 (对当前 PU固定)Int* piAdiTemp图像2 的感兴趣位置(变动的,用于赋值)iPicStride 重建YUV 图像 1 的宽iNumIntraNeighbor 指示PU 周边可用邻块数uiWidth= uiCuWidth*2+1 图像 2 的宽, uiHeight= uiCuHeight*2+1 图像 2 的高 uiCuWidth 图像 2 的 CurrentPU 部分的宽, uiCuHeight图像 2

4、的 CurrentPU 部分的高iTotalSamples总样点数iTotalUnits以 4x4 块为单位的块数iUnitSize块的大小主要功能是在真正进行帧内预测之前,使用重建后的Yuv 图像对当前PU( Predict Unit 预测单元)的相邻样点进行赋值,为接下来进行的角度预测提供参考样点值。PS:关于一个PU 的相邻点,以及它的相邻点的可用性如何判断的问题,是一个细节问题,并不会影响我们对这个函数实现功能的理解。PS: reference samples are partially available 部分没看,也看不懂每个 4x4 块里的 4 个样点分别被赋值为对应位置的重建Y

5、uv 的样点值?( 4*4 块中不是16 个样点吗)HEVC学习(四) 帧内预测系列之二CU、 PU 地址计算方法光栅扫描, 即从左往右, 由上往下, 先扫描完一行, 再移至下一行起始位置继续扫描。H.264使用的主要就是光栅扫描顺序。HEVC 里同样也有光栅扫描顺序,但是,由于它对CU 采用的是递归划分的方式,如果仍是采用光栅扫描顺序,对CU 的寻址会很不方便。HEVC定义了Z 扫描顺序Z 扫描是针对一个 CU 来说的,它是用 于递归扫描 CU 的分割。定位一幅图像中的一个CU(或其分割)大致是这么个过程,首先,由于CU 的尺寸的最大值是已知的,会根据这个定位到该 CU 左上角相 对于图像左

6、上角的位置,即得到它的坐标,接着, 才是对当前块进行Z扫描,单位是 4x4 块,换句话说, Z 扫描地址是对一个 CU 有效的,不能直接使用这个地址来确定它在图像中的位置。HEVC学习(五) 帧内预测系列之三initAdiPattern函数(预测的前期准备,得到PU 的过程) Void TComPattern:initAdiPattern获得 iNumIntraNeighbor 、 bNeighborFlags 等将参数传入(一)中的fillReferenceSamples函数赋值对周围样点进行3 抽头的平滑滤波主要功能有三个( 1)检测当前 PU 的相邻样点包括左上、上、右上、左、左下邻域样

7、点值的可用性,或者说检查这些点是否存在;( 2)参考样点的替换过程; (二)中已介绍过( 3)相邻样点即参考样点的平滑滤波。Bool bNeighborFlags4 * MAX_NUM_SPU_W + 1指示 4 个方向上相邻样点值的可用性 piAdiBuf= piAdiTempiNumUnitsInCu = uiCuWidth / iUnitSize; CurrentPU 宽(以块为单位, 暂时理解 4*4 块宽 4)iTotalUnits= (iNumUnitsInCu 2) + 1左下、左、上、右上、1 左上角isAboveAvailable 函数计算返回左边可用邻块数Int iBufS

8、ize =uiCuHeight2 + uiCuWidth2 + 1;滤波缓存区的大小,相邻块的个数UInt uiWH= uiWidth * uiHeight 一个缓存区中的元素个数,图像2 中块的总总个数piAdiBuf 指向滤波前的参考样点的首地址piFilterBuf 将 piAdiBuf 所有参考样点拷贝到此区域经过滤波后所得值保存在piFilterBufN 中存放滤波后样点值的区域piFilterBuf1 经过滤波的样点值(与piAdiBuf 相差 uiWH,因为滤波前后的值顺序存放)存放顺序: piAdiBuf 大小uiWH piFilterBuf1 uiWH piFilteredB

9、uf2 uiWH piFilterBuf iBufSize(周边样本块数,只有这些才参与滤波)piFilterBufNPS:piAdiBuf 、piFilterBuf1 按照图像顺序存放, piFilterBuf 、piFilterBufN 将周边样点顺序存放,方便滤波Q: 获取当前 PU 左上角 LT,右上角RT以及左下角LB以 4x4 块为单位的Zorder ?不懂HEVC参考软件代码总结1.编码器程序从 TAppEncoder 工程中的encmain.cpp 文件开始的,此文件中包含程序运行的入口函数 main ,在 main 参数,和编码器最重要的功能函数中主要做了编码器对象的创建、分

10、析配置文件,初始化配置encode 。2.在encode 函数中,主要实现了读取YUV 文件的数据、 初始化工具对象例如:SliceEncoder、 CUEncder。在此函数里,还包括一个encode 函数,调用GOPEncoder、 CompressGOP函数来具体执行编码任务。3.在 CompressGOP函数中,完成了以下的功能:一, InitGOP 将文件的码流分成若干GOP以便后续程序能够顺利执行。二, InitEncSlice 创建编码的Slice。三,在此函数中,还包括 preCompressSlice 和 CompressSlice 两个函数,前者的作用是选择不同的 lamu

11、da 进行编码(编码是调用了 CompressCU 函数,后续介绍) ,后者是在最好的 lamuda 下进行编码。四,循环滤波五, (熵编码等,还没看) 。4.在 xCompressCU函数中( CompressCU 函数的主体也是调用xComprssCU 函数),先进行帧间预测 xCheckRDCostMerge2Nx2N,xCheckRDCostInter 等。在做完帧间预测后进行阵内预测,这是调用的函数是 xCheckRDCostIntra,在 xCompressCU 函数的后续部分,还递归调用自身以实现对每个CU 的编码。变换编码在encodeCoeff 中实现,量化在xCheckIn

12、traPCM 完成。5.xCheckRDCostIntra 函数,主要完成帧内预测的任务,对亮度的预测使用对色度使用estIntraPredChromaQT 。estIntraPredQT ,6.estIntraPredQT 函数,在思想对亮度的处理和色度的处理是一样的,所以只介绍亮度的处理函数。在 estIntraPredQT 函数中,主要完成了 RDCost 的选择,在其中 predIntraLumaAng 函数实现了方向的预测; calcHAD 函数计算了 SATD; xModeBitsIntra 函数计算编码的码率;xUpdateCandList 更新了最好的RDCost所使用的模式。HEVC学习(六) 帧内预测系列之四实现亮度分量帧内预测的主函数的大体框架estIntraPredQT函数(实现亮度分量帧内预测)HEVC学习(七) 帧内预测系列之五predIntraLumaAng函数 Void TComPrediction:predIntraLumaAng帧内预测的最为重要的函数之一predIntraLumaAng1.getPreditorPtr 函数 Int* TComPattern:getPredictorPtrInt *ptrSrc 获得指向参考样点首地址的指针数组 m_aucIntraFilter 里面存放了不同PU 尺寸下滤

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号