定義されたフレーム レートでスクリーン ショットをキャプチャするアプリケーションのビデオを作成しようとしています。iPad 3 と iPad 2 の両方で、スクリーン キャプチャの指定されたフレーム レートが "renderInContext:" 関数によって尊重されていないように見えることだけが、実際にはすべて正常に機能しています。Retina ディスプレイ、renderInContext も考慮した画面のサイズのため、それは理解しています。 : iPhone や iPod よりも動作が遅くなります。
問題は iPad 3 で、キャプチャ レートを 1 秒あたり 10 フレームに設定すると、キャプチャは実際には 1 秒あたり 2 フレームで行われます。iPad 2 では、1 秒間に最大 6 フレームまで耐えられました。ただし、しばらくすると iPad 2 が登場し、市場で入手できるデバイスは iPad 3 だけになると思います。したがって、iPad 3 はコードを改良する場所になると思います。
iPad 3 で 10 fps 以上のスクリーン キャプチャ レートを期待しているわけではありません。iPad 3 で少なくとも 6 fps のキャプチャ レートがあれば問題ありません。ただし、renderInContext: iPad 3 では、画面全体 (768X1024) を使用すると、レンダリングが完了するまでに少なくとも 800 ミリ秒かかるようです。明らかに私は renderInContext を持っています: 特定のフレーム レート (たとえば 1/10 fps) でタイマーで実行します。renderInContext: への呼び出しがどのようにオーバーラップするかを確認します。たとえば、終了するには 800 ミリ秒が必要ですが、renderInContext: への別の呼び出しがあります。後で処理するために画像を配列に保存することは問題ないようですが、大量のメモリが割り当てられているため、メモリ警告が表示され、クラッシュが発生します。
いずれにせよ、私の質問は、「renderInContext:」メソッドを使用して表示バッファにアクセスできる他の方法があるかどうかです。または、png に書き込む前に CVImageRef から UIImage に変換せずに CVImageRef をファイルに書き込むだけですか? または、設定したのと同じフレーム レートで ImageRef 処理を記述できることを保証するメソッドです。これにより、オーバーラップがほとんどなく、メモリが適切に割り当て解除されることがわかります。