静止写真を撮る前に独自のライブ プレビューを作成するアプリケーションがあります。アプリは画像データに対して何らかの処理を実行する必要があるため、AVCaptureVideoPreviewLayer に依存することはできません。Apple のサンプル コードを使用して、初期ストリームを動作させることは非常にうまくいっています。問題は、スナップショットを取得するために高品質のイメージに切り替えようとしたときに発生します。ボタンを押すと、フル解像度の写真を撮るためにセッションを再構成しようとします。私は多くのバリエーションを試しましたが、これが私の最新の例です (まだ動作しません):
- (void)sessionSetupForPhoto
{
[session beginConfiguration];
session.sessionPreset = AVCaptureSessionPresetPhoto;
AVCaptureStillImageOutput *output = [[[AVCaptureStillImageOutput alloc] init] autorelease];
for (AVCaptureOutput *output in [session outputs]) {
[session removeOutput:output];
}
if ([session canAddOutput:output]){
[session addOutput:output];
} else {
NSLog(@"Not able to add an AVCaptureStillImageOutput");
}
[session commitConfiguration];
}
I am consistently getting an error message just after the commitConfiguration line that looks like this: (that is to say, I am getting an AVCaptureSessionRuntimeErrorNotification sent to my registered observer)
Received an error: NSConcreteNotification 0x19d870 {name = AVCaptureSessionRuntimeErrorNotification; object = ; userInfo = { AVCaptureSessionErrorKey = "Error Domain=AVFoundationErrorDomain Code=-11800 \"The operation couldn\U2019t be completed. (AVFoundationErrorDomain error -11800.)\" UserInfo=0x19d810 {}";
The documentation in XCode ostensibly provides more information for the error number (-11800), "AVErrorUnknown - Reason for the error is unknown.";
以前にも stopRunning と startRunning の呼び出しを試みましたが、推奨されない WWDC セッション 409 を見た後はそれを行わなくなりました。停止して開始すると、別のエラー メッセージ -11819 が表示されました。これは、「AVErrorMediaServicesWereReset - メディア サービスが利用できなくなったため、操作を完了できませんでした。」に対応します。これは、単に「不明」というよりもはるかに優れていますが、必ずしもそうとは限りません。もう役に立ちます。
AVCaptureStillImageOutput が正常に追加されます (つまり、ログ メッセージは出力されません)。
iPhone 3g (w/4.1) と iPhone 4 でテストしています。
この呼び出しは、元の AVCaptureSession セットアップが行われた場所でもあるメイン スレッドで行われています。
エラーを回避するにはどうすればよいですか? より高い解像度に切り替えて写真を撮るにはどうすればよいですか?
ありがとうございました!