【发布时间】:2010-12-13 23:36:26
【问题描述】:
我目前使用以下代码拍摄一系列图像:
- (void)shootSeries:(int)photos {
if(photos == 0) {
[self mergeImages];
} else {
[output captureStillImageAsynchronouslyFromConnection:connection completionHandler:
^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
NSLog(@"Shot picture %d.", 7 - photos);
[self shootSeries:(photos - 1)];
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(imageDataSampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
int dataSize = CVPixelBufferGetDataSize(pixelBuffer);
CFDataRef data = CFDataCreate(NULL, (const UInt8 *)CVPixelBufferGetBaseAddress(pixelBuffer), dataSize);
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData(data);
CFRelease(data);
CGImageRef image = CGImageCreate(CVPixelBufferGetWidth(pixelBuffer),
CVPixelBufferGetHeight(pixelBuffer),
8, 32,
CVPixelBufferGetBytesPerRow(pixelBuffer),
colorspace,
kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little,
dataProvider, NULL, true, kCGRenderingIntentDefault);
CFRelease(dataProvider);
CFArrayAppendValue(shotPictures, image);
CFRelease(image);
}];
}
}
虽然这工作得很好,但速度很慢。为什么像 ClearCam 这样的应用程序可以比这更快地拍摄系列照片?我该怎么做?
【问题讨论】:
-
你发现了吗?如果是这样,如果您能发布答案,我将不胜感激。我尝试了很多技术,例如创建多个输入和输出并在它们之间循环,或者在每次拍摄后添加/删除输入/输出。我的问题是,如果允许用户非常快速地拍照,最终会出现 NULL CMSampleBuffers 和“AVFoundation out of memory”错误。最终的结果是部分照片丢失了,这显然比强迫他们更慢地拍照更糟糕。
标签: iphone objective-c ios avfoundation