Ich habe ein Problem mit CGBitmapContextCreateImage in meiner iPhone App.CGBitmapContextCreateImage - vm_copy ist fehlgeschlagen - iPhone SDK
I AV Foundation-Framework bin mit Kamerarahmen mit dieser Methode greifen:
- (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);
}
Ich bin jedoch einen Fehler in der Debug-Konsole als seine Läufe zu sehen:
<Error>: CGDataProviderCreateWithCopyOfData: vm_copy failed: status 2.
Hat jemand jemals das gesehen? Durch Auskommen Linien habe ich das Problem Linie verengt, um:
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
aber ich bin nicht sicher, wie man es loswerden. Funktional funktioniert es super. Es wird also klarerweise das CGImage erstellt, aber ich muss wissen, was den Fehler verursacht, so dass andere Teile davon nicht betroffen sind.
Vielen Dank. Jede Hilfe/Beratung wäre großartig! Brett
Ich habe das gleiche Problem mit dem gleichen Code. Aber das Problem tritt nur auf iPhone 3G-Geräten auf iOS 4 auf. Es funktioniert ohne Probleme auf einem iPhone 4 oder iPhone 3GS. Kannst du das bestätigen? –
Ich kann bestätigen, dass die unten beschriebene Lösung funktioniert. Ich habe die vm_copy Nachricht auf einem 3G mit iOS 4. – mvds