为什么AVCaptureVideoDataOutput回调依赖于OpenGL绘制帧率?

时间:2013-07-01 08:54:14

标签: iphone ios opengl-es camera avcapturesession

在查看GLCameraRipple示例时,AVCaptureVideoDataOutput的设置方式是每当新帧从iphone相机到达时调用回调(captureOutput)。

但是,在“drawInRect”函数(用于OpenGL绘图)的开头放置“sleep(1)”,此回调每秒只调用一次,而不是每秒调用30次。

有谁可以告诉我为什么iphone相机的帧率与OpenGL绘图调用的帧率相关联?


更新:重现的步骤

1 个答案:

答案 0 :(得分:2)

当AVCaptureVideoDataOutput调用委托方法captureOutput:didOutputSampleBuffer:fromConnection:使程序员能够编辑或记录来自摄像头的图像时,此方法从主线程调用。并且,通常我们应该通过主线程直接编写与用户界面交互的代码,以及OpenGL喜欢AVCaptureVideoDataOutput的原因,因为来自摄像头和绘图到屏幕的方法在主线程中运行。

如果iPhone无法处理captureOutput,那么

和AVCaptureVideoDataOutput类可以删除图像:didOutputSampleBuffer:fromConnection:完成时间超过1/30秒的处理时间下一帧将忽略您可以使用captureOutput收集数据:didDropSampleBuffer: fromConnection:方法