AVCapturePhotoOutput сделалFinishProcessingPhoto не вызывается
Я пытаюсь сделать снимок, используя
AVCapturePhotoOutput
а также
AVCaptureSession
мой код выглядит следующим образом (запуск через XCTest):
func testCapture() {
let expectation = expectation(description: "Camera")
let captureSession = AVCaptureSession()
let videoDevice = AVCaptureDevice.default(for: .video)
// Create the capture device.
let videoDeviceInput = try! AVCaptureDeviceInput(device: videoDevice!)
guard captureSession.canAddInput(videoDeviceInput) else {
assert(false)
return
}
captureSession.addInput(videoDeviceInput)
let photoOutput = AVCapturePhotoOutput()
guard captureSession.canAddOutput(photoOutput) else {
assert(false)
return
}
captureSession.sessionPreset = .photo
photoOutput.isHighResolutionCaptureEnabled = true
// Add the output.
captureSession.addOutput(photoOutput)
// Open the camera.
captureSession.startRunning()
// Create callback.
let delegate = Delegate({ photo in
print("Success")
expectation.fulfill()
})
let settings = AVCapturePhotoSettings()
photoOutput.capturePhoto(with: settings, delegate: delegate)
self.wait(for: [expectation], timeout: 30)
}
И мой объект делегата:
private class Delegate: NSObject, AVCapturePhotoCaptureDelegate {
let callback: (AVCapturePhoto) -> Void
init(_ callback: @escaping (AVCapturePhoto) -> Void) {
self.callback = callback
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
print("Did finish processing photo: \(photo) error: \(error)")
self.callback(photo)
}
func photoOutput(_ output: AVCapturePhotoOutput, willBeginCaptureFor resolvedSettings: AVCaptureResolvedPhotoSettings) {
print("Will begin capture")
}
func photoOutput(_ output: AVCapturePhotoOutput, willCapturePhotoFor resolvedSettings: AVCaptureResolvedPhotoSettings) {
print("Will capture photo")
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishCaptureFor resolvedSettings: AVCaptureResolvedPhotoSettings, error: Error?) {
print("didFinishCaptureFor")
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishRecordingLivePhotoMovieForEventualFileAt outputFileURL: URL, resolvedSettings: AVCaptureResolvedPhotoSettings) {
print("didFinishRecordingLivePhotoMovieForEventualFileAt")
}
func photoOutput(_ output: AVCapturePhotoOutput, didCapturePhotoFor resolvedSettings: AVCaptureResolvedPhotoSettings) {
print("Did capture image")
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingLivePhotoToMovieFileAt outputFileURL: URL, duration: CMTime, photoDisplayTime: CMTime, resolvedSettings: AVCaptureResolvedPhotoSettings, error: Error?) {
print("Did finish processing live")
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photoSampleBuffer: CMSampleBuffer?, previewPhoto previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) {
print("Did finish processing2")
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingRawPhoto rawSampleBuffer: CMSampleBuffer?, previewPhoto previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) {
print("Did finish processing raw")
}
}
Выполнение кода дает следующий результат:
Will begin capture
Will capture photo
Did capture image
Отсутствует звонок
didFinishProcessingPhoto
.
Есть идеи, в чем может быть причина?