资料整理

干货 | 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. GlusterFS下如何修复裂脑文件?
  2. matlab中欠定方程组超定方程组_七年级下册第10章:解二元一次方程组(12课时)...
  3. QT的QFileSelector类的使用
  4. BCC异或校验 Linux C
  5. 互联网上,极致才能成功
  6. 【入门教程】无人机烧录过程
  7. redis哨兵配置和redis-cluster搭建
  8. 为系统安装盘集成Server Pack补丁包
  9. 蓝桥杯质数c语言,2017年第八届蓝桥杯C/C++程序设计本科B组省赛 等差素数列(结果填空)(素数筛)...
  10. 学习笔记(01):2019软考网络工程师--基础知识视频教程-数据通信基础(一)
  11. 计算机应用基础的知识探索,计算机应用基础的知识探索
  12. cocos2d-x Android游戏黑屏解决办法
  13. 江瀚新材登陆上交所主板:募资约24亿元,甘书官父子为实际控制人
  14. Tina-TI电路仿真初体验(德州仪器电路仿真软件)
  15. vmware虚拟机安装win7_vmware虚拟机中安装mac Catalina10.15
  16. 快递业大动作!京东已收购德邦快递?最新回应
  17. 机器学习模型常用性能指标和Python代码实现
  18. 基于snmp协议监控华为s5720交换机
  19. 怎么学java软件工程师_如何学习java软件工程师面试
  20. Game boy模拟器(7):精灵

热门文章

  1. icp光谱仪的工作原理_ICP原理
  2. iOS架构-cocoaPods之Podfile语法(18)
  3. Ubuntu 环境下SVN添加新项目
  4. 计算机专业专科毕业设计题目,专科生计算机专业论文题目大全 专科生计算机专业论文题目哪个好...
  5. MATLAB简介与基础知识
  6. 校园网络构建方案设计
  7. 期末复习-选择题整理(湖南大学操作系统课程雨课堂答案即期末题库)
  8. 计算机cad名词解释,CAD全部名词解释
  9. F2FS文件系统论文解读
  10. IE恶意修改防护大法(转)