AVFoundation フレームワークとさまざまな Core xxxx フレームワークをよりよく理解しようとしているので、簡単なビデオ キャプチャを試して、画像として UI に出力できるかどうかを確認することにしました。rosyWriter コードとドキュメントを見ましたが、答えはありませんでした。そう:
入力と出力を追加するための標準のキャプチャ セッション コードがあります。以下は、質問に関連しています。
//moving the buffer processing off the main queue
dispatch_queue_t bufferProcessingQueue=dispatch_queue_create("theBufferQueue", NULL);
[self.theOutput setSampleBufferDelegate:self queue:bufferProcessingQueue];
dispatch_release(bufferProcessingQueue);
そして、デリゲート:
-(void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
CVPixelBufferRef pb = CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pb];
CGImageRef ref = [self.theContext createCGImage:ciImage fromRect:ciImage.extent];
dispatch_async(dispatch_get_main_queue(), ^{
self.testBufferImage.image= [UIImage imageWithCGImage:ref scale:1.0 orientation:UIImageOrientationRight];
});
}
質問:
1-上記のように、メインキューではなく、上記のようにデリゲートを別のキューで実行するように常に設定する必要があると思います。正しい?
2- 併せて、デリゲート メソッドでは、UI を処理するすべての呼び出しを、私が行ったようにメイン キューに戻す必要があります。正しい?
3- このコードを実行すると、約 5 ~ 10 秒後に「Received memory warning」エラーが発生し、アプリがシャットダウンします。何が原因でしょうか?