FFMPEG为了提高解码速度,可以使用多线程并发解码,分为线程级并发解码和片级并发编程。并发解码需要解决多帧依赖问题。如同时对I帧和P帧解码,P帧依赖于I帧,怎么办?FFMPEG采用算法如下:

1.每个线程在解码完一行宏块后,更新解码高度H1

2.B/P帧解码宏块时,需要把待解码宏块H2与H1比较,H2>=H1,线程阻塞等待。

3.每个线程更新解码高度是,阻塞线程会被唤醒比较高度。

具体这种多线程机制有没有效果呢?做个分析试验:

实验中,分别设置并发线程 为1,2,4,6,8,10的解码时间。数据统计信息导入EXCEL如下:

FFMPEG多线程并发解码的效率测试

折线图分析结果:

FFMPEG多线程并发解码的效率测试

从图中可以看出,从线程1到2,4,6解码时间是成倍缩小的,6,8,10再增加线程的话,解码时间就没有明显改进。 

相关文章: