在查看GLCameraRipple示例时,AVCaptureVideoDataOutput的设置方式是每当新帧从iphone相机到达时调用回调(captureOutput)。
但是,在“drawInRect”函数(用于OpenGL绘图)的开头放置“sleep(1)”,此回调每秒只调用一次,而不是每秒调用30次。
有谁可以告诉我为什么iphone相机的帧率与OpenGL绘图调用的帧率相关联?
更新:重现的步骤
NSLog(@"Got Frame");
。运行它将生成大量“获取帧”消息(大约每秒30个)sleep(1);
。现在每秒只显示一条消息。答案 0 :(得分:2)
当AVCaptureVideoDataOutput调用委托方法captureOutput:didOutputSampleBuffer:fromConnection:使程序员能够编辑或记录来自摄像头的图像时,此方法从主线程调用。并且,通常我们应该通过主线程直接编写与用户界面交互的代码,以及OpenGL喜欢AVCaptureVideoDataOutput的原因,因为来自摄像头和绘图到屏幕的方法在主线程中运行。
如果iPhone无法处理captureOutput,那么和AVCaptureVideoDataOutput类可以删除图像:didOutputSampleBuffer:fromConnection:完成时间超过1/30秒的处理时间下一帧将忽略您可以使用captureOutput收集数据:didDropSampleBuffer: fromConnection:方法