x264源码分析-psy-rd参数
psy-rd:Psychovisual optimization strength for RDO:在rdo中使用psy算法(一种心理视觉模型)
这是两个参数:f_psy_rd (psy rdo 强度 0-10 i_subpel_refine >= 6 才有效 )和 f_psy_trellis (/* Psy trellis strength*/)
Psy Trellis量化,可以提高细节,但是会大幅度提高码率。
x264代码中使用这个参数的地方。
解析参数:
sscanf( value, "%f:%f", &p->analyse.f_psy_rd, &p->analyse.f_psy_trellis)//默认是不开启的
使用i_psy_rd 在计算宏块的satd的时候,乘以一个系数,这个系数是通过psy_rd计算得到的。
static inline int ssd_plane( x264_t *h, int size, int p, int x, int y )
{
satd = (satd * h->mb.i_psy_rd * h->mb.i_psy_rd_lambda + 128) >> 8;
}
i_psy_rd_lambda 值得由来 ,
static void x264_mb_analyse_init_qp( x264_t *h, x264_mb_analysis_t *a, int qp )
{
a->i_lambda = x264_lambda_tab[qp];//每一个qp对应一个拉姆达乘子
h->mb.i_psy_rd_lambda = a->i_lambda;
}
/* lambda = pow(2,qp/6-2) */
const uint16_t x264_lambda_tab[QP_MAX_MAX+1] =
{
1, 1, 1, 1, 1, 1, 1, 1, /* 0- 7 */
1, 1, 1, 1, 1, 1, 1, 1, /* 8-15 */
2, 2, 2, 2, 3, 3, 3, 4, /* 16-23 */
4, 4, 5, 6, 6, 7, 8, 9, /* 24-31 */
10, 11, 13, 14, 16, 18, 20, 23, /* 32-39 */
25, 29, 32, 36, 40, 45, 51, 57, /* 40-47 */
64, 72, 81, 91, 102, 114, 128, 144, /* 48-55 */
161, 181, 203, 228, 256, 287, 323, 362, /* 56-63 */
406, 456, 512, 575, 645, 724, 813, 912, /* 64-71 */
1024,1149,1290,1448,1625,1825,2048,2299, /* 72-79 */
2580,2896, /* 80-81 */
};
f_psy_trellis 的使用
参数转换为i_psy_trellis
h->mb.i_psy_trellis = h->param.analyse.i_trellis ? FIX8( h->param.analyse.f_psy_trellis / 4 ) : 0;//设置了trellis psy-rd才有效
ssd_plane()函数调用过程
x264_rd_cost_subpart()
x264_rd_cost_part()
x264_mb_analyse_p_rd() COST_MV_RD() x264_me_refine_qpel_rd()
x264_macroblock_analyse()
总结上面就是两条调用路线
1 模式选择 2 7运动补偿计算
x264源码分析-psy-rd参数相关推荐
- x264源码分析与应用示例(一)——视频编码基本流程
本文包含以下内容 1.H.264编码流程详述与对应x264源码解析 首先简单介绍一下x264源码调试与修改的基本方法.就是基本的conifigure和make,configure命令使用最简单的就可以 ...
- IPVS(也叫LVS)的源码分析之persistent参数
最近在用 LVS做 LB,发现一个问题客户端总是出现session丢失问题,采用常用配置,均衡策略使用wlc, 看了一下wlc的策略相同的客户端都有可能轮训到不同的后台机器,在后台服务器上并没有对se ...
- x264源码分析--bluray-compat蓝光兼容
参数解析: OPT("bluray-compat") p->b_bluray_compat = atobool(value);//bool 类型 bluray-compat蓝 ...
- x264源码分析--overscan
参数解析: OPT("overscan") b_error |= parse_enum( value, x264_overscan_names, &p-&g ...
- GCC源码分析(十七) — rtl expand之后
版权声明:本文为CSDN博主「ashimida@」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/lidan1 ...
- 【Linux】mjpg-streamer 源码分析
文章目录 1.总体流程 2.主进程的源码分析 2.1 参数接收与解析 2.2 获取参数 2.3 调用输入函数 2.3.1 程序手动中断信号 2.3.2 strchr()函数 2.3.3 strndup ...
- Flink ParameterTool fromArgs源码分析
一.源码路径 java/org/apache/flink/streaming/examples/socket/SocketWindowWordCount.java 二.源码 /** Licensed ...
- s-sgdisk源码分析 “--set-alignment=value分区对齐参数”
文章目录 边界对齐子命令使用 源码分析 sgdisk.cc main函数入口 gptcl.cc DoOptions解析并执行具体命令函数 gpt.cc CreatePartition创建分区函数,设置 ...
- 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...
最新文章
- 网络爬虫流程与注意事项
- c++ 调用 ffmpeg 编程
- 虚拟化系列-VMware vSphere 5.1 简介与安装
- myeclipse hbm2java_myeclipse试用小记----Hibernate多对一双向关联(2)
- 一个简洁、有趣的无限下拉方案
- rust面向对象_面向初学者的Rust操作员综合教程
- C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中
- 推荐系统学习(三)SVD奇异值分解做推荐与python代码
- php mysql 降_php fork太多进程导致整体性能下降,mysql down掉的解决._PHP教程
- Discuz搜索模块解析
- 在GitHub中上传本地项目
- 基于yolov3 v4 v5的电梯轿厢下的电动车目标检测
- java爬虫(爬取豆瓣电影排行榜)
- WIN11添加我的电脑图标等的方法
- 上海创蓝253董事长_从世界记忆大师到互联网百强企业CEO:创蓝253钛牛哥的传奇之路...
- eclipse 使用maven打包 包含非java文件时报错
- 6-5图-图的基本操作
- inspect的使用
- 线性回归、岭回归和Lasso回归
- tensorflow环境安装(及tensorflow虚拟环境中配置jupyter)
热门文章
- rust最美建筑_[资料整理]动物之森的美丽物语 (多图;补完)
- 纯前端实现—满天星效果
- 从零到十亿,创业企业家如何迈向成功?
- 通俗的集线器、交换机、路由器功能原理入门
- 解决“ImportError: cannot import name 'imresize'”
- java抠图边框颜色处理_【图】绝密!抠图去黑边的方法 抠图去黑边框的处理技巧...
- 怎样处理部门之间相互推诿责任
- vb ping 计算机名称,vb实现ping
- 关于京牌“以家庭为单位摇号”“京牌可以继承”的不合理性分析
- pytest--fixture的使用(前置、后置)