0

を使用してカメラから画像を取得していAVCaptureVideoDataOutputます。私は自分のcaptureOutputでpixelBufferを調べます:

- (void)captureOutput:(AVCaptureOutput *)captureOutput
     didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
     fromConnection:(AVCaptureConnection *)connection {

    CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

pixelBuffer に必要なものが見つかったら、後で画像処理するためにこの画像を保存します。

3 つのオプションが表示されますが、どれを使用するのが最適かを考えています。

  1. 保存sampleBufferまたはコピーできます
  2. 保存pixelBufferまたはコピーできます
  3. CGImagefromを作成しpixelBufferて保存し、後で画像処理が必要になったときに、CGBitmapContextGetData()操作するビットマップを取得するために使用できます。ここには、不要なコピーがたくさんあるようです。

後で処理するためにビットマップを保存するための推奨される方法はどれですか? ビットマップを数分以上保存する必要はありません。つまり、ファイル システムに保存する必要はありません。答えが 1 または 2 の場合、バッファをそのまま保持できますか、それとも and を実行してコピーする必要がmallocありmemcpyますか?

4

1 に答える 1

0

私は 3) を行いますが、ピクセル バッファーを新しく割り当てられたメモリにコピーする必要があります。これは、そのコールバックにいる短い瞬間にのみ有効であるためです。そのテクニックを使って、毎秒 30 フレームを取得していました。

于 2012-09-20T11:24:12.860 に答える