GLCameraRippleの例を見ると、AVCaptureVideoDataOutput は、iPhone カメラから新しいフレームが到着するたびにコールバック (captureOutput) が呼び出されるように設定されています。
ただし、「drawInRect」関数 (OpenGL 描画に使用される) の先頭に「sleep(1)」を配置すると、このコールバックは 1 秒あたり 30 回ではなく、1 秒あたり 1 回だけ呼び出されます。
iPhoneカメラのフレームレートがOpenGLドローコールのフレームレートとリンクしている理由を誰か教えてもらえますか?
更新: 再現手順
- ここから GLCameraRipple サンプルをダウンロードします: http://developer.apple.com/library/ios/#samplecode/GLCameraRipple/Introduction/Intro.html
- RippleViewController.m => captureOutput に
NSLog(@"Got Frame");
. 実行すると、多くの「フレームを取得しました」というメッセージが生成されます (1 秒あたり約 30 件)。 - RippleViewController.m => drawInRect
sleep(1);
で、関数の最初に a を追加します。毎秒 1 つのメッセージのみが表示されるようになりました。