x264线程延迟

时间:2012-07-22 11:40:03

标签: latency x264

我想知道为什么x264中的无切片线程(http://akuvian.org/src/x264/sliceless_threads.txt)会导致延迟?如果我有例如2个线程,则第一个编码一个帧,第二个编码一个帧。在某些情况下,秒必须等待第一秒。但它们可以并行编码。

所以两个线程应该比一个线程更快,对吗?

3 个答案:

答案 0 :(得分:2)

我花了很长时间来推理它,但答案是排队论。

当前一帧的一半已被编码时,可以启动每个帧。但是,如果并行化将提供任何好处,那么大多数(最好是所有)线程应该有一个框架可以工作。 5个线程表示5个帧。这就是管道。只要管道没有完全填满,并行化就会给你带来更少的好处。如果管道只包含一个框架,则只有一个线程正在工作,因此您无法从并行化中获益。但是,如果您的管道通常已满,那它充满了什么?未编码的帧。未编码的帧是必须捕获的帧,因此它们代表了许多帧的延迟。由于帧中的一些帧是部分编码的,因此延迟可能会稍微减少帧的一小部分,因为管道中的某些帧通常会导致延迟。

答案 1 :(得分:2)

帧开始在帧中增加延迟而不是几秒钟,因为在开始获取输出帧(填充管道)之前需要为编码器提供更多输入帧。编码一个帧本身将花费与一个线程几乎相同的处理器时间,但线程允许通过编码不同的帧并行来进行流水线处理。从其他手动切片线程减少延迟,因为所有线程编码一帧并行所以它比用一个线程编码它更快完成(也切片线程在管道中不需要延迟)。

答案 2 :(得分:0)

使用更多线程增加延迟的原因之一是连续的帧相互使用以进行运动预测和补偿。这意味着要压缩帧,您需要先前运动估计详细信息中的信息。这意味着帧彼此依赖,有时它们还必须等待至少其他线程的一些数据。这与切片线程形成对比,当线程将帧切成一帧时,每个线程都在一个切片上工作,并且全部在同一帧上,并且它们具有前一帧或B帧的下一个帧的所有所需信息。

相关问题