资料整理

干货 | H.265编码SAO算法优化

https://www.jianshu.com/p/178633de0e65

这篇文章介绍的很好,将sao的原理和细节基本都介绍清楚了
sao 样点自适应补偿,bo 像素灰度值分成32个band;eo又分成四种方式,5中像素类型

这篇文中介绍的优化方法,将数据怎么存放,一次性计算,但是性能在有汇编优化的情况下就不明显了,不尝试了

https://blog.csdn.net/nk_wavelet/article/details/52662954

介绍了x265中每个函数模块的作用

/**
* @brief 边界补偿模式下像素的5种分类 :
*         第1类谷点和第2类凹拐点,需要加上一个正补偿值;
*         第4类峰点和第3类凸拐点,需要加上一个负补偿值;
*         第0类像素不进行补偿。
*/
const uint32_t SAO::s_eoTable[NUM_EDGETYPE] = {1, 2, 0, 3, 4};/* 对|num / den|四舍五入,然后前面添加符号 */
inline int32_t roundIBDI(int32_t num, int32_t den);/* 获取输入变量x的符号 */
inline int8_t signOf(int x);/* 获取 a-b的符号 */
inline int signOf2(const int a, const int b);/*** @brief 计算D_post和 D_pre的差值,其中D_pre和D_post分别表示原始像素与重构像素(SAO补偿前、补偿后)之间的失真。* @param count  : 一个CTB内某个特定SAO类型样本的个数* @param offset : 一个CTB内某个特定SAO类型样本的补偿值* @param offsetOrg : 原始像素与重构像素(SAO补偿前)之间的差值之和*/
inline int64_t estSaoDist(int32_t count, int32_t offset, int32_t offsetOrg);/* 创建SAO的部分参数,分配空间 */
bool SAO::create(x265_param* param, int initCommon);/* 为当前CTU的SAO参数分配空间并初始化 */
void SAO::allocSaoParam(SAOParam* saoParam);/*** @brief 根据SAO补偿模式对重构像素值进行补偿.* @param addr : 从上到下、从左到右,当前CTU的序号* @param typeIdx : SAO补偿模式,取值SAO_EO_X 或 SAO_BO* @param plane : 颜色空间平面的序号,亮度平面为0,两个色度平面分别为1和2. */
void SAO::applyPixelOffsets(int addr, int typeIdx, int plane);/* 获取亮度CTU的SAO补偿模式及对应的补偿值(在此函数之前已经计算得到)并进行补偿 */
void SAO::generateLumaOffsets(SaoCtuParam* ctuParam, int idxY, int idxX);/* 获取色度CTU的SAO补偿模式及对应的补偿值(在此函数之前已经计算得到)并进行补偿 */
void SAO::generateChromaOffsets(SaoCtuParam* ctuParam[3], int idxY, int idxX);/* 统计当前CTU在BO和EO各模式下的像素归类:
重构像素与原始像素差值之和(保存在数组 m_offsetOrg 中),
像素种类 classIdx 的计数(保存在数组 m_count 中) */
void SAO::calcSaoStatsCTU(int addr, int plane);/* 去方块滤波前对CTU的像素统计归类,
只有当 SAO 和 bSaoNonDeblocked 都开启的情况下才使用,因此暂时忽略 */
void SAO::calcSaoStatsCu_BeforeDblk(Frame* frame, int idxX, int idxY);/* 计算CTU在各种模式下的最佳SAO代价,与直接采用左边或上面CTU的SAO参数作比较,找出最
优的SAO代价并将最优SAO模式下的各种参数保存在saoParam->ctuParam[plane][addr]中 */
void SAO::rdoSaoUnitCu(SAOParam* saoParam, int rowBaseAddr, int idxX, int addr);/* 利用先前已得到的统计信息(即m_count和m_offsetOrg)计算初始补偿值(即m_offset) */
void SAO::saoStatsInitialOffset(int planes);/* 计算率失真代价值,公式为:(失真 + lambda * 编码比特数)*/
inline int64_t SAO::calcSaoRdoCost(int64_t distortion,
uint32_t bits, int64_t lambda);/**
* @brief 估计中间过程的补偿值,即:在给定的SAO模式和某种类点的情况下,找到最优率失真代价及对应的补偿值和失真值.
* @param typeIdx : SAO模式,即 SAO_EO_X 和 SAO_BO
* @param lambda  : 拉格朗日乘子,取值依赖QP,即 256.0 * x265_lambda2_tab[qp]
* @param count   : typeIdx模式下,某classIdx的点的数目
* @param offsetOrg : 原始像素与重构像素(SAO补偿前)之间的差值之和
* @param offset[输出] : 最优率失真代价对应的补偿值
* @param distClasses[输出] : 最优率失真代价对应的失真
* @param costClasses[输出] : 最优率失真代价
*/
void SAO::estIterOffset(int typeIdx, int64_t lambda, int32_t count,
int32_t offsetOrg, int32_t& offset, int32_t& distClasses, int64_t& costClasses);/* 搜寻亮度最优SAO模式,得到最优率失真代价 */
void SAO::saoLumaComponentParamDist(SAOParam* saoParam, int32_t addr,
int64_t& rateDist, int64_t* lambda, int64_t &bestCost);/* 搜寻色度最优SAO模式,得到最优率失真代价 */
void SAO::saoChromaComponentParamDist(SAOParam* saoParam, int32_t addr,
int64_t& rateDist, int64_t* lambda, int64_t &bestCost);/* 统计某个CU内条带点数目及失真之和, count和stats分别记录了条带点计数和失真之和*/
void saoCuStatsBO_c(const int16_t *diff, const pixel *rec, intptr_t stride,
int endX, int endY, int32_t *stats, int32_t *count);/* 统计CU内的点在EO_0模式下的各种类点的数目及失真之和 */
void saoCuStatsE0_c(const int16_t *diff, const pixel *rec, intptr_t stride,
int endX, int endY, int32_t *stats, int32_t *count)/* 统计CU内的点在EO_1模式(垂直方向)下的各种类点的数目及失真之和 */
void saoCuStatsE1_c(const int16_t *diff, const pixel *rec, intptr_t stride,
int8_t *upBuff1, int endX, int endY, int32_t *stats, int32_t *count);/* 统计CU内的点在EO_2模式(135度方向)下的各种类点的数目及失真之和 */
void saoCuStatsE2_c(const int16_t *diff, const pixel *rec, intptr_t stride, int8_t *upBuff1, int8_t *upBufft, int endX, int endY, int32_t *stats, int32_t *count);/* 统计CU内的点在EO_3模式(45度方向)下的各种类点的数目及失真之和 */
void saoCuStatsE3_c(const int16_t *diff, const pixel *rec, intptr_t stride,
int8_t *upBuff1, int endX, int endY, int32_t *stats, int32_t *count);

https://amefs.net/archives/1264.html

limit-sao测试与简单总结,sao会让整体图像变得模糊,偏离等等,但整体来说还是可以降低ringing的效果

H.265/HEVC 的编码结果 H.265/HEVC 可以压缩掉2%~6% 的码流,而对应的编解码器的时间复杂度仅仅上升约2%

x265的sao优化思考相关推荐

  1. mysql 使用order by存在的问题与优化思考

    目录 前言: 一 limit分页 二 order by和limit数据不一致的问题 三 ordey by与filesort 总结: 思考: 补充: 前言: 在很多实际业务中,往往需要涉及分页和排序,还 ...

  2. 一次面试引发的思考(中小型网站优化思考)

    前言 故事的起因是这样的,由于本人地处偏僻工作地点在美丽的冰城哈尔滨虽然地方很美丽,但是这里的软件行业实在是算不上"美丽",这么多年由于个人原因或者公司原因经常换工作,因为这里都是 ...

  3. 一次面试引发的思考(中小型网站优化思考) (转)

    前言 故事的起因是这样的,由于本人地处偏僻工作地点在美丽的冰城哈尔滨虽然地方很美丽,但是这里的软件行业实在是算不上"美丽",这么多年由于个人原因或者公司原因经常换工作,因为这里都是 ...

  4. for循环次数太多的时间优化_for循环关于对象长度优化思考

    一.for循环对象长度两种写法 最近看到很多代码,各种语言,在写for循环的时候并没有把长度提取出来,而是每次遍历的时候进行计算. $str = 'bye 2019, hi 2020!'; for ( ...

  5. 电饭煲米和水比例优化思考

    What 优化电饭煲煮饭,让用户操作更简单,适应场景:白米饭,杂粮饭,白米粥,八宝粥 Why 每次米饭粥可能做出来差别都很大,不是太湿就是太干,刚刚好的米饭很少能够做出来.需要一个傻瓜式的指引: 随着 ...

  6. 火车票订票系统的几点优化思考

    一.场景分析 1.平时访问量不高,但是春运几天会出现瞬间高峰 2.订单的事务性要求较高 3.全国开放,并且票数要精准 4.瞬间访问量大 二.调优可行性方案 1.数据层次 使用oracle,在数据稳定性 ...

  7. sql 双分区查询_优化案例 | 分区表场景下的SQL优化

    导读 有个表做了分区,每天一个分区. 该表上有个查询,经常只查询表中某一天数据,但每次都几乎要扫描整个分区的所有数据,有什么办法进行优化吗? 一.待优化场景 有一个大表,每天产生的数据量约100万,所 ...

  8. 优化案例 | CASE WHEN进行SQL改写优化

    导读 今天给大家分享一个通过SQL改写而独辟蹊径的SQL优化案例 待优化场景 发现SLOW QUERY LOG中有下面这样一条记录: ... # Query_time: 59.503827 Lock_ ...

  9. 视差滚动的爱情故事之优化篇

    上篇博客链接:视差滚动的爱情故事 [优化问题 : 解决Chrome下跳动的bug] 在上一篇的爱(diao)情(si)故事里面,demo3在 Chrome下是这样的问题:鼠标滚动视差元素动画生硬,鬼畜 ...

  10. 即时通讯mysql压力_Soul即时通讯之数据库优化

    背景 在Soul的IM上线后,初始时用户本地消息量不大的情况下,数据库读写良好,不容易发现问题. 但随着产品用的时间越来越近,有些用户本地聊天数据达到500万条以上时,数据库性能瓶颈逐渐体现出来. 1 ...

最新文章

  1. java lambda 变量_java8新特性-lambda(变量捕获)
  2. Express4.x API (四):Router (译)
  3. Java 链接MySQL数据库时报的connect和denied错解决方法
  4. 神策数据成林松:数据智能在业务场景下的应用(附 PPT 下载)
  5. 我的算法学习(一)----数组的全排列
  6. linux oracle12c dbca,Linux下Oracle 12c R2图形化安装笔记
  7. CentOS系统下docker的安装与卸载
  8. 如何处理表单中的中文(中文编码/解码问题)
  9. 08-Flutter移动电商实战-dio基础_伪造请求头获取数据
  10. Linux/deppin 中安装、卸载软件的几种命令
  11. 搜索算法-搜索的优化
  12. R语言实战:个人贷款违约预测模型
  13. 计算器软件设计和计算机软件设计区别,基于LabVIEW的计算器程序设计
  14. linux灵活提取ip脚本
  15. ORACLE US7ASCII编码 读取时乱码问题
  16. 经典面试题【老鼠喝水】
  17. 笔划码、五笔码、拼音码软键盘中文输入
  18. 数字化的一切都会在安全沙箱里面
  19. 一封来自知乎的手机拍摄要领
  20. 开发团队PMO如何构建管理更有效?

热门文章

  1. oracle四大索引类型,oracle 索引类型
  2. DB2 错误信息 SQLCODE SQLSTATE说明
  3. linux 系统调试工具,Linux 系统调试...
  4. RRT算法及其部分改进算法介绍
  5. 自动化脚本任务计划程序(Windows)
  6. 德标螺纹规格对照表_德标与国标对照表
  7. matlab 小波分析工具
  8. Mac ffmpeg推流记录
  9. 基于SSM的医院药品库存管理系统
  10. 证据理论的模态逻辑解释