【HEVC学习与研究】46、HEVC参考代码中SAO的实现
2023-09-27 14:29:20 时间
1、HM10 encoder关于SAO的初始化操作
在编码开始之前,编码器将进行与SAO有关的一些初始化设置。如在TAppEncTop::encode()函数中调用TAppEncTop::xInitLibCfg()进行与config相关的设置:
m_cTEncTop.setLFCrossSliceBoundaryFlag( m_bLFCrossSliceBoundaryFlag );//parseCfg时设置,指定loop filter是否能跨越slice边界,默认为false m_cTEncTop.setUseSAO ( m_bUseSAO );//parseCfg时设置,指定SAO功能是否开启,由cfg文件指定 m_cTEncTop.setMaxNumOffsetsPerPic (m_maxNumOffsetsPerPic);//每一个像素最大允许的偏移量,默认为2048 m_cTEncTop.setSaoLcuBoundary (m_saoLcuBoundary);//是否使用非deblocked像素做SAO参数估计 m_cTEncTop.setSaoLcuBasedOptimization (m_saoLcuBasedOptimization);//选择基于picture还是CTU的估计,默认选择CTU在TEncTop::create ()中,会依据前面配置的结果进行初始化操作:
if (m_bUseSAO) m_cEncSAO.setSaoLcuBoundary(getSaoLcuBoundary()); m_cEncSAO.setSaoLcuBasedOptimization(getSaoLcuBasedOptimization()); m_cEncSAO.setMaxNumOffsetsPerPic(getMaxNumOffsetsPerPic()); m_cEncSAO.create( getSourceWidth(), getSourceHeight(), g_uiMaxCUWidth, g_uiMaxCUHeight ); m_cEncSAO.createEncBuffer(); }
Void TEncGOP::init ( TEncTop* pcTEncTop ) {//...... //--Adaptive Loop filter m_pcSAO = pcTEncTop- getSAO(); //...... }2、实际进行SAO滤波操作
在TEncGOP::compressGOP函数中调用SAOProcess实现:
Void TEncSampleAdaptiveOffset::SAOProcess(SAOParam *pcSaoParam, Double dLambda) #endif m_dLambdaLuma = dLambdaLuma; m_dLambdaChroma = dLambdaChroma; if(m_bUseNIF) m_pcPic- getPicYuvRec()- copyToPic(m_pcYuvTmp); m_uiSaoBitIncreaseY = max(g_bitDepthY - 10, 0); m_uiSaoBitIncreaseC = max(g_bitDepthC - 10, 0); m_iOffsetThY = 1 min(g_bitDepthY - 5, 5); m_iOffsetThC = 1 min(g_bitDepthC - 5, 5); resetSAOParam(pcSaoParam); if( !m_saoLcuBasedOptimization || !m_saoLcuBoundary ) resetStats(); Double dCostFinal = 0; if ( m_saoLcuBasedOptimization) rdoSaoUnitAll(pcSaoParam, dLambdaLuma, dLambdaChroma, depth); else pcSaoParam- bSaoFlag[0] = 1; pcSaoParam- bSaoFlag[1] = 0; dCostFinal = 0; Double lambdaRdo = dLambdaLuma; resetStats(); getSaoStats(pcSaoParam- psSaoPart[0], 0); runQuadTreeDecision(pcSaoParam- psSaoPart[0], 0, dCostFinal, m_uiMaxSplitLevel, lambdaRdo, 0); pcSaoParam- bSaoFlag[0] = dCostFinal 0 ? 1:0; if(pcSaoParam- bSaoFlag[0]) convertQT2SaoUnit(pcSaoParam, 0, 0); assignSaoUnitSyntax(pcSaoParam- saoLcuParam[0], pcSaoParam- psSaoPart[0], pcSaoParam- oneUnitFlag[0], 0); if (pcSaoParam- bSaoFlag[0]) processSaoUnitAll( pcSaoParam- saoLcuParam[0], pcSaoParam- oneUnitFlag[0], 0); if (pcSaoParam- bSaoFlag[1]) processSaoUnitAll( pcSaoParam- saoLcuParam[1], pcSaoParam- oneUnitFlag[1], 1); processSaoUnitAll( pcSaoParam- saoLcuParam[2], pcSaoParam- oneUnitFlag[2], 2); }具体的实现原理下篇继续研究
原文地址:https://www.cnblogs.com/ziyi--caolu/p/8034367.html 非常感谢原文作者,总结的很好,讲解的也很详细,学习了。
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.
为了有效地预测多种不同种类的内容,HEVC支持多种不同的预测方法。角度预测可以模拟多种不同方向的结构,而平面和DC模式适用于平滑和渐变区域。
【变换和量化是整个视频编码技术系列中理论性和研究性较强的一部分,本文暂时不去研究变换的原理、推导过程等,只是调试一下在参考代码中对预测残差进行变换的实现过程。
jerry.yin 毕业于上海大学通信与信息工程学院,从事流媒体和视频编解码的研究与开发工作; 研究领域包括视频编解码标准、视频处理和流媒体技术、移动互联网技术等。
相关文章
- 学习ASP.NET MVC(三)——我的第一个ASP.NET MVC 视图
- C#学习记录——GDI+绘图的应用
- 订阅FPGA/MATLAB/Simulink学习教程1~3系列,赠送1~2套本博客的代码案例
- 《 Apache Spark机器学习.》导读
- SharpGL学习笔记
- base64编解码学习及python代码实现
- 强化学习代码实战-08 DDPG 算法
- 强化学习代码实战-03动态规划算法(策略迭代)
- EM学习-思想和代码
- python学习之10行代码制作炫酷的词云图(匹配指定图形形状)
- [vue]几十行代码写一个图书管理系统小demo来学习表单控件、列表渲染和事件绑定。
- Flutter开发经验之学习使用 Flutter 提高代码质量、可读性、可维护性和生产力的 九个实践
- SwiftUI进阶之 02 创建界面的三个思路 (《代码大全》学习笔记)
- SwiftUI进阶之 01 软件开发的核心是什么 (《代码大全》学习笔记)
- 大数据学习——sqoop入门
- ChatGPT强化学习大杀器——近端策略优化(PPO)
- Rust机器学习之tch-rs
- Unity框架学习_编辑器自动生成UI代码_减少重复工作量,高效开发
- Andrew Ng-机器学习基础笔记(上)-Python实现代码
- Stacked hourglass networks for human pose estimation代码学习
- CSS学习知识整理(四)Css 盒子模型
- MongoDB入门学习(一):MongoDB的安装和管理
- 开创学习的四核时代-iTOP-4412开发板开源硬件平台
- C# 学习教程 之 泛型类型参数的限制约束和代码实例
- [Python]跟着代码去学习---二维码1:批量生成二维码