setSampleBufferDelegate(_:queue:)

Apple Developer より

https://developer.apple.com/documentation/avfoundation/avcapturevideodataoutput/1389008-setsamplebufferdelegate

サンプルバッファデリゲートと、コールバックが呼び出されるキューを設定します。

iOS 4.0以降

macOS 10.7以降

Mac Catalyst 13.0以降

AVFoundation

宣言

func setSampleBufferDelegate(_ sampleBufferDelegate: AVCaptureVideoDataOutputSampleBufferDelegate?, 
                       queue sampleBufferCallbackQueue: DispatchQueue?)

パラメーター

sampleBufferDelegate

キャプチャ後にサンプルバッファを受信するプロトコル AVCaptureVideoDataOutputSampleBufferDelegate に準拠したオブジェクト。

sampleBufferCallbackQueue

コールバックが呼び出されるキュー。ビデオフレームが順番に配信されるようにするには、シリアルディスパッチキューを使用する必要があります。

sampleBufferCallbackQueue パラメータは、sampleBufferDelegatが NULL に設定される場合を除き、NULLに設定してはいけない。

ディスカッション

新しいビデオサンプルバッファーがキャプチャされると、captureOutput(_:didOutput:from:) により、サンプルバッファーデリゲートに送信されます。すべてのデリゲートメソッドは、指定されたディスパッチキューで呼び出されます。

新しいフレームがキャプチャされたときにキューがブロックされている場合、それらのフレームは、alwaysDiscardsLateVideoFrames プロパティの値によって決定されたときに自動的にドロップされます。これにより、同じフレームで既存のフレームを処理できるようになります。処理が着信フレームのレートに追いつかない場合、メモリ使用量が増加しますが、それを管理する必要がなくなります。要は、データが捨てられるので、メモリの解放をする必要がなくなるということ。

フレーム処理が常に着信フレームのレートに対応できない場合は、minFrameDuration プロパティを使用することを検討する必要があります。これにより、通常、フレームドロップのみの場合よりもパフォーマンス特性が向上し、フレームレートの一貫性が向上します。

フレームがドロップされる可能性を最小限に抑える必要がある場合は、受信するサンプルバッファーの外で十分に少ない量の処理が実行されるキューを指定する必要があります。ただし、追加の処理を別のキューに移行する場合は、処理されていないフレームの影響を受けずにメモリ使用量が増加しないようにする必要があります。

投稿者: admin

Free Software Engineer

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です