iOS では、次のように AVCaptureStillImageOutput からキャプチャするコードを使用しています。
[_captureStillOutput captureStillImageAsynchronouslyFromConnection: _captureConnection completionHandler: asyncCaptureCompletionHandler];
コードを簡略化するために、私の asyncCaptureCompletionHandler ブロックは次のようになります。
void(^asyncCaptureCompletionHandler)(CMSampleBufferRef imageDataSampleBuffer, NSError *error) =
^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (CMSampleBufferIsValid(imageDataSampleBuffer)) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
}
}
私はすべてのコードとクロス リファレンスをスタック オーバーフローで調べてきましたが、適切な JPEG でなくても有効なサンプル バッファがキャプチャされる理由を示唆するものは見つかりませんでした。
_captureStillOutput = [[AVCaptureStillImageOutput alloc] init];
_captureStillOutput.outputSettings =
[NSDictionary dictionaryWithObjectsAndKeys:
AVVideoCodecJPEG, AVVideoCodecKey,
nil];
if ([session canAddOutput:_captureStillOutput]) {
[session addOutput:_captureStillOutput];
}
デバッガーには補足情報があります: * キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。
Google とスタック オーバーフローの両方で「JPEG サンプル バッファではない」を検索しても、結果はゼロでした。私は立ち往生しています。ああ。