Tengo un problema al utilizar CGBitmapContextCreateImage en mi aplicación de iPhone.CGBitmapContextCreateImage - vm_copy failed - iPhone SDK
estoy usando AV marco de la Fundación para tomar imágenes de cámara usando este método:
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer,0);
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
CGContextRelease(newContext);
CGColorSpaceRelease(colorSpace);
UIImage *image= [UIImage imageWithCGImage:newImage scale:1.0 orientation:UIImageOrientationRight];
self.imageView.image = image;
CGImageRelease(newImage);
}
Sin embargo, estoy viendo un error en la consola de depuración ya que sus carreras:
<Error>: CGDataProviderCreateWithCopyOfData: vm_copy failed: status 2.
Alguien ha ¿visto esto? Comentando las líneas que he estrechado la línea problema a:
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
pero no estoy seguro de cómo deshacerse de él. Funcionalmente, funciona genial. Entonces, claramente, se está creando CGImage, pero necesito saber qué está causando el error para que no afecte a otras partes.
Muchas gracias. ¡Cualquier ayuda/consejo sería genial! Brett
Estoy teniendo el mismo problema con el mismo código. Pero el problema solo aparece en los dispositivos iPhone 3G en iOS 4. Funciona sin problemas en un iPhone 4 o iPhone 3GS. ¿Puedes confirmar esto? –
Puedo confirmar que la corrección que presenté a continuación funciona. Recibí el mensaje vm_copy en un 3G con iOS 4. – mvds