x264多线程编码

转自:http://blog.csdn.net/huibailingyu/article/details/44624781


x264有两种并行模式,slice并行和frame并行。slice并行把一帧划分为多个矩形slice,在这多个slice之间并行处理,是一种非延时性的并行模式,多slice会稍微降低编码性能。frame并行是同时开启多帧编码,x264在N个frame并行的时候需要集齐N帧再开始一起编码,因此x264 frame并行是一种延时性的并行模式(这是x264流程的问题,其实frame并行机制并不要求集齐N帧以后再启动编码)。对于对编码时间敏感的实时应用,不能采用frame并行,只能采用slice并行或者不做并行编码。


x264_param_t结构体里面的i_threads参数定义并行单元数目,根据并行模式的不同有不同的意义。
i_threads有三种设置方式。
1. i_threads = 1;
明确告诉编码器,不使用并行编码。zerolatency场景下设置param.rc.i_lookahead=0; 那么编码器来一帧编码一帧,无并行、无延时。如果没有设置i_lookahead=0,编码器会延时40帧(程序缺省值),再开始编码,这是为了做码率控制而统计帧信息。


2. i_threads = N;  (N>1)
明确告诉编码器,使用N个并行单元编码。如果param.b_sliced_threads=1那么一帧图像被划分为N个slice(N的取值也有限制,不能大于图像宏块行数),进行slice并行。如果param.b_sliced_threads=0进行frame并行。编码器会延时max(N, param.rc.i_lookahead)帧。zerolatency场景下场景下,param.b_sliced_threads=1; param.rc.i_lookahead=0; N个slice并行、无延时。注意有些厂家的解码器不支持多slice码流,这时不能进行这种设置,而只能采用设置1。


3. i_threads = 0; 或者不设置
不配置并行单元数,由程序根据当前CPU性能决定N值。决定N值后的流程和设置2是一样的。
一般slice并行N值小于frame并行的N值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值