该原创文章首发于微信公众号:字节流动
为什么会用到错帧同步?
一般 Android 系统相机的最高帧率在 30 FPS 左右,当帧率低于 20 FPS 时,用户可以明显感觉到相机画面卡顿和延迟。
我们在做相机预览和视频流处理时,对每帧图像处理时间过长(超过 30 ms)就很容易造成画面卡顿,这个场景就需要用到错帧同步方法去提升画面的流畅度。
错帧同步,简单来说就是把当前的几帧缓冲到子线程中处理,主线程直接返回子线程之前的处理结果,属于典型的以空间换时间策略。
错帧同步策略也有不足之处,它不能在子线程中缓冲太多的帧,否则造成画面延迟。另外,每个子线程分配的任务也要均衡(即每帧在子线程中的处理时间大致相同),不然会因为 CPU 线程调度的时间消耗适得其反。

错帧同步的原理如上图所示,我们开启三个线程:一个主线程,两个工作线程,每一帧图像的处理任务分为 2 步,第一个工作线程完成第一步处理,第二个工作线程完成第二步处理,每一帧都要经过这两步的处理。
当主线程输入第 n + 1 帧到第一个工作线程后,主线程会等待第二个工作线程中第 n 帧的处理结果然后返回,这种情况下你肯定会问第 0 帧怎么办?第 0 帧就直接返回就行了。
这些步骤下来,可以看成第 n+

本文探讨了在Android系统中,为解决相机预览和视频流处理时因处理时间过长导致的画面卡顿问题,如何通过错帧同步策略提高画面流畅度。错帧同步利用子线程缓冲并处理帧数据,以空间换取时间,提升性能。通过一个简单的信号量实现的“生产者-消费者”模型,阐述了错帧同步的工作原理和实际效果。
订阅专栏 解锁全文
1329

被折叠的 条评论
为什么被折叠?



