En iOS, estoy usando código para capturar desde AVCaptureStillImageOutput así:¿Por qué jpegStillImageNSDataRepresentation lanza una excepción cuando el buffer de muestra NO es nulo?
[_captureStillOutput captureStillImageAsynchronouslyFromConnection: _captureConnection completionHandler: asyncCaptureCompletionHandler];
por simplicidad a hervir abajo de mi código, mi bloque asyncCaptureCompletionHandler se parece a esto:
void(^asyncCaptureCompletionHandler)(CMSampleBufferRef imageDataSampleBuffer, NSError *error) =
^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (CMSampleBufferIsValid(imageDataSampleBuffer)) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
}
}
He pasado por todo mi código y referencias cruzadas con el desbordamiento de pila, y no he encontrado ninguna sugerencia de por qué una muestra válida buffer sería capturado sin ser un JPEG correcto.
_captureStillOutput = [[AVCaptureStillImageOutput alloc] init];
_captureStillOutput.outputSettings =
[NSDictionary dictionaryWithObjectsAndKeys:
AVVideoCodecJPEG, AVVideoCodecKey,
nil];
if ([session canAddOutput:_captureStillOutput]) {
[session addOutput:_captureStillOutput];
}
hay información suplementaria en el depurador: * Terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', razón: '* + [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:] - No es un tampón de muestra jpeg'.
Las búsquedas en google y el desbordamiento de pila tanto para "No hay un búfer de muestra jpeg" produjeron cero resultados. Estoy atascado. Bah.
Puedo confirmar, un buen '' rm -rf DerivedData/* 'y reiniciar Xcode solucionó este problema para mí. – Austin
En realidad, el problema reapareció pero luego desapareció cuando cerré iTunes. Esta es una muy loca – Austin
Gracias por la nota que reapareció y luego desapareció nuevamente. –